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-systemnamespace を作成します。oc create ns istio-system
$ oc create ns istio-systemCopy 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=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow InPlace更新ストラテジーを使用して、Istio コントロールプレーンをデプロイします。次の設定例では、istio-systemnamespace にdefaultという名前のIstioリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cninamespace にdefaultという名前のIstioCNIリソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfonamespace にinfoアプリケーションをデプロイします。次のコマンドを実行して、
infonamespace を作成します。oc create ns info
$ oc create ns infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
infonamespace にラベルを付け、サイドカーインジェクションを有効にします。oc label namespace info istio-injection=enabled
$ oc label namespace info istio-injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
bookinfonamespace にinfoPod をインストールします。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 bookinfoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して
Istioリソースを確認します。oc get istio -n istio-system
$ oc get istio -n istio-systemCopy 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 115sCopy 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-systemnamespace にデプロイされます。 -
必要なバージョンの Istio CNI プラグインをインストールした。この例では、
defaultという名前のIstioCNIリソースがistio-cninamespace にデプロイされます。 -
サイドカーインジェクションを有効にするために、
infonamespace にラベルを付けた。 -
クラスター内でアプリケーションワークロードが実行されている。この例では、
infoアプリケーションがbookinfonamespace にデプロイされます。
手順
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: InPlacekind: Istio spec: version: v1.24.4 updateStrategy: type: InPlaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Service Mesh Operator は、コントロールプレーンの古いバージョンを置き換える新しいバージョンのコントロールプレーンをデプロイします。サイドカーは新しいコントロールプレーンに自動的に再接続します。
次のコマンドを実行して、コントロールプレーンの新しいバージョンの準備ができていることを確認します。
oc get istio
$ oc get istioCopy 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 4m50sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
oc rollout restart deployment -n info
$ oc rollout restart deployment -n infoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
istioctl proxy-status
$ istioctl proxy-statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VERSION列は、新しいコントロールプレーンのバージョンと一致する必要があります。