구성 동기화 중지 및 재개

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

기본 요건

이 문서의 명령어를 사용하려면 동기화를 중지하려는 모든 클러스터의 config-management-system 네임스페이스에 다음 Kubernetes RBAC 권한이 필요합니다.

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

단일 정보 소스에서 동기화 중지 및 재개

이 섹션은 단일 정보 소스를 기준으로, 신속하게 동기화를 중지하는 방법과 문제가 해결되었을 때 동기화를 재개하는 방법을 보여줍니다. 2개 이상의 정보 소스에 대한 동기화를 중지하는 방법은 2개 이상의 정보 소스에서 동기화 중지 및 재개를 참조하세요.

동기화 중지

단일 클러스터에 대해 동기화를 중지하려면 다음 명령어를 실행합니다. 이 명령어는 사용자 편의를 위해 단일 명령어로 제공되지만, 개별적으로 실행될 수도 있습니다.

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

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

모든 프로세스가 중지되었는지 확인하려면 다음 명령어를 사용하고 모든 배포에 복제본이 없는지 확인합니다.

kubectl get -n config-management-system deployment

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

동기화 재개

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

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

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

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

2개 이상의 정보 소스에서 동기화 중지 및 재개

이 섹션은 2개 이상의 정보 소스를 기준으로, 2개 이상의 정보 소스에서 동기화를 일시적으로 중지하고 재개하는 방법을 보여줍니다. 단일 정보 소스에 대한 동기화를 중지하는 방법은 단일 정보 소스에서 동기화 중지 및 재개를 참조하세요.

중앙 관리자만 신뢰할 수 있는 루트 정보 소스에서 동기화를 중지할 수 있습니다.

2개 이상의 정보 소스에서 동기화를 중지하는 기능은 2개 이상의 정보 소스에서 동기화를 설정할 때 어떤 구성 방법을 사용했는지에 따라 다릅니다.

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

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

동기화 중지

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

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 배포의 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)을 삭제하고 동기화를 중지하도록 합니다.

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

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

구성 동기화 허용 웹훅은 기본적으로 사용 중지되어 있으며 Google Cloud CLI 또는 kubectl을 사용하여 허용 웹훅에서 제공하는 드리프트 방지 기능을 사용 설정하고 사용 중지할 수 있습니다.

모든 정보 소스에서 동기화 중지

루트 정보 소스 및 네임스페이스 범위 소스를 포함한 모든 정보 소스에서 동기화를 중지하려면 다음 명령어를 실행합니다.

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 배포를 만들도록 합니다.

허용 웹훅 사용 설정 및 중지

구성 동기화 허용 웹훅은 기본적으로 사용 중지되어 있으며 Google Cloud CLI 또는 kubectl을 사용하여 허용 웹훅에서 제공하는 드리프트 방지 기능을 사용 설정하고 사용 중지할 수 있습니다.

모든 정보 소스에서 동기화 재개

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

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

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

다음 단계