구성 동기화 중지 및 재개

경우에 따라 저장소의 구성 동기화의 구성이 동기화되는 것을 빠르게 중지해야 할 수 있습니다. 이러한 시나리오 중 하나는 구문은 유효하지만 잘못된 구성이 저장소에 커밋되고, 구성이 삭제되거나 수정되는 동안 실행 중인 클러스터에 미치는 영향을 제한하려는 경우입니다.

기본 요건

이 주제에서 설명한 명령어를 실행하는 사용자는 동기화를 중지하려는 모든 클러스터의 kube-system(1.9.0 이전 버전에만 필요) 및 config-management-system 네임스페이스에 다음 Kubernetes RBAC 권한이 필요합니다.

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

config-management-operator 네임스페이스 변수 구성

config-management-operator는 1.9.0 이전 Anthos Config Management 버전의 경우 kube-system 네임스페이스에 포함되었습니다. Anthos Config Management 1.9.0에서는 config-management-operator가 config-management-system 네임스페이스로 이동되었습니다. 다음 명령어를 실행하려면 먼저 버전별 네임스페이스를 나타내도록 환경 변수를 설정합니다.

Anthos Config Management 버전 1.9.0 이상의 경우:

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

명령어는 다음을 순서대로 수행합니다. 명령어가 실패하면 나머지 명령어는 실행되지 않습니다.

  1. Config Management Operator 배포의 replicas 수를 0으로 줄입니다.
  2. config-management-system 네임스페이스에서 실행 중인 모든 pod의 replicas 수를 0으로 줄입니다. 영향을 받는 정확한 pod 집합은 제품 버전에 따라 다릅니다.

모든 배포는 클러스터에 계속 유지되지만 연산자의 복제본 또는 동기화를 담당하는 프로세스가 없으므로 저장소에서 구성이 동기화되지 않습니다.

여러 클러스터에서 동기화를 중지해야 하는 경우 각 클러스터에 대해 이전 명령어를 실행합니다.

동기화 재개

단일 클러스터에 대해 동기화를 재개하려면 다음 명령어를 실행합니다.

kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=1

이 명령어는 Operator 배포를 복제본 1개로 확장합니다. 그러면 연산자는 config-management-system 네임스페이스 배포의 Pod가 잘못 확장되었음을 인식하고 적절한 복제본 수로 확장됩니다.

여러 클러스터에서 동기화를 재개해야 하면 각 클러스터에 대해 이전 명령어를 실행합니다.

여러 저장소에서 동기화 중지 및 재개

이 섹션은 여러 저장소용이며 여러 저장소에서 동기화를 일시적으로 중지하고 재개하는 방법을 보여줍니다. 단일 저장소의 동기화를 중지하는 방법은 단일 저장소에서 동기화 중지 및 재개를 참조하세요.

중앙 관리자만 루트 저장소에서 동기화를 중지할 수 있습니다.

네임스페이스 저장소에서 동기화를 중지하는 권한은 네임스페이스 저장소에 사용된 구성 방법에 따라 다릅니다.

  • 루트 저장소의 네임스페이스 제어 방식이 사용된 경우 중앙 관리자만 동기화를 중지하고 재개할 수 있습니다.

  • Kubernetes API를 사용한 네임스페이스 저장소 제어 방식이 사용된 경우 애플리케이션 연산자는 작업 중인 네임스페이스 저장소에서 동기화를 중지하고 재개할 수 있습니다.

동기화 중지

다음 섹션에서는 루트 저장소 및 네임스페이스 저장소의 동기화를 중지하는 방법을 보여줍니다. 조정 관리자가 변경사항을 되돌리지 않도록 하려면 먼저 다음 명령어를 실행하여 조정 관리자를 중지해야 합니다.

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

명령어는 다음을 순서대로 수행합니다. 명령어가 실패하면 나머지 명령어는 실행되지 않습니다.

  1. Config Management Operator 배포의 replicas 수를 0으로 줄입니다.
  2. 조정 관리자 배포의 replicas 수를 0으로 줄입니다.

루트 저장소에서 동기화 중지

중앙 관리자는 다음 명령어를 실행하여 루트 저장소에서 클러스터 동기화를 중지할 수 있습니다.

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

이 명령어는 root-reconciler 배포replicas 수를 0으로 줄입니다.

여러 클러스터에서 동기화를 중지해야 하는 경우 각 클러스터에 대해 이전 명령어를 실행합니다.

네임스페이스 저장소에서 동기화 중지

루트 저장소 방식 또는 Kubernetes API 방식 탭을 선택하여 관련 안내를 확인합니다.

루트 저장소 방식

루트 저장소의 네임스페이스 저장소 제어 방식이 사용된 경우 중앙 관리자는 다음 명령어를 실행하여 네임스페이스 저장소에서 클러스터 동기화를 중지할 수 있습니다.

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

이 명령어는 ns-reconciler-NAMESPACE 배포의 복제본 수를 0으로 줄입니다.

여러 클러스터에서 동기화를 중지해야 하는 경우 각 클러스터에 대해 이전 명령어를 실행합니다.

Kubernetes API 방식

Kubernetes API를 사용한 네임스페이스 저장소 제어 방식이 사용된 경우 애플리케이션 연산자는 다음 명령어를 실행하여 클러스터 동기화를 중지할 수 있습니다.

  1. RepoSync 구성을 검색하고 나중에 동기화를 재개할 때 사용할 수 있도록 저장합니다.

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

    NAMESPACE를 RepoSync 객체의 네임스페이스로 바꿉니다.

  2. RepoSync 구성을 삭제합니다.

    kubectl -n NAMESPACE delete reposyncs repo-sync
    

    이 명령어는 조정 관리자가 NAMESPACE에서 네임스페이스 조정(ns-reconciler-NAMESPACE)을 삭제하고 동기화를 중지하도록 합니다.

    여러 클러스터에서 동기화를 중지해야 하는 경우 각 클러스터에 대해 이전 명령어를 실행합니다.

허용 웹훅에서 드리프트 차단 중지(선택사항)

Anthos Config Management 버전 1.10.0 이전에는 조정자를 중지한 후 구성 동기화에서 드리프트 방지 수행을 중지하려면 다음 명령어를 실행하여 허용 웹훅을 중지하면 됩니다.

kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io

이 단계는 선택사항이며 클러스터의 관리형 리소스에 충돌하는 변경사항을 적용해야 하는 경우에만 필요합니다. 먼저 루트 조정자를 중지해야 합니다. 그렇지 않으면 루트 조정자가 삭제 후 웹훅 구성을 생성하려고 합니다.

모든 저장소에서 동기화 중지

루트 저장소 및 네임스페이스 저장소를 포함한 모든 저장소에서 동기화를 중지하려면 다음 명령어를 실행하세요.

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 네임스페이스에서 실행 중인 모든 조정자 pod의 replicas 수를 0으로 줄이고 모든 조정자 pod가 삭제될 때까지 기다립니다.

모든 조정자 배포는 클러스터에 계속 유지되지만 조정자의 복제본 또는 동기화를 담당하는 프로세스가 없으므로 저장소에서 구성이 동기화되지 않습니다.

동기화 재개

이 섹션에서는 루트 저장소 및 네임스페이스 저장소의 동기화를 재개하는 방법을 보여줍니다.

루트 저장소에서 동기화 재개

루트 관리자가 동기화를 재개하려면 중앙 관리자가 다음 명령어를 실행하면 됩니다.

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

이 명령어는 root-reconciler 배포를 복제본 1개로 확장합니다.

네임스페이스 저장소에서 동기화 재개

루트 저장소 방식 또는 Kubernetes API 방식 탭을 선택하여 관련 안내를 확인합니다.

루트 저장소 방식

루트 저장소의 네임스페이스 제어 방식이 사용된 경우 중앙 관리자는 다음 명령어를 실행할 수 있습니다.

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

이 명령어는 ns-reconciler-NAMESPACE 배포를 복제본 1개로 확장합니다.

Kubernetes API 방식

Kubernetes API를 사용한 네임스페이스 저장소 제어 방식이 사용된 경우 애플리케이션 연산자는 RepoSync 구성이 포함된 repo-sync.yaml를 다시 적용하여 동기화를 다시 시작할 수 있습니다.

kubectl apply -f repo-sync.yaml

이 명령어는 조정 관리자가 네임스페이스 조정 프로세스와 ns-reconciler-NAMESPACE 배포를 만들도록 합니다.

허용 웹훅 재개

Anthos Config Management 버전 1.10.0 이전에는 루트 조정자가 다시 시작되면 웹훅 구성이 자동으로 생성됩니다. 성공적으로 생성되었는지 검증하려면 다음 명령어를 실행합니다.

kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io admission-webhook.configsync.gke.io

모든 저장소에서 동기화 재개

모든 저장소에서 동기화를 재개하려면 다음 명령어를 실행합니다.

kubectl -n $OPERATOR_NAMESPACE scale deployment config-management-operator --replicas=1

이 명령어는 Operator 배포를 복제본 1개로 확장합니다. 그런 다음 Operator는 조정 관리자 배포가 잘못 확장되었음을 인식하고 적절한 복제본 수로 확장합니다. 결국 조정 관리자는 루트 조정자 및 네임스페이스 조정자를 해당 복제본 수로 확장합니다.

  # 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

다음 단계