1.2. InPlace ストラテジーについて
InPlace
ストラテジーでは、コントロールプレーンのリビジョンが常に 1 つだけ実行されます。InPlace
更新を実行すると、すべてのワークロードがすぐに新しいバージョンのコントロールプレーンに接続されます。サイドカーとコントロールプレーン間の互換性を確保するために、一度にマイナーバージョンを 2 つ以上超えてアップグレードすることはできません。
1.2.1. InPlace strategy の選択
InPlace
ストラテジーを選択するには、Istio リソースの spec.updateStrategy.type
の値を InPlace
に設定します。
InPlace 更新ストラテジーを選択する仕様例
kind: Istio spec: updateStrategy: type: InPlace
この値は、リソースを最初に作成するときに設定することも、後でリソースを編集することもできます。リソースを作成後に編集する場合は、Istio コントロールプレーンを更新する前に変更を行ってください。
1.2.2. ワークロードのコントロールプレーンへのアタッチ
Istio が InPlace
ストラテジーを使用するように設定されていると、Operator が作成する IstioRevision
リソースは常に Istio リソースと同じ名前になります。InPlace
ストラテジーを使用してデプロイされたコントロールプレーンにワークロードを接続するには、istio.io/rev
namespace ラベルを IstioRevision
の名前に設定します。
メッシュにワークロードをアタッチする istio.io namespace ラベルの例
$ oc label namespace <namespace-name> istio.io/rev=<revision-name>
または、deployment リソース内の Pod テンプレートを変更して、ワークロード Pod にラベルを適用することもできます。
メッシュにワークロードを割り当てる Pod テンプレートの例
apiVersion: apps/v1 kind: Deployment spec: template: metadata: labels: istio.io/rev: <revision-name> spec:
リビジョン名が default
の場合、namespace または Pod に istio-injection: enabled
のラベルを付けることで、ワークロードをリビジョンにアタッチできます。
ワークロードをメッシュにアタッチする istio-injection ラベルの例
oc label namespace <namespace-name> istio-injection=enabled
1.2.3. InPlace 更新の実行
InPlace
ストラテジーを使用して Istio を更新する場合は、一度に 1 つだけ上のマイナーバージョンに更新できます。複数のマイナーバージョンで更新する場合は、各更新後にバージョンを増分し、ワークロードを再起動する必要があります。これにより、サイドカーのバージョンとコントロールプレーンのバージョンとの互換性が確保されます。すべてのワークロードが再起動されると、更新プロセスが完了します。
前提条件
-
Red Hat OpenShift Service Mesh に
cluster-admin
としてログインしている。 - Red Hat OpenShift Service Mesh Operator をインストールし、Istio がデプロイされている。
手順
Istio リソースのバージョンを変更します。
kind: Istio spec: version: 1.20.2 updateStrategy: type: InPlace
Service Mesh Operator は、コントロールプレーンの古いバージョンを置き換える新しいバージョンのコントロールプレーンをデプロイします。サイドカーは新しいコントロールプレーンに自動的に再接続します。
次のコマンドを入力して、コントロールプレーンの新しいバージョンが実行中で、準備ができていることを確認します。
$ oc get istio <control-plane-name>
以下のコマンドを入力して、新しいバージョンのサイドカーが挿入されるように、アプリケーションのワークロードを再起動します。
$ oc rollout restart <deployment-name>