構成ファイルの同期を停止して再開する

状況によっては、Config Sync が信頼できる情報源の構成ファイルの同期を即座に停止することが必要な場合があります。そのような状況の一例として、構文的には有効であるものの間違った構成をソースに commit し、その構成を削除または修正する間、実行中のクラスタへの影響を制限する場合があります。

前提条件

このドキュメントのコマンドを使用するには、同期を停止するすべてのクラスタの config-management-system Namespace で、次の Kubernetes RBAC 権限が必要です。

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

信頼できる情報源からの同期を停止して再開する

このセクションでは、信頼できる唯一の情報源について説明します。また、迅速に同期を停止する方法と、問題が修正されたときに同期を再開する方法について説明します。複数の信頼できる情報源の同期を停止する方法については、複数の信頼できる情報源からの同期の停止と再開をご覧ください。

同期を停止する

単一のクラスタの同期を停止するには、以下のコマンドを実行します。これらのコマンドは、便宜上単一のコマンドとして記載されていますが、個別に実行することもできます。

kubectl scale -n config-management-system deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --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

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

  1. ConfigManagement Operator Deployment の replicas 数を 0 に減らします。
  2. config-management-system Namespace で実行されているすべての Deployment の replicas 数を 0 に減らします。どの Deployment が影響を受けるかは、プロダクトのバージョンによって異なります。

すべての Deployment はクラスタ内にありますが、Operator のレプリカなどの同期を処理するプロセスがないため、構成ファイルは信頼できる情報源から同期されません。

すべてのプロセスが停止したことを確認するには、次のコマンドを使用して、すべての Deployment でレプリカが 1 つもないことを確認します。

kubectl get -n config-management-system deployment

複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。

同期を再開する

単一のクラスタの同期を再開するには、次のコマンドを実行します。

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

このコマンドによって、Operator Deployment が 1 つのレプリカにスケールされます。その後、Operator によって config-management-system Namespace Deployment の Pod が正しくスケールされていないことが認識され、適切なレプリカ数にスケールされます。

複数のクラスタで同期を再開する必要がある場合は、クラスタごとに上記のコマンドを実行します。

複数の信頼できる情報源からの同期を停止して再開する

このセクションでは、複数の信頼できる情報源を対象にしており、複数の信頼できる情報源からの同期を一時的に停止して再開する方法について説明します。信頼できる唯一の情報源の同期を停止する方法については、信頼できる情報源からの同期の停止と再開をご覧ください。

信頼できる情報源のルートでの同期を停止できるのは一元管理者のみです。

複数の信頼できる情報源で同期を停止する機能は、複数の信頼できる情報源からの同期を設定するときに使用された構成方法によって異なります。

  • 信頼できる情報源のルートで信頼できる情報源を管理する方法を使用した場合は、一元管理者のみが同期を停止して再開できます。

  • Kubernetes API で信頼できる情報源を制御する方法を使用した場合は、アプリケーション オペレータは作業対象の名前空間スコープの信頼できる情報源からの同期を停止して再開できます。

同期を停止する

以下の各セクションでは、信頼できる情報源のルートと、名前空間スコープの信頼できる情報源の同期を停止する方法について説明します。Reconciler Manager による変更の取り消しを停止するには、次のコマンドを実行して Reconciler Manager を停止する必要があります。

kubectl -n config-management-system scale deployment config-management-operator --replicas=0 \
&& kubectl wait -n config-management-system --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

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

  1. ConfigManagement Operator Deployment の replicas 数を 0 に減らします。
  2. Reconciler Manager の Deployment の replicas 数を 0 に減らします。

信頼できる情報源からの同期を停止する

信頼できる情報源のルートからクラスタの同期を停止するには、一元管理者が次のコマンドを実行します。

kubectl -n config-management-system scale deployment root-reconciler --replicas=0

このコマンドは、root-reconciler Deploymentreplicas 数を 0 に減らします。

複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。

名前空間スコープの信頼できる情報源からの同期を停止する

[信頼できる情報源のルートメソッド] タブまたは [Kubernetes API メソッド] タブを選択して、関連する手順を表示します。

信頼できる情報源のルートに関するメソッド

信頼できる情報源のルートの名前空間ソースを管理する方法を使用した場合は、一元管理者が次のコマンドを実行して、名前空間の信頼できる情報源からの同期を停止できます。

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=0

このコマンドは、ns-reconciler-NAMESPACE Deployment のレプリカ数を 0 に減らします。

複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。

Kubernetes API 方式

Kubernetes API を使用して名前空間スコープのソースを管理する方式を使用した場合、クラスタの同期は、アプリケーション オペレータが次のコマンドを実行して停止できます。

  1. RepoSync 構成を取得して保存します。これは、同期を再開したときに使用します。

    kubectl -n NAMESPACE get reposyncs repo-sync -oyaml > repo-sync.yaml
    

    NAMESPACE は、RepoSync オブジェクトの Namespace に置き換えます。

  2. RepoSync 構成を削除します。

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    このコマンドは、Reconciler Manager をトリガーして NAMESPACE から Namespace 調整ツール(ns-reconciler-NAMESPACE)を削除し、同期を停止します。

    複数のクラスタで同期を停止する必要がある場合は、クラスタごとに上記のコマンドを実行します。

アドミッション Webhook がドリフトをブロックしないようにする(省略可)

Config Sync アドミッション Webhook はデフォルトで無効になっています。Google Cloud CLI または kubectl を使用して、アドミッション Webhook で提供されるドリフト防止機能を有効または無効にできます。

すべての信頼できる情報源からの同期を停止する

信頼できる情報源のルートと名前空間スコープのソースを含む、すべての信頼できる情報源からの同期を停止するには、次のコマンドを実行します。

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 のレプリカや同期を処理するプロセスがないため、構成ファイルが信頼できる情報源から同期されません。

同期を再開する

このセクションでは、信頼できる情報源のルートと名前空間スコープソースの同期を再開する方法について説明します。

信頼できる情報源からの同期を再開する

信頼できる情報源からの同期を再開するには、一元管理者が次のコマンドを実行します。

kubectl -n config-management-system scale deployment root-reconciler --replicas=1

このコマンドによって、root-reconciler Deployment は、1 つのレプリカにスケールされます。

名前空間スコープの情報源からの同期を再開する

[信頼できる情報源のルートメソッド] タブまたは [Kubernetes API メソッド] タブを選択して、関連する手順を表示します。

信頼できる情報源のルートに関するメソッド

信頼できる情報源のルートで名前空間スコープのソースを管理する方法を使用した場合は、一元管理者が次のコマンドを実行できます。

kubectl -n config-management-system scale deployment ns-reconciler-NAMESPACE --replicas=1

このコマンドによって、ns-reconciler-NAMESPACE Deployment は、1 つのレプリカにスケールされます。

Kubernetes API 方式

Kubernetes API で名前空間スコープのソースを管理する方法を使用した場合は、アプリケーション オペレータが RepoSync 構成を含む repo-sync.yaml を再適用することで同期を再開できます。

kubectl apply -f repo-sync.yaml

このコマンドは、Reconciler Manager をトリガーし、それにより Namespace 調整プロセスが作られ、ns-reconciler-NAMESPACE Deployment が作成されます。

アドミッション Webhook を有効または無効にする

Config Sync アドミッション Webhook はデフォルトで無効になっています。Google Cloud CLI または kubectl を使用して、アドミッション Webhook で提供されるドリフト防止機能を有効または無効にできます。

すべての信頼できる情報源からの同期を再開する

すべての信頼できる情報源からの同期を再開するには、次のコマンドを実行します。

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

このコマンドによって、Operator Deployment が 1 つのレプリカにスケールされます。Operator によって Reconciler Manager Deployment が正しくスケールされていないことが通知され、適切なレプリカ数にスケールされます。最終的に、Reconciler Manager は、ルート調整子と名前空間調整子を対応するレプリカ数にスケールします。

次のステップ