Istio on GKE のアップグレード

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このガイドには、特定のアップグレード手順を含むリリースのアップグレードに関する注意が掲載されています。このガイドに記載されていないアップグレードの場合は、何もする必要はありません。

Operator ベースの 1.6 Istio を最新のパッチリリースにアップグレードする

以下を実行する GKE クラスタを使用していることを確認してください。

  • 1.17.17-gke.3100 以降。
  • 1.18.16-gke.1600 以降。
  • 1.19.8-gke.1600 以降。

そうでない場合は、アップグレードの手順に従ってクラスタをアップグレードしてください。

istio-operator 1.6 デプロイ イメージにパッチを適用するには、Istio on GKE クラスタに接続するように構成されているワークステーションで次のコマンドを実行します。

  1. 現在のオペレータ イメージのバージョンをバックアップします。

    kubectl -n istio-operator get deployment/istio-operator -o \
    jsonpath={.spec.template.spec.containers..image} > operator-image-backup
    
    more operator-image-backup
    
  2. 更新先のバージョンを特定します。たとえば、Istio on GKE を 1.6.14-gke.5 にアップグレードするには、次のコマンドを実行します。

    kubectl -n istio-operator set image deployment/istio-operator \
    istio-operator=gcr.io/gke-release/istio/operator:1.6.14-gke.5
    

    コントロール プレーンと istio-ingressgateway は自動的にアップグレードされます。

  3. ワークロードを再起動して新しい Envoy プロキシを再度挿入します。

問題が発生してロールバックする必要がある場合は、次のコマンドを実行します。

kubectl -n istio-operator set image deployment/istio-operator \
istio-operator=$(cat operator-image-backup)

1.4 Istio を最新のパッチリリースにアップグレードする

Istio 1.4 をアップグレードするには、GKE on Istio クラスタに接続するように構成されたワークステーションで次のコマンドを実行します。

  1. 現在のデプロイ イメージをバックアップします。

    export ORIGINAL_ISTIO_VERSION=$(kubectl -n  istio-system get deployment/istio-pilot -o \
    jsonpath={.spec.template.spec.containers[0].image} | sed 's/.*://')
    
    echo $ORIGINAL_ISTIO_VERSION
    
  2. アップグレードする Istio バージョンに環境変数を設定します。たとえば、次のコマンドを実行して 1.4.10-gke.17 に設定します。

    export ISTIO_VERSION=1.4.10-gke.17
    
  3. Istio アドオン デプロイ イメージのバージョンを更新します。

    kubectl set image -n istio-system deployment/istio-ingressgateway istio-proxy=gke.gcr.io/istio/proxyv2:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-citadel citadel=gke.gcr.io/istio/citadel:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-galley galley=gke.gcr.io/istio/galley:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-sidecar-injector sidecar-injector-webhook=gke.gcr.io/istio/sidecar_injector:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-pilot discovery=gke.gcr.io/istio/pilot:${ISTIO_VERSION} istio-proxy=gke.gcr.io/istio/proxyv2:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-policy mixer=gke.gcr.io/istio/mixer:${ISTIO_VERSION} istio-proxy=gke.gcr.io/istio/proxyv2:${ISTIO_VERSION}
    
    kubectl set image -n istio-system deployment/istio-telemetry mixer=gke.gcr.io/istio/mixer:${ISTIO_VERSION} istio-proxy=gke.gcr.io/istio/proxyv2:${ISTIO_VERSION}
    
  4. サイドカー インジェクタの構成マップを取得します。

    kubectl get configmap -n istio-system istio-sidecar-injector -oyaml > sidecar-injector.yaml
    
  5. 元のイメージ バージョンのすべてのプレゼンスをターゲットの istio バージョンに置き換えます。

    sed -i -- "s/${ORIGINAL_ISTIO_VERSION}/${ISTIO_VERSION}/g" sidecar-injector.yaml
    
  6. 更新された configmap を適用します。

    kubectl apply -f sidecar-injector.yaml
    
  7. ワークロードを再起動して新しい Envoy プロキシを再度挿入します。

問題が発生してロールバックする必要がある場合は、ISTIO_VERSION を以前のバージョンに設定して同じ手順を実行できます。

Istio 1.1.3 からのアップグレード

Istio on GKE アドオン バージョン 1.1.3-gke.0 には、最小数である PodDisruptionBudget(PDB)の定義が構成されています。使用可能なレプリカが 1 以上になるようにしてください。バージョン 1.1.7-gke.0 以降、この要件はなくなりました。ただし、この PDB をインストールすると、PDB に違反する場合は他のバージョンにアップグレードできなくなります。つまり、1.1.3-gke.0 からバージョン 1.1.x(1.1.7-gke.0 など)のバージョンにアップグレードするには、まずすべての Istio HorizontalPodAutoscaler リソースの minReplicas 値を 2 以上に増やす必要があります。そうしない場合、PodDisruptionBudget に違反するためアップグレードは失敗します。

Istio 1.1 へのアップグレード

GKE クラスタを 1.0.x から 1.1.x にアップグレードする前に、構成が 1.1 と互換性があることを確認してください。Istio 1.1 で次の変更を行う場合、下位非互換性生じる可能性があり、動作不良や予期しない動作を避けるため、構成の更新が必要になる場合があります。構成を確認するには、アップグレード スクリプトを実行することをおすすめします。

アノテーションを介した TLS 動作のオーバーライド

1.0 では、アノテーションによって TLS ポリシーを変更します。1.1 では、これらのアノテーションは機能しないため、代わりに Policy と DestinationRule を構成する必要があります。詳しくは、Istio のドキュメントをご覧ください。

アップグレード プロセス

Istio ドキュメントの説明に従って、アノテーションを Policy と DestinationRule に置き換えます。この変更は、1.0 の構成には影響しません。1.1 にアップグレードしても以前のアノテーションはには影響がないため、古いアノテーションを削除することも、そのまま残すことも可能です。

RbacConfig から ClusterRbacConfig への名称変更

RbacConfig CRD の名前が ClusterRbacConfig に変更されました。スキーマは変更されません。

アップグレード プロセス

すべての RbacConfig CR に同一の ClusterRbacConfig CR を作成します。

宛先ルールの優先度

サービスに対するサイドカー ルーティング中に、サイドカーと同じ名前空間にあるターゲット サービスの宛先ルールが優先されます。次に、サービスの名前空間内の宛先ルール、最後に、他の名前空間の宛先ルールが続きます(該当する場合)。

アップグレード プロセス

DestinationRules を確認して、同じターゲット サービス用の複数の名前空間にルールがあるかどうかを確認します。そうなっていた場合、ルールを詳細に調べてルールの動作を確認し、望ましい動作に対して適切な優先順位が適用されるようにします。