1.5. InPlace ストラテジーについて
InPlace
更新ストラテジーでは、コントロールプレーンのリビジョンが一度に 1 つだけ実行されます。更新中、すべてのワークロードはすぐに新しいコントロールプレーンバージョンに接続されます。サイドカーとコントロールプレーン間の互換性を維持するために、一度にアップグレードできるマイナーバージョンは 1 つだけになっています。
InPlace
ストラテジーは、既存の Istio コントロールプレーンをその場で更新して再起動します。このプロセス中に存在するコントロールプレーンのインスタンスは 1 つだけであるため、ワークロードを新しいコントロールプレーンインスタンスに移動する必要はありません。更新を完了するには、アプリケーションワークロードとゲートウェイを再起動して、Envoy プロキシーを更新します。
InPlace
ストラテジーはシンプルで効率的ですが、コントロールプレーンの再起動中にワークロード Pod が更新、再起動、またはスケーリングされると、アプリケーショントラフィックが中断される可能性がわずかにあります。このリスクは、Istio コントロールプレーン (istiod) のレプリカを複数実行することで軽減できます。
1.5.1. InPlace ストラテジーを選択する リンクのコピーリンクがクリップボードにコピーされました!
InPlace
ストラテジーを選択するには、Istio リソースの spec.updateStrategy.type
の値を InPlace
に設定します。
InPlace 更新ストラテジーを選択する仕様例
kind: Istio spec: updateStrategy: type: InPlace
kind: Istio
spec:
updateStrategy:
type: InPlace
この値は、リソースの作成時に設定することも、後で編集することもできます。作成後にリソースを編集する場合は、Istio コントロールプレーンを更新する前に変更を加えます。
トラフィックの中断を最小限に抑えるために Istio リソースを高可用性モードで実行するには、追加のプロパティー設定が必要です。詳細は、「Istio の高可用性について」を参照してください。
1.5.2. InPlace 更新ストラテジーによるインストール リンクのコピーリンクがクリップボードにコピーされました!
Inplace
更新ストラテジーを使用して、Istio コントロールプレーン、Istio CNI、Bookinfo デモアプリケーションをインストールできます。
クラスターにすでに Istio デプロイメントが含まれている場合は、このインストール手順をスキップできます。
InPlace
ストラテジーを使用する場合、OpenShift Service Mesh Operator によって作成された IstioRevision
リソースは必ず Istio
リソースと同じ名前を使用します。
手順
次のコマンドを実行して、
istio-system
namespace を作成します。oc create ns istio-system
$ oc create ns istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow InPlace
ストラテジーを使用してデプロイされたコントロールプレーンにワークロードを割り当てます。次のコマンドを入力して namespace にラベルを付けることで、すべてのワークロードを自動的に含めるようにします。
oc label namespace <namespace_name> istio.io/rev=<revision_name>
$ oc label namespace <namespace_name> istio.io/rev=<revision_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deployment
リソース内の Pod テンプレートを変更して、個々のワークロードにリビジョンラベルを適用します。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
リビジョン名が
default
の場合は、次のコマンドを実行して、ワークロードをリビジョンに割り当てます。次の例では、namespace にistio-injection: enabled
のラベルを付けます。oc label namespace <namespace_name> istio-injection=enabled
$ oc label namespace <namespace_name> istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow InPlace
更新ストラテジーを使用して、Istio コントロールプレーンをデプロイします。次の設定例では、istio-system
namespace にdefault
という名前のIstio
リソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cni
namespace にdefault
という名前のIstioCNI
リソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfo
namespace にinfo
アプリケーションをデプロイします。次のコマンドを実行して、
info
namespace を作成します。oc create ns info
$ oc create ns info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
info
namespace にラベルを付け、サイドカーインジェクションを有効にします。oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
bookinfo
namespace にinfo
Pod をインストールします。oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して
Istio
リソースを確認します。oc get istio -n istio-system
$ oc get istio -n istio-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.3 115s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.3 115s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow namespace ラベルと注入されたプロキシーの両方が
IstioRevision
リソースを参照するため、IN USE
フィールドには1
が表示されます。
1.5.3. InPlace ストラテジーによる Istio コントロールプレーンの更新 リンクのコピーリンクがクリップボードにコピーされました!
InPlace
ストラテジーを使用して Istio を更新する場合、一度に 1 つだけ上のマイナーリリースにバージョンアップできます。複数上のマイナーバージョンに更新するには、バージョンを上げて、更新ごとにワークロードを再起動する必要があります。ワークロードを再起動すると、サイドカーとコントロールプレーンのバージョン間の互換性が確保されます。すべてのワークロードを再起動すると更新プロセスが完了します。
前提条件
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform にログインしている。 - Red Hat OpenShift Service Mesh Operator をインストールし、Istio がデプロイされている。
-
ローカルマシンに
istioctl
をインストールした。 -
Istio コントロールプレーンを、
InPlace
更新ストラテジーを使用するように設定した。この例では、default
という名前のIstio
リソースがistio-system
namespace にデプロイされます。 -
必要なバージョンの Istio CNI プラグインをインストールした。この例では、
default
という名前のIstioCNI
リソースがistio-cni
namespace にデプロイされます。 -
サイドカーインジェクションを有効にするために、
info
namespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
info
アプリケーションがbookinfo
namespace にデプロイされます。
手順
Istio
リソースのバージョンを変更します。たとえば、Istio1.24.4
に更新するには、次のコマンドを実行してspec.version
フィールドをv1.24.4
に設定します。oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'
$ oc patch istio default --type='merge' -p '{"spec":{"version":"v1.24.4"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Istio CR のバージョン更新
kind: Istio spec: version: v1.24.4 updateStrategy: type: InPlace
kind: Istio spec: version: v1.24.4 updateStrategy: type: InPlace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンを置き換える新しいバージョンのコントロールプレーンをデプロイします。サイドカーは新しいコントロールプレーンに自動的に再接続します。
次のコマンドを実行して、コントロールプレーンの新しいバージョンの準備ができていることを確認します。
oc get istio
$ oc get istio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.4 4m50s
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.4 4m50s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
oc rollout restart deployment -n info
$ oc rollout restart deployment -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION
列は、新しいコントロールプレーンのバージョンと一致する必要があります。