Google Distributed Cloud에서는 주기적인 상태 점검과 자동 노드 복구가 기본적으로 사용 설정되어 있습니다.
노드 자동 복구 기능은 클러스터에서 비정상 노드를 지속적으로 감지하고 복구합니다.
주기적인 상태 점검은 15분마다 실행됩니다. 이는 gkectl diagnose cluster
에서 수행하는 것과 동일합니다. 결과는 관리자 클러스터의 클러스터 객체에 로그 및 이벤트로 표시됩니다.
관리자 클러스터와 사용자 클러스터 각각에 자동 노드 복구에 사용할 수 있는 추가 IP 주소가 있는지 확인합니다.
비정상 노드 조건
다음 조건은 노드가 비정상이라는 것을 나타냅니다.
노드 조건
NotReady
는 약 10분 동안true
입니다.생성 후 머신 상태는 약 10분 동안
Unavailable
입니다.VM 생성 후 머신 상태는 약 30분 동안
Available
이 아닙니다.약 10분 동안
Available
상태의 머신에 해당하는 노드 객체(nodeRef가nil
)가 없습니다.노드 조건
DiskPressure
는 약 30분 동안true
입니다.
노드 복구 전략
노드가 이전 목록의 조건 중 하나 이상을 충족하면 Google Distributed Cloud가 노드에서 복구를 시작합니다.
복구 시 비정상 노드가 드레이닝되고 새 VM이 생성됩니다. 노드 드레이닝이 1시간 동안 실패하면 복구는 강제로 드레이닝하고 연결된 Kubernetes 관리형 디스크를 안전하게 분리합니다.
동일한 MachineDeployment에 여러 비정상 노드가 있으면 한 번에 이러한 노드 중 하나에만 복구가 수행됩니다.
노드 풀의 시간당 복구 수는 다음의 최댓값으로 제한됩니다.
- 3
- 노드 풀에 있는 노드 수의 10%
새 클러스터의 노드 복구 및 상태 점검 사용 설정
관리자 또는 사용자 클러스터 구성 파일에 대해 autoRepair.enabled
를 true
로 설정합니다.
autoRepair: enabled: true
관리자 또는 사용자 클러스터를 만드는 단계를 계속 진행합니다.
기존 사용자 클러스터에 노드 복구 및 상태 점검 사용 설정
사용자 클러스터 구성 파일에서 autoRepair.enabled
를 true
로 설정합니다.
클러스터를 업데이트합니다.
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로
USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로
기존 관리자 클러스터에 노드 복구 및 상태 점검 사용 설정
관리자 클러스터 구성 파일에서 autoRepair.enabled
를 true
로 설정합니다.
클러스터를 업데이트합니다.
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
ADMIN_CLUSTER_CONFIG를 관리자 클러스터 구성 파일의 경로로 바꿉니다.
상태 확인기에서 로그 보기
관리자 클러스터에 모든 상태 점검기 pod를 나열합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods --all-namespaces | grep cluster-health-controller
출력은 다음과 비슷합니다.
kube-system cluster-health-controller-6c7df455cf-zlfh7 2/2 Running my-user-cluster cluster-health-controller-5d5545bb75-rtz7c 2/2 Running
특정 상태 점검기에서 로그를 보려면 pod 중 하나에서 cluster-health-controller
컨테이너 로그를 가져옵니다. 예를 들어 앞의 출력에 표시된 my-user-cluster
로그를 가져오려면 다음 명령어를 실행합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster logs \ cluster-health-controller-5d5545bb75-rtz7c cluster-health-controller
상태 점검기에서 이벤트 보기
관리자 클러스터에 모든 클러스터 객체를 나열합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get clusters --all-namespaces
출력은 다음과 비슷합니다.
default gke-admin-ldxh7 2d15h my-user-cluster my-user-cluster 2d12h
특정 클러스터의 이벤트를 보려면 --show-events
플래그를 사용하여 kubectl describe cluster
를 실행합니다. 예를 들어 앞의 출력에 표시된 my-user-cluster
이벤트를 보려면 다음 명령어를 실행합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster \ describe --show-events cluster my-user-cluster
출력 예시:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ValidationFailure 17s cluster-health-periodics-controller validator for Pod returned with status: FAILURE, reason: 1 pod error(s).
사용자 클러스터의 노드 복구 및 상태 점검 사용 중지
사용자 클러스터 구성 파일에서 autoRepair.enabled
를 false
로 설정합니다.
클러스터를 업데이트합니다.
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
관리자 클러스터의 노드 복구 및 상태 점검 사용 중지
관리자 클러스터 구성 파일에서 autoRepair.enabled
를 false
로 설정합니다.
클러스터를 업데이트합니다.
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
노드 자동 복구 디버깅
관리자 클러스터에서 머신 및 노드 객체를 설명하여 노드 자동 복구 문제를 조사할 수 있습니다. 예를 들면 다음과 같습니다.
머신 객체를 나열합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get machines
출력 예시:
default gke-admin-master-wcbrj default gke-admin-node-7458969ff8-5cg8d default gke-admin-node-7458969ff8-svqj7 default xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt
머신 객체 중 하나를 설명합니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine gke-admin-master-wcbrj
출력에서 cluster-health-controller
의 이벤트를 확인합니다.
마찬가지로, 노드 객체를 나열하고 설명할 수 있습니다. 예를 들면 다음과 같습니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes ... kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe node gke-admin-master-wcbrj
수동 노드 복구
관리 제어 영역 노드
관리자 제어 영역 노드에는 일반적인 수동 복구가 작동하지 않으므로 전용 복구 명령어가 있습니다.
gkectl repair admin-master
를 사용하여 관리자 제어 영역 노드를 복구합니다.
Controlplane V2 사용자 클러스터 제어 영역 노드
Controlplane V2 사용자 클러스터 제어 영역 노드는 다른 노드와 별도로 관리됩니다.
kubeception 사용자 클러스터와 유사하게 Controlplane V2 사용자 클러스터의 제어 영역 머신 객체는 관리자 클러스터에 있습니다. 노드 자동 복구에 관리자 클러스터 노드 자동 복구가 적용됩니다.
관리자 클러스터 노드 자동 복구 로직이 적용되지 않는 노드 문제가 있거나 관리자 클러스터 노드 자동 복구를 사용 설정하지 않은 경우 수동 복구를 수행할 수 있습니다. 그러면 노드가 삭제되고 다시 생성됩니다.
노드에 해당하는 머신 객체의 이름을 가져옵니다.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get machines
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG
: 관리자 kubeconfig 파일의 경로USER_CLUSTER_NAME
: 대상 사용자 클러스터 이름
머신 객체에
repair
주석을 추가합니다.kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true
MACHINE_NAME
을 머신 객체의 이름으로 바꿉니다.머신 객체를 삭제합니다.
kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
HA 제어 영역에 대해 노드를 하나씩 다시 만듭니다. 그렇지 않으면 제어 영역이 예기치 않게 중단될 수 있습니다.
기타 노드
자동 복구 로직이 적용되지 않는 노드 문제가 있거나 노드 자동 복구를 사용 설정하지 않은 경우 수동 복구를 수행할 수 있습니다. 그러면 노드가 삭제되고 다시 생성됩니다.
노드에 해당하는 머신 객체의 이름을 가져옵니다.
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
CLUSTER_KUBECONFIG를 관리자 또는 사용자 클러스터 kubeconfig 파일의 경로로 바꿉니다.
머신 객체에 repair
주석을 추가합니다.
kubectl annotate --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true
MACHINE_NAME을 머신 객체의 이름으로 바꿉니다.
머신 객체를 삭제합니다.
kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME