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

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

このページは、基盤となる技術インフラストラクチャのライフサイクルを管理する IT 管理者と運用担当者を対象としています。Google Cloud のコンテンツで参照する一般的なロールとタスク例の詳細については、一般的な GKE Enterprise ユーザーロールとタスクをご覧ください。

前提条件

このドキュメントのコマンドを使用するには、同期を停止するすべてのクラスタの 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 のレプリカが 0 であることを確認します。

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 で信頼できる情報源を制御する方法を使用した場合は、アプリケーション オペレータは作業対象の Namespace スコープの信頼できる情報源からの同期を停止して再開できます。

同期を停止する

以下の各セクションでは、信頼できる情報源のルートと、Namespace スコープの信頼できる情報源の同期を停止する方法について説明します。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 に減らします。

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

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 リポジトリを管理する方法を使用した場合、クラスタの同期は、アプリケーション オペレータが次のコマンドを実行して停止できます。

  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 で提供されるドリフト防止機能を有効または無効にできます。

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

信頼できる情報源のルートと 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 を有効または無効にする

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 は、ルート調整子と名前空間調整子を対応するレプリカ数にスケールします。

次のステップ