Anthos Service Mesh 업그레이드

이 페이지에서는 Anthos Service Mesh를 업그레이드하는 방법을 설명합니다.

플랫폼 관리자가 Anthos Service Mesh를 업그레이드할 수 있습니다. Anthos Service Mesh 업그레이드는 일부 워크로드에 대해서만 새 버전을 테스트하면서 새 버전과 이전 버전의 제어 영역이 함께 실행되는 버전 기반 또는 카나리아 방식의 업그레이드로 수행됩니다. 이러한 접근 방식은 새 버전의 제어 영역이 이전 버전을 대체하는 인플레이스(In-Place) 업그레이드보다 안전합니다.

Anthos Service Mesh 제어 영역 구성요소를 다시 배포하려면 5~10분 정도 걸립니다. 또한 현재 Anthos Service Mesh 버전으로 업데이트되도록 모든 워크로드에 새로운 사이드카 프록시를 삽입해야 합니다. 사이드카 프록시를 업데이트하는 데 걸리는 시간은 분당 약 100개 포드 정도이지만, 포드 수, 노드 수, 배포 확장 설정, 포드 중단 예산, 기타 구성 설정과 같은 다양한 요소에 따라 달라집니다.

기본 요건

업그레이드하기 전 다음 조건이 충족되었는지 확인합니다.

  • 대상 사용자 클러스터가 관리자 클러스터로 관리되어야 합니다.
  • 대상 사용자 클러스터에 업그레이드를 사용할 수 있는 기존 Anthos Service Mesh 설치가 있어야 합니다.

기존 설치 보기

Anthos Service Mesh가 클러스터에 설치되었는지 확인합니다.

콘솔

관리 센터 콘솔에서 서비스 메시 메뉴로 이동하여 Anthos Service Mesh가 설치된 클러스터 목록을 확인합니다.

API

관리자 클러스터에서 현재 Anthos Service Mesh 설치를 기술하는 다음과 같은 커스텀 리소스를 찾을 수 있습니다.

  • ServiceMeshBinding 객체는 ServiceMeshFeatureSpec 객체를 사용자 클러스터의 ID와 결합합니다. 이 객체를 찾으려면 다음 명령어를 실행하세요. 이 명령어가 여러 객체를 반환할 수 있기 때문에 해당 사양에 대상 클러스터의 ID가 있는 객체를 찾아야 합니다.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
    

    다음은 객체의 콘텐츠 예시입니다.

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: PREVIOUS_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         - TARGET_CLUSTER_ID
    
  • ServiceMeshFeatureSpec 객체는 Anthos Service Mesh 설치 사양을 정의합니다. 네임스페이스 및 이름은 이전 예시에 설명된 ServiceMeshBinding 객체의 config.configRef 필드에서 참조됩니다. 이 객체를 보려면 다음 명령어를 실행하세요.

    KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
    

    다음은 객체의 콘텐츠 예시입니다.

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name:PREVIOUS_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.7.3-asm.6
    

새 버전의 Anthos Service Mesh 설치

관리 센터 콘솔 또는 API를 사용하여 새 버전의 Anthos Service Mesh로 업데이트할 수 있습니다.

콘솔

  1. 관리 센터 콘솔에서 대시보드 메뉴로 이동합니다.
  2. 업그레이드 탭을 클릭하여 사용 가능한 모든 업그레이드를 확인합니다.
  3. 업그레이드하려는 클러스터에 대해 업그레이드 보기를 클릭합니다.
  4. 사용 가능한 업그레이드 목록에서 업그레이드하려는 대상 Anthos Service Mesh 버전을 찾고 업그레이드를 클릭하여 Anthos Service Mesh 업그레이드 페이지를 엽니다. 사용 가능한 업그레이드 페이지
  5. 버전, 설명, 출시 노트 링크와 같은 대상 버전 정보를 확인하고 계속을 클릭합니다.
  6. 팝업 대화상자에서 업그레이드를 클릭하여 대상 클러스터에 Anthos Service Mesh의 대상 버전 설치를 시작합니다.
  7. 대상 버전을 설치 중인지 확인할 수 있는 서비스 메시 페이지가 열립니다.

API

관리 클러스터에서 kubectl 명령어를 사용하여 다음 단계를 수행하여 새 버전의 Anthos Service Mesh를 설치합니다.

  1. 새 버전에 대해 새 ServiceMeshFeatureSpec 객체를 만듭니다. 다음은 1.8.3-asm.2 버전에 대한 샘플 객체입니다.

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshFeatureSpec
    metadata:
     name: NEW_SERVICE_MESH_SPEC
     namespace: anthos-management-center
    spec:
     version: 1.8.3-asm.2
    
  2. 기존 ServiceMeshBinding 객체를 업데이트하여 새 ServiceMeshFeatureSpec을 클러스터와 결합하기 위해 새 항목을 삽입합니다.

     apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
     kind: ServiceMeshBinding
     metadata:
      name: service-mesh-binding-sample
      namespace: anthos-management-center
     spec:
      configs:
      - configRef:
          name: PREVIOUS_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
      - configRef:
          name: NEW_SERVICE_MESH_SPEC
          namespace: anthos-management-center
        placement:
          clusterIDs:
          - TARGET_CLUSTER_ID
    
  3. 새 버전의 Anthos Service Mesh가 관리자 클러스터에 설치됩니다. 다음 명령어를 사용하여 설치가 준비되었는지 확인할 수 있습니다.

     KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
    

    TARGET_CLUSTER_IDNEW_SERVICE_MESH_SPECServiceMeshBinding 객체에 구성된 값으로 바꿉니다.

    다음은 출력의 예시입니다.

    target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
    

    Ready 조건의 status: true는 설치가 완료되었음을 나타냅니다.

이전 버전의 Anthos Service Mesh는 자동으로 삭제되지 않습니다. Anthos Service Mesh의 새 버전으로 수동으로 워크로드를 마이그레이션하고 이전 버전을 제거해야 합니다.

워크로드 마이그레이션

워크로드를 마이그레이션하려면 사용자 클러스터에서 다음 단계를 수행합니다.

  1. 이전 버전 및 새 버전의 Anthos Service Mesh의 버전 라벨을 가져옵니다. 이 값을 확인하는 방법은 다음과 같습니다.

    콘솔

    1. 관리 센터 콘솔에서 서비스 메시 메뉴로 이동합니다.
    2. 클러스터 목록에서 클러스터의 버전 열에서 버전 라벨을 찾습니다.

    API

    다음 명령어를 실행합니다.

     KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
    

    다음은 출력의 예시입니다.

    NAME                                READY   STATUS    RESTARTS   AGE   REV
    istiod-asm-173-6-756d989c58-p84b9   1/1     Running   0          13h   asm-173-6
    istiod-asm-173-6-756d989c58-t6vh8   1/1     Running   0          13h   asm-173-6
    istiod-asm-183-2-76f64c6bc7-2qnxq   1/1     Running   0          17h   asm-183-2
    istiod-asm-183-2-76f64c6bc7-8nrpz   1/1     Running   0          17h   asm-183-2
    

    출력에서 버전 라벨은 REV 열 아래에 있습니다. 이 예시에서 값은 asm-183-2입니다. 이 라벨은 나중에 새 Anthos Service Mesh 버전에 대해 사이드카 삽입을 트리거하기 위해 사용됩니다.

  2. 네임스페이스에 버전 라벨을 추가합니다. 다음 명령어에서 REVISION을 새 Anthos Service Mesh 버전의 버전 라벨과 일치하는 값으로 변경합니다.

    KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
    
  3. 다시 삽입을 트리거하기 위해, 예를 들어 네임스페이스에서 모든 배포를 다시 시작하기 위해 워크로드를 다시 시작합니다.

    KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
    
  4. 포드가 새 버전의 istiod를 가리키도록 구성되었는지 확인합니다.

    KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    
  5. 애플리케이션을 테스트하여 워크로드가 올바르게 작동하는지 확인합니다.

  6. 다른 네임스페이스에 워크로드가 있으면 2~5단계를 반복하여 네임스페이스에 라벨을 지정하고 워크로드를 다시 시작합니다.

이전 버전의 Anthos Service Mesh 삭제

애플리케이션이 예상한 대로 작동하면 관리 센터 또는 API를 사용하여 이전 버전의 Anthos Service Mesh를 제거할 수 있습니다.

콘솔

  1. 관리 센터 콘솔에서 서비스 메시 메뉴로 이동합니다.
  2. 버전 열에서 이전 Anthos Service Mesh 버전의 링크를 클릭합니다.
  3. 서비스 메시 수정 페이지에서 서비스 메시 삭제를 클릭합니다.
  4. 삭제 전 신뢰도 검사 결과가 팝업 대화상자에 표시됩니다. 대화상자에는 네임스페이스 및 포드에서 istio.io/rev 라벨을 검사하여 이전 버전의 Anthos Service Mesh에 따라 달라지는 모든 네임스페이스 및 포드가 나열됩니다. 검사로 이러한 종속 항목이 발견되면 해당 포드 또는 네임스페이스를 마이그레이션할 때까지 작업을 진행할 수 없습니다.
  5. 신뢰도 검사를 통과하면 삭제를 클릭하여 대상 클러스터에서 Anthos Service Mesh 제거를 시작합니다.

삭제 요청을 제출하면 서비스 메시 페이지가 열리고 이전 버전의 Anthos Service Mesh가 더 이상 표시되지 않습니다. 이전 Anthos Service Mesh 리소스 제거는 완료하는 데 몇 분 정도 걸릴 수 있습니다.

API

  1. 이전 버전의 Anthos Service Mesh를 삭제하기 전 해당 버전의 Anthos Service Mesh에 의존하는 포드 또는 네임스페이스가 없는지 확인합니다.

    1. 다음 명령어를 실행하여 네임스페이스 종속 항목을 확인합니다.

      KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION  
      

      PREVIOUS_REVISION을 이전 Anthos Service Mesh 버전의 버전 라벨로 바꿉니다.

    2. 다음 명령어를 실행하여 포드 종속 항목을 확인합니다.

      KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
      

    쿼리가 빈 결과를 반환하면 다음 단계로 진행합니다. 그렇지 않으면 계속하기 전에 먼저 워크로드를 마이그레이션합니다.

  2. 대상 클러스터에서 이전 특성 사양의 결합을 해제하도록 관리 클러스터에서 ServiceMeshBinding 객체를 업데이트합니다. 다음은 PREVIOUS_SERVICE_MESH_SPEC 항목을 삭제한 후 ServiceMeshBinding 객체의 예시입니다.

    apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1
    kind: ServiceMeshBinding
    metadata:
     name: service-mesh-binding-sample
     namespace: anthos-management-center
    spec:
     configs:
     - configRef:
         name: NEW_SERVICE_MESH_SPEC
         namespace: anthos-management-center
       placement:
         clusterIDs:
         -  TARGET_CLUSTER_ID
    
  3. ServiceMeshBinding이 업데이트된 후 이전 Anthos Service Mesh 버전 삭제가 시작됩니다. 제거를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 다음 명령어를 실행하여 이전 버전이 삭제되었는지 확인합니다.

    KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
    

    제거가 완료되면 이 명령어가 빈 결과를 반환합니다.