IBM Cloud Docs
Istio 업데이트

Istio 업데이트

관리 추가 기능을 사용하여 설치된 Istio 버전을 업데이트하려면 istioctl을 사용하지 마십시오. 업데이트 시 관리형 Istio 애드온에는 Istio 버전 업데이트도 포함됩니다.

Istio 애드온의 마이너 버전으로 업데이트하기

IBM Cloud는 IBM Cloud Kubernetes Service에서 지원하는 최신 버전의 Istio에 대한 패치 업데이트를 자동으로 롤아웃하여 모든 Istio 컴포넌트를 최신 상태로 유지합니다. 지원되는 버전은 IBM Cloud 에서 테스트하고 IBM Cloud Kubernetes Service 에서 사용 승인을 받았습니다.

시작하기 전에:

마이너 버전을 업데이트할 때 다음 사항에 유의하세요:

  • Istio 추가 기능은 한 번에 한 버전만 수동으로 업데이트할 수 있습니다. Istio 애드온을 두 개 이상의 버전으로 업데이트하려면 수동 업데이트 프로세스를 반복하거나 애드온을 제거한 다음 최신 버전을 설치할 수 있습니다.

  • 관리 Istio 추가 기능을 이전 버전으로 되돌릴 수 없습니다. 이전 부 버전으로 되돌리려면 애드온을 제거한 다음 이전 버전을 설치해야 합니다.

  • istio-system 네임스페이스의 Istio 제어 컴포넌트를 최신 부 버전으로 업데이트하면 변경이 중단될 수 있습니다. 부 버전 업데이트 중에 발생하는 다음 변경사항을 검토하십시오.

    • 업데이트가 제어 플레인 팟(Pod)으로 롤아웃되면 팟(Pod)이 다시 작성됩니다. 업데이트가 완료될 때까지 Istio 제어 플레인을 완전히 사용할 수 없습니다.
    • Istio 데이터 플레인은 업데이트 중에 계속 작동합니다. 하지만 서비스 메시의 앱에 대한 일부 트래픽이 짧은 시간 동안 인터럽트될 수 있습니다.
    • istio-ingressgateway 로드 밸런서의 외부 IP 주소는 업데이트 중이나 후에 변경되지 않습니다.

Istio 애드온의 부 버전을 업데이트하려면 다음과 같이 하세요:

  1. Istio 추가 기능의 현재 버전을 검토하십시오.

    kubectl get iop managed-istio -n ibm-operators -o jsonpath='{.metadata.annotations.version}'
    
  2. 사용 가능한 Istio 추가 기능 버전을 검토하십시오.

    ibmcloud ks addon-versions
    
  3. Istio 애드온 변경 로그에서 각 버전의 변경 사항을 검토하세요.

  4. 버전 1.11에서 버전 1.12로 업그레이드 중이고 Istio 컴포넌트가 버전 1.10 이하에서 프로비저닝된 경우:

    1. 명령을 실행하여 다양한 웹훅 구성의 세부사항을 가져오십시오.

      kubectl get mutatingwebhookconfigurations
      

      출력 예

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   5          32m
      
    2. 출력에서 istio-sidecar-injector을(를) 찾고 WEBHOOKS 열을 검토하십시오. 5개 이상의 웹훅이 있으면 다음 명령을 실행하여 추가 웹훅을 삭제하십시오.

      kubectl delete mutatingwebhookconfigurations istio-sidecar-injector && kubectl rollout restart deploy addon-istio-operator -n ibm-operators
      

      출력 예

      mutatingwebhookconfiguration.admissionregistration.k8s.io "istio-sidecar-injector" deleted
      
    3. 추가 웹훅이 삭제되었는지 확인하십시오. 음소거 웹훅 구성의 세부사항을 가져오고 네 개의 istio-sidecar-injector 웹훅이 있는지 확인하십시오.

      kubectl get mutatingwebhookconfigurations
      

      출력 예

      NAME                     WEBHOOKS   AGE
      istio-sidecar-injector   4          60s
      
    4. 명령을 실행하여 유효성 검증 웹훅 구성의 세부사항을 가져오십시오.

      kubectl get validatingwebhookconfigurations
      

      출력 예

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          66s
      istiod-istio-system            1          31m
      
    5. 출력을 검토하십시오. istiod-istio-system 웹훅이 나열되면 다음 명령을 실행하여 삭제하십시오.

      kubectl delete ValidatingWebhookConfiguration istiod-istio-system
      

      출력 예

      validatingwebhookconfiguration.admissionregistration.k8s.io "istiod-istio-system" deleted
      
    6. istiod-istio-system 웹훅이 더 이상 나열되지 않는지 확인하십시오.

      kubectl get validatingwebhookconfigurations
      

      출력 예

      NAME                           WEBHOOKS   AGE
      istio-validator-istio-system   2          2m
      
  5. Istio 추가 기능을 업데이트하십시오.

    ibmcloud ks cluster addon update istio --version <version> -c <cluster_name_or_ID>
    
  6. 계속하기 전에 업데이트가 완료되었는지 확인하십시오.

    업데이트 프로세스를 완료하는 데 최대 20분이 걸릴 수 있습니다.

    1. Istio 추가 기능의 상태normal이고 상태Addon Ready인지 확인하십시오. 상태가 updating인 경우 업데이트가 아직 완료되지 않았습니다.

      ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
      
    2. istio-system 네임스페이스의 컨트롤 플레인 컴포넌트 파드가 Running상태인지 확인합니다.

      kubectl get pods -n istio-system
      
      NAME                                                     READY   STATUS    RESTARTS   AGE
      istio-system    istio-egressgateway-6d4667f999-gjh94     1/1     Running     0          61m
      istio-system    istio-egressgateway-6d4667f999-txh56     1/1     Running     0          61m
      istio-system    istio-ingressgateway-7bbf8d885-b9xgp     1/1     Running     0          61m
      istio-system    istio-ingressgateway-7bbf8d885-xhkv6     1/1     Running     0          61m
      istio-system    istiod-5b9b5bfbb7-jvcjz                  1/1     Running     0          60m
      istio-system    istiod-5b9b5bfbb7-khcht                  1/1     Running     0          60m
      
  7. istioctl 클라이언트 및 사이드카를 업데이트하십시오.

istioctl 클라이언트 및 사이드카 업데이트

Istio 관리 추가 기능이 업데이트될 때마다 istioctl 클라이언트 및 사용자 앱의 Istio 사이드카를 업데이트하십시오.

예를 들어, IBM Cloud Kubernetes Service를 사용하여 추가 기능의 패치 버전을 자동으로 업데이트하거나 추가 기능의 부 버전을 업데이트할 수 있습니다. 두 경우 모두, 추가 기능의 Istio 버전과 일치하도록 istioctl 클라이언트 및 사용자 앱의 기존 Istio 사이드카를 업데이트하십시오.

  1. istioctl 클라이언트 및 Istio 추가 기능 제어 플레인의 버전을 가져오십시오.

    istioctl version --short=false
    

    출력 예

    client version: version.BuildInfo{Version:"1.11.2"}
    pilot version: version.BuildInfo{Version:1.23.5}
    pilot version: version.BuildInfo{Version:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-vp97p.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-qkhgm.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-dffhq.istio-system", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"httpbin-74fb669cc6-svc8x.default", IstioVersion:1.23.5}
    data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-cs9r9.istio-system", IstioVersion:1.23.5}
    ...
    
  2. 출력에서 client version(istioctl)과 Istio 제어 플레인 컴포넌트의 버전(예: pilot version)을 비교하십시오. client version 및 제어 플레인 컴포넌트 버전이 일치하지 않는 경우:

    1. 제어 플레인 컴포넌트와 동일한 버전의 istioctl 클라이언트를 다운로드하십시오.

      curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh -
      
    2. Istio 패키지 디렉토리로 이동하십시오.

      cd istio-1.23.5
      
    3. Linux 및 macOS 사용자: istioctl 클라이언트를 PATH 시스템 변수에 추가하십시오.

      export PATH=$PWD/bin:$PATH
      
  3. 1단계의 출력에서 각 데이터 플레인 팟(Pod)에 대해 pilot versiondata plane version과 비교하십시오.

    • pilot versiondata plane version이 일치하면 추가 업데이트가 필요하지 않습니다.
    • pilot versiondata plane version이(가) 일치하지 않으면 이전 버전을 실행하는 데이터 플레인 팟(Pod)에 대한 배치를 다시 시작하십시오. 팟 이름과 네임스페이스는 각 항목에 data plane version: version.ProxyInfo{ID:"<pod_name>.<namespace>", IstioVersion:"1.8.4"}(으)로 나열됩니다.
    kubectl rollout restart deployment <deployment> -n <namespace>
    

지원되지 않는 버전의 Istio 애드온에서 업데이트하기

Istio 구성 요소를 IBM Cloud Kubernetes Service 에서 지원하는 최신 패치 버전으로 업데이트하세요.

Istio 애드온에서 커뮤니티 Istio로 마이그레이션하기

관리형 Istio 애드온을 사용하는 대신 커뮤니티 Istio로 마이그레이션할 수 있습니다.

시작하기 전에

1단계: 콘솔에서 Istio 애드온 비활성화하기

콘솔 또는 CLI에서 애드온을 비활성화합니다.

  1. 클러스터 대시보드에서 Istio 애드온을 제거하려는 클러스터의 이름을 클릭합니다.

  2. 추가 기능 섹션으로 이동하십시오.

  3. 관리 Istio 카드에서 조치 메뉴 아이콘을 클릭하십시오.

  4. 설치 제거를 클릭하십시오. 이 클러스터에서는 관리형 Istio 애드온이 비활성화되어 있습니다.

  5. 관리 Istio 카드에서 설치 제거한 추가 기능이 더 이상 나열되지 않는지 확인하십시오.

1단계: CLI에서 Istio 애드온 비활성화하기

애드온을 비활성화하고 추가 Istio 애드온이 남아 있지 않은지 확인합니다.

  1. istio 추가 기능을 사용 안함으로 설정하십시오.
    ibmcloud ks cluster addon disable istio --cluster <cluster_name_or_ID> -f
    
  2. 이 클러스터에서 모든 관리 Istio 추가 기능이 사용 안함으로 설정되어 있는지 확인하십시오. 출력에 Istio 추가 기능이 리턴되지 않습니다.
    ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
    
  3. 다음 단계로 넘어가기 전에 10분 정도 기다립니다. 이렇게 하면 istio 연산자의 관리를 해제할 시간이 생깁니다.

2단계: Istio 연산자 축소하기

Istio 운영자 배포를 축소합니다.

다음 명령을 실행하십시오.

kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0

3단계: 리소스 절약

istio-system 네임스페이스에서 만들거나 수정한 모든 리소스와 사용자 정의 리소스 정의(CRD)에 의해 자동으로 생성된 모든 Kubernetes 리소스를 저장합니다.

  1. managed-istio-custom ConfigMap 을 저장하여 문제를 해결하거나 나중에 애드온을 다시 설치하세요.

    kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
    
  2. 모든 IstioOperator CR(IOP)을 저장합니다.

    • IOP 리소스를 나열합니다:
      kubectl get iop -A
      
    • 나열된 각 IOP 리소스에 대해 파이널라이저를 제거합니다. managed-istio IOP 사용 예시:
      kubectl patch -n ibm-operators istiooperator/managed-istio --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'
      
    • 나열된 각 IOP 리소스에 대해 각각 파일에 저장합니다:
      kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
      
  3. 다음 단계로 넘어가기 전에 10분 정도 기다립니다.

4단계: IOP 설치 관리자 변경하기

사용자 지정 인그레스 게이트웨이와 같은 모든 Istio 운영자(IOP) 리소스를 삭제합니다.

  1. istioctl cli 도구가 필요한 패치 버전에 있는지 확인하세요.

    istioctl version
    
  2. 이전 단계에서 저장한 각 IOP 파일에 대해 upgrade 명령을 실행합니다.

    istioctl upgrade -f <filename>.yaml
    

5단계: Istio 연산자 및 IOP 제거하기

Istio 운영자 배포, 서비스 계정, 클러스터 역할 바인딩, 클러스터 역할 및 모든 IOP를 삭제합니다.

  1. 다음 명령을 실행하여 istio 운영자 배포를 삭제합니다:

    kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true
    kubectl delete clusterrole addon-istio-operator --ignore-not-found=true
    
  2. IOP를 삭제합니다.

    • IOP 리소스를 나열합니다:
      kubectl get iop -A
      
    • 나열된 각 IOP 리소스에 대해 삭제합니다:
      kubectl delete IstioOperator <resource_name> -n <namespace>
      

6단계: 제거 ConfigMap

ConfigMap 은 이전에 저장되었으므로 제거할 수 있습니다.

managed-istio-custom ConfigMap 을 제거합니다.

kubectl delete cm -n ibm-operators managed-istio-custom

애드온 제거가 완료되었으며 필요에 따라 커뮤니티 Istio를 계속 사용하고 업그레이드할 수 있습니다.