構成の同期の停止と再開

状況によっては、Anthos Config Management がリポジトリからコンフィグの同期をすばやく停止する必要がある場合があります。そのような状況の一例として、構文的には有効であるが間違ったコンフィグをリポジトリに commit し、そのコンフィグを削除または修正する間、実行中のクラスタへの影響を制限する場合があります。

このトピックでは、すばやく同期を停止する方法と、問題が修正されたときに同期を再開する方法について説明します。

要件

このトピックで説明するコマンドを実行するユーザーは、同期を停止するすべてのクラスタの kube-system 名前空間と config-management-system 名前空間で、以下の Kubernetes RBAC アクセス許可が必要となります。

- apiGroups: ["extensions"]
  resources: ["deployments", "deployments/scale"]
  verbs: ["get", "update"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list", "watch"]

同期を停止する

同期を停止する場合は、以下のコマンドを実行します。コマンドは、便宜上 1 つのコマンドとして記載されていますが、個別に実行することもできます。

kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
&& kubectl -n config-management-system scale deployment syncer --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=syncer \
&& kubectl -n config-management-system scale deployment git-importer --replicas=0 \
&& kubectl wait -n config-management-system --for=delete pods -l app=git-importer

このコマンドでは次の処理を順番に実行します。コマンドが失敗すると、残りのコマンドは実行されません。

  1. Config Management Operator Deployment の replicas 数を 0 に減らします。
  2. syncer Deployment の replicas 数を 0 に減らします。
  3. git-importer Deployment の replicas 数を 0 に減らします。

すべての Deployment はクラスタ内にありますが、Operator、git-importer、syncer のレプリカが使用できないため、コンフィグはリポジトリから同期されません。

登録されているすべてのクラスタで同期を停止する

一度に 1 つのクラスタではなく、1 つの Google Cloud プロジェクト内に登録されているすべてのクラスタで同期を停止する必要がある場合は、nomos status コマンドを使用するスクリプトを作成して、登録されているすべてのクラスタのリストを取得できます。スクリプトは、gcloud container clusters get-credentials コマンドを使用して各クラスタの kubectl コンテキストを作成し、上記のコマンドを各クラスタで実行します。このようなスクリプトの簡単な例を次に示します。

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=0 \
  && kubectl wait -n kube-system --for=delete pods -l k8s-app=config-management-operator \
  && kubectl -n config-management-system scale deployment syncer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=syncer \
  && kubectl -n config-management-system scale deployment git-importer --replicas=0 \
  && kubectl wait -n config-management-system --for=delete pods -l app=git-importer
done

同期を再開する

同期を再開するには、以下のコマンドを実行します。

kubectl -n kube-system scale deployment config-management-operator --replicas=1

このコマンドによって、Operator Deployment が 1 つのレプリカにスケーリングされます。Operator によって syncer Deployment と git-importer Deployment が正しくスケーリングされていないことが通知され、同様に 1 つのレプリカにスケーリングされます。

登録されているすべてのクラスタで同期を再開する

一度に 1 つのクラスタではなく、Google Cloud プロジェクト内に登録されているすべてのクラスタで同期を再開する必要がある場合は、nomos status を使用するスクリプトを作成して、登録されているすべてのクラスタのリストを取得できます。スクリプトは、gcloud container clusters get-credentials コマンドを使用して各クラスタの kubectl コンテキストを作成し、上記のコマンドを各クラスタで実行します。このようなスクリプトの簡単な例を次に示します。

#!/bin/bash

nomos status |grep SYNCED | awk {'print $1'} |while read i; do

  gcloud container clusters get-credentials "$i"

  kubectl -n kube-system scale deployment config-management-operator --replicas=1

done

次のステップ