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
この値は、リソースの作成時に設定することも、後で編集することもできます。作成後にリソースを編集する場合は、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-systemInPlaceストラテジーを使用してデプロイされたコントロールプレーンにワークロードを割り当てます。次のコマンドを入力して namespace にラベルを付けることで、すべてのワークロードを自動的に含めるようにします。
$ oc label namespace <namespace_name> istio.io/rev=<revision_name>Deploymentリソース内の Pod テンプレートを変更して、個々のワークロードにリビジョンラベルを適用します。以下に例を示します。apiVersion: apps/v1 kind: Deployment spec: template: metadata: labels: istio.io/rev: <revision_name>
リビジョン名が
defaultの場合は、次のコマンドを実行して、ワークロードをリビジョンに割り当てます。次の例では、namespace にistio-injection: enabledのラベルを付けます。$ oc label namespace <namespace_name> istio-injection=enabledInPlace更新ストラテジーを使用して、Istio コントロールプレーンをデプロイします。次の設定例では、istio-systemnamespace にdefaultという名前のIstioリソースを作成します。apiVersion: sailoperator.io/v1 kind: Istio metadata: name: default spec: namespace: istio-system version: v1.24.3 updateStrategy: type: InPlace必要なバージョンの Istio CNI プラグインをインストールします。次の設定例では、
istio-cninamespace にdefaultという名前のIstioCNIリソースを作成します。apiVersion: sailoperator.io/v1 kind: IstioCNI metadata: name: default spec: version: v1.24.3 namespace: istio-cniクラスターで実行するアプリケーションワークロードを設定します。次の例では、
bookinfonamespace にinfoアプリケーションをデプロイします。次のコマンドを実行して、
infonamespace を作成します。$ oc create ns info次のコマンドを実行して、
infonamespace にラベルを付け、サイドカーインジェクションを有効にします。$ oc label namespace info istio-injection=enabled次のコマンドを実行して、
bookinfonamespace にinfoPod をインストールします。$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
次のコマンドを実行して
Istioリソースを確認します。$ oc get istio -n istio-system出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.3 115snamespace ラベルと注入されたプロキシーの両方が
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"}}'Istio CR のバージョン更新
kind: Istio spec: version: v1.24.4 updateStrategy: type: InPlaceService Mesh Operator は、コントロールプレーンの古いバージョンを置き換える新しいバージョンのコントロールプレーンをデプロイします。サイドカーは新しいコントロールプレーンに自動的に再接続します。
次のコマンドを実行して、コントロールプレーンの新しいバージョンの準備ができていることを確認します。
$ oc get istio出力例
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE default 1 1 1 default Healthy v1.24.4 4m50s新しいバージョンのサイドカーが注入されるように、次のコマンドを入力してアプリケーションのワークロードを再起動します。
$ oc rollout restart deployment -n info
検証
次のコマンドを入力して、サイドカーの新しいバージョンが実行されていることを確認します。
$ istioctl proxy-status出力例
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION details-v1-7d775cb4f6-5t9zm.info Kubernetes SYNCED (2m25s) SYNCED (2m25s) SYNCED (2m17s) SYNCED (2m25s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4 productpage-v1-7c4b6b857-mxrw6.info Kubernetes SYNCED (2m35s) SYNCED (2m35s) SYNCED (2m17s) SYNCED (2m35s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4 ratings-v1-5b896f8544-r552l.info Kubernetes SYNCED (2m21s) SYNCED (2m21s) SYNCED (2m17s) SYNCED (2m21s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4 reviews-v1-746f96c9d4-9pw8k.info Kubernetes SYNCED (2m17s) SYNCED (2m17s) SYNCED (2m17s) SYNCED (2m17s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4 reviews-v2-97bdf5876-4mzx5.info Kubernetes SYNCED (2m35s) SYNCED (2m35s) SYNCED (2m17s) SYNCED (2m35s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4 reviews-v3-77d9db6844-djgjk.info Kubernetes SYNCED (2m19s) SYNCED (2m19s) SYNCED (2m17s) SYNCED (2m19s) IGNORED istiod-default-v1-24-4-c98fd9675-r7bfw 1.24.4VERSION列は、新しいコントロールプレーンのバージョンと一致する必要があります。