構成ファイルの同期を停止して再開する
状況によっては、Config Sync がリポジトリから構成ファイルを同期するのを即座に停止する必要がある場合があります。そのような状況の一例として、構文的には有効であるが間違った構成をリポジトリに commit し、その構成を削除または修正する間、実行中のクラスタへの影響を制限する場合があります。
前提条件
このトピックで説明するコマンドを実行するユーザーには、kube-system
Namespace(1.9.0 より前のバージョンにのみ必要)と、同期を停止するすべてのクラスタ上の config-management-system
Namespace で、次の Kubernetes RBAC 権限が必要です。
- apiGroups: ["extensions"]
resources: ["deployments", "deployments/scale"]
verbs: ["get", "update"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["list", "watch"]
config-management-operator Namespace 変数を構成する
config-management-operator は、1.9.0 より前のバージョンの Anthos Config Management では、kube-system
Namespace にありました。Anthos Config Management 1.9.0 では、config-management-operator は config-management-system
名前空間に移動しています。次のいずれかのコマンドを実行する前に、バージョン固有の名前空間を示す環境変数を設定します。
1.9.0 以降のバージョンの Anthos Config Management の場合:
export OPERATOR_NAMESPACE=config-management-system
1.9.0 より前のバージョンの場合:
export OPERATOR_NAMESPACE=kube-system
単一リポジトリからの同期を停止して再開する
このセクションでは、単一のリポジトリに対して直ちに同期を停止する方法と、問題が修正されたときに同期を再開する方法について説明します。複数のリポジトリの同期を停止する方法については、複数のリポジトリからの同期の停止と再開をご覧ください。
同期を停止する
単一のクラスタの同期を停止するには、以下のコマンドを実行します。これらのコマンドは、便宜上単一のコマンドとして記載されていますが、個別に実行することもできます。
kubectl scale -n $OPERATOR_NAMESPACE deployment config-management-operator --replicas=0 \ && kubectl wait -n $OPERATOR_NAMESPACE --for=delete pods -l k8s-app=config-management-operator \ && kubectl scale -n config-management-system deployment --replicas=0 --all \ && kubectl wait -n config-management-system --for=delete pods --all
このコマンドでは次の処理を順番に実行します。コマンドが失敗すると、残りのコマンドは実行されません。
- Config Management Operator Deployment の
replicas
数を 0 に減らします。 config-management-system
Namespace で実行されているすべての Pod のreplicas
数を 0 に減らします。どの Pod が影響を受けるかは、プロダクトのバージョンによって異なります。
すべての Deployment はクラスタ内にありますが、Operator のレプリカなどの同期を処理するプロセスがないため、構成ファイルはリポジトリから同期されません。
複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。
同期を再開する
単一のクラスタの同期を再開するには、次のコマンドを実行します。
kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=1
このコマンドによって、Operator Deployment が 1 つのレプリカにスケールされます。その後、Operator によって config-management-system
Namespace Deployment の Pod が正しくスケールされていないことが認識され、適切なレプリカ数にスケールされます。
複数のクラスタで同期を再開する必要がある場合は、クラスタごとに上記のコマンドを実行します。
複数のリポジトリからの同期を停止して再開する
このセクションの説明は複数のリポジトリを対象にしています。ここでは、複数のリポジトリの同期を一時的に停止して再開する方法について説明します。単一リポジトリの同期を停止する方法については、単一リポジトリからの同期の停止と再開をご覧ください。
ルート リポジトリでの同期は、中央管理者のみが停止できます。
Namespace リポジトリで同期を停止する機能は、Namespace リポジトリに使用された構成方式によって異なります。
ルート リポジトリ内で Namespace リポジトリを管理する方式を使用した場合は、中央管理者のみが同期を停止して再開できます。
Kubernetes API で Namespace リポジトリを管理する方式を使用した場合は、アプリケーション オペレータが対象の Namespace リポジトリからの同期を停止して再開できます。
同期を停止する
このセクションでは、ルート リポジトリと Namespace リポジトリの同期を停止する方法について説明します。Reconciler Manager による変更の取り消しを停止するには、次のコマンドを実行して Reconciler Manager を停止する必要があります。
kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=0 \ && kubectl wait -n $OPERATOR_NAMESPACE --for=delete pods -l k8s-app=config-management-operator --timeout=60s \ && kubectl scale deployment -n config-management-system reconciler-manager --replicas=0 \ && kubectl wait -n config-management-system --for=delete pods -l app=reconciler-manager
このコマンドでは次の処理を順番に実行します。コマンドが失敗すると、残りのコマンドは実行されません。
- Config Management Operator Deployment の
replicas
数を 0 に減らします。 - Reconciler Manager の Deployment の
replicas
数を 0 に減らします。
ルート リポジトリからの同期を停止する
中央管理者は次のコマンドを実行して、ルート リポジトリからクラスタの同期を停止できます。
kubectl -n config-management-system scale deployment root-reconciler --replicas=0
このコマンドは、root-reconciler
Deployment の replicas
数を 0 に減らします。
複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。
Namespace リポジトリからの同期を停止する
[ルート リポジトリ方式] または [Kubernetes API 方式] のタブを選択することで、該当する手順が表示されます。
ルート リポジトリ方式
ルート リポジトリ内の Namespace リポジトリを管理する方式を使用する場合、Namespace リポジトリからのクラスタの同期は、中央管理者が次のコマンドを実行して停止できます。
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0
このコマンドは、ns-reconciler-NAMESPACE
Deployment のレプリカ数を 0 に減らします。
複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。
Kubernetes API 方式
Kubernetes API で Namespace リポジトリを管理する方式を使用する場合、クラスタの同期は、アプリケーション オペレータが次のコマンドを実行して停止できます。
RepoSync
構成を取得して保存します。これは、同期を再開したときに使用します。kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
NAMESPACE
は、RepoSync オブジェクトの Namespace に置き換えます。RepoSync
構成を削除します。kubectl -n NAMESPACE delete reposyncs repo-sync
このコマンドは、Reconciler Manager をトリガーして NAMESPACE から Namespace 調整ツール(
ns-reconciler-NAMESPACE
)を削除し、同期を停止します。複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。
アドミッション Webhook がドリフトをブロックしないようにする(省略可)
Anthos Config Management バージョン 1.10.0 より前のバージョンでは、Config Sync でのドリフト防止の実行を停止するために、Reconciler を停止した後に、次のコマンドを実行してアドミッション Webhook を停止できます。
kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io
このステップは省略可能であり、クラスタ内のマネージド リソースに競合する変更を行う場合にのみ必要です。このステップを実施するには、まずルート調整ツールを停止する必要があります。停止しないと、ルート調整ツールは削除後に Webhook 構成ファイルを生成しようとします。
すべてのリポジトリからの同期を停止する
ルート リポジトリや Namespace リポジトリを含むすべてのリポジトリからの同期を停止するには、次のコマンドを実行します。
kubectl scale deployment -n config-management-system -l app=reconciler --replicas=0 \ && kubectl wait -n config-management-system --for=delete pods -l app=reconciler
このコマンドは、config-management-system
Namespace で実行されているすべての Reconciler Pod の replicas
数を 0 に減らし、すべての Reconciler Pod が削除されるまで待ちます。
すべての Reconciler Deployment はクラスタ内にありますが、Reconciler のレプリカや同期を処理するプロセスがないため、構成ファイルがリポジトリから同期されません。
同期を再開する
このセクションでは、ルート リポジトリと Namespace リポジトリの同期を再開する方法について説明します。
ルート リポジトリからの同期を再開する
ルート リポジトリからの同期を再開するには、中央管理者が次のコマンドを実行します。
kubectl -n config-management-system scale deployment root-reconciler --replicas=1
このコマンドによって、root-reconciler
Deployment は、1 つのレプリカにスケールされます。
Namespace リポジトリからの同期を再開する
[ルート リポジトリ方式] または [Kubernetes API 方式] のタブを選択することで、該当する手順が表示されます。
ルート リポジトリ方式
ルート リポジトリ内で Namespace リポジトリを管理する方式を使用する場合は、中央管理者が次のコマンドを実行します。
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1
このコマンドによって、ns-reconciler-NAMESPACE Deployment は、1 つのレプリカにスケールされます。
Kubernetes API 方式
Kubernetes API で Namespace リポジトリを管理する方式を使用した場合は、アプリケーション オペレータが RepoSync
構成を含む repo-sync.yaml
を再適用することで同期を再開できます。
kubectl apply -f repo-sync.yaml
このコマンドは、Reconciler Manager をトリガーし、それにより Namespace 調整プロセスが作られ、ns-reconciler-NAMESPACE
Deployment が作成されます。
アドミッション Webhook を再開する
バージョン 1.10.0 より前の Anthos Config Management では、ルート Reconciler が再開されると、Webhook 構成が自動的に生成されます。正常に生成されたことを確認するには、次のコマンドを実行します。
kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io
すべてのリポジトリからの同期を再開する
すべてのリポジトリからの同期を再開するには、次のコマンドを実行します。
kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=1
このコマンドによって、Operator Deployment が 1 つのレプリカにスケールされます。Operator によって Reconciler Manager Deployment が正しくスケールされていないことが通知され、適切なレプリカ数にスケールされます。最終的に、Reconciler Manager は、ルート調整子と名前空間調整子を対応するレプリカ数にスケールします。
# scale the root-reconciler Deployment to 1 replica.
kubectl -n config-management-system scale deployment root-reconciler --replicas=1
# scale the ns-reconciler-NAMESPACE Deployment to 1 replica.
kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1