클러스터 생성 및 업그레이드 문제 해결

이 페이지에서는 VMware용 Anthos 클러스터(GKE On-Prem)에서 클러스터 생성, 업그레이드, 크기 조절과 관련된 문제를 조사하는 방법을 설명합니다.

gkectlgkeadm의 기본 로깅 동작

gkectlgkeadm의 경우 기본 로깅 설정만 사용해도 됩니다.

  • gkectl의 경우 기본 로그 파일은 /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log이며 파일은 gkectl을 실행하는 로컬 디렉터리의 logs/gkectl-$(date).log 파일과 심볼릭 링크됩니다.

  • gkeadm의 경우 기본 로그 파일은 gkeadm을 실행하는 로컬 디렉터리의 logs/gkeadm-$(date).log입니다.

  • 기본 -v5 세부정보 수준에는 지원팀에서 필요한 모든 로그 항목이 포함됩니다.

  • 로그 파일에는 실행된 명령어와 실패 메시지가 포함됩니다.

도움이 필요한 경우 로그 파일을 지원팀에 보내는 것이 좋습니다.

로그 파일에 기본 위치가 아닌 위치 지정

gkectl 로그 파일에 기본 위치가 아닌 위치를 지정하려면 --log_file 플래그를 사용합니다. 지정한 로그 파일은 로컬 디렉터리와 심볼릭 링크되지 않습니다.

gkeadm 로그 파일에 기본 위치가 아닌 위치를 지정하려면 --log_file 플래그를 사용합니다.

관리자 클러스터에서 Cluster API 로그 찾기

관리자 제어 영역이 시작된 후 VM이 시작되지 않으면 관리자 클러스터의 Cluster API 컨트롤러 Pod에서 로그를 검사하여 문제를 조사할 수 있습니다.

  1. Cluster API 컨트롤러 Pod 이름을 찾습니다.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system \
        get pods | grep clusterapi-controllers
    
  2. vsphere-controller-manager에서 로그를 봅니다. 먼저 Pod를 지정하되 컨테이너를 지정하지 않습니다.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system \
        logs POD_NAME
    

    출력에는 컨테이너를 지정해야 함을 알려주며 Pod에 있는 컨테이너의 이름이 표시됩니다. 예를 들면 다음과 같습니다.

    ... a container name must be specified ...,
    choose one of: [clusterapi-controller-manager vsphere-controller-manager rbac-proxy]
    

    컨테이너를 선택하고 로그를 봅니다.

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system \
        logs POD_NAME --container CONTAINER_NAME
    

govc를 사용하여 vSphere 문제 해결

govc를 사용하여 vSphere 문제를 조사할 수 있습니다. 예를 들어 vCenter 사용자 계정에 대한 권한과 액세스 권한을 확인하고 vSphere 로그를 수집할 수 있습니다.

부트스트랩 클러스터 로그를 사용하여 디버깅

설치 중에 VMware용 Anthos 클러스터에서 임시 부트스트랩 클러스터를 만듭니다. 설치가 성공하면 VMware용 Anthos 클러스터에서 부트스트랩 클러스터를 삭제하고 관리자 클러스터와 사용자 클러스터를 남겨둡니다. 일반적으로 부트스트랩 클러스터와 상호작용할 이유가 없습니다.

--cleanup-external-cliuster=falsegkectl create cluster에 전달하면 부트스트랩 클러스터는 삭제되지 않으며 부트스트랩 클러스터의 로그를 사용하여 설치 문제를 디버깅할 수 있습니다.

  1. kube-system 네임스페이스에서 실행 중인 Pod의 이름을 찾습니다.

    kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl get pods -n kube-system
    
  2. Pod의 로그를 봅니다.

    kubectl --kubeconfig /home/ubuntu/.kube/kind-config-gkectl -n kube-system get logs POD_NAME
    

내부 kubeconfig 파일을 사용하여 F5 BIG-IP 문제 디버깅

설치 후 VMware용 Anthos 클러스터는 관리자 워크스테이션의 홈 디렉터리에 internal-cluster-kubeconfig-debug라는 kubeconfig 파일을 생성합니다. 이 kubeconfig 파일은 관리자 클러스터의 kubeconfig 파일과 동일히자만Kubernetes API 서버가 실행되는 관리자 클러스터의 제어 영역 노드를 직접 가리킨다는 점이 다릅니다. internal-cluster-kubeconfig-debug 파일을 사용하여 F5 BIG-IP 문제를 디버깅할 수 있습니다.

사용자 클러스터 크기 조절 실패

사용자 클러스터 크기 조절을 실패한 경우:

  1. MachineDeployment 및 머신의 이름을 찾습니다.

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get machinedeployments --all-namespaces
    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get machines --all-namespaces
    
  2. MachineDeployment를 설명하여 로그를 봅니다.

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe machinedeployment MACHINE_DEPLOYMENT_NAME
    
  3. 새로 만든 머신에서 오류를 확인합니다.

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe machine MACHINE_NAME
    

클러스터 크기 조절에 주소 할당 불가

이 문제는 사용자 클러스터 크기를 조절할 수 있는 IP 주소가 부족하면 발생합니다.

kubectl describe machine에 다음 오류가 표시됩니다.

Events:
Type     Reason  Age                From                    Message
----     ------  ----               ----                    -------
Warning  Failed  9s (x13 over 56s)  machineipam-controller  ipam: no addresses can be allocated

이 문제를 해결하려면 클러스터에 IP 주소를 더 할당합니다. 그런 다음 영향을 받은 머신을 삭제합니다.

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete machine MACHINE_NAME

VMware용 Anthos 클러스터는 새 머신을 만들고 새롭게 사용할 수 있는 IP 주소 중 하나를 할당합니다.

할당된 IP 주소의 수가 충분하지만 클러스터에 머신이 등록되지 않음

IP 주소가 충돌하면 이 문제가 발생할 수 있습니다. 예를 들어 머신에 지정한 IP 주소가 부하 분산기에서 사용되고 있습니다.

이 문제를 해결하려면 머신 주소가 클러스터 구성 파일이나 Seesaw IP 차단 파일에 지정한 주소와 충돌하지 않도록 클러스터 IP 차단 파일을 업데이트합니다.

관리자 클러스터 생성 또는 업그레이드가 실패하면 스냅샷이 자동으로 생성됨

관리자 클러스터 만들기 또는 업그레이드를 시도할 때 작업이 실패하면 VMware용 Anthos 클러스터가 관리자 클러스터를 만들거나 업그레이드하는 데 사용되는 임시 클러스터인 부트스트랩 클러스터의 외부 스냅샷을 만듭니다. 이러한 부트스트랩 클러스터의 스냅샷은 관리자 클러스터에서 gkectl diagnose snapshot 명령어를 실행하여 작성된 스냅샷과 비슷하지만, 자동으로 트리거됩니다. 이러한 부트스트랩 클러스터의 스냅샷에는 관리자 클러스터 만들기 및 업그레이드 프로세스에 관한 중요한 디버깅 정보가 포함되어 있습니다. 필요한 경우 Google Cloud 지원팀에 이 스냅샷을 제공할 수 있습니다.

클러스터 업그레이드가 실패하면 상태 점검이 자동으로 실행됩니다.

관리자 또는 사용자 클러스터를 업그레이드하려고 할 때 이 작업이 실패하면 VMware용 Anthos 클러스터가 자동으로 클러스터에서 gkectl diagnose cluster 명령어를 실행합니다.

자동 진단을 건너뛰려면 --skip-diagnose-cluster 플래그를 gkectl upgrade에 전달합니다.

업그레이드 프로세스 중단

VMware용 Anthos 클러스터는 업그레이드 중 백그라운드에서 Kubernetes drain 명령어를 사용합니다. 이 drain 절차는 minAvailable: 1을 사용해서 PodDisruptionBudget(PDB)가 생성된 복제본이 한 개만 있는 배포에 의해 차단될 수 있습니다.

이 경우에는 업그레이드를 시도하기 전 PDB를 저장하고 클러스터에서 삭제합니다. 그런 후 업그레이드가 완료된 다음 PDB를 다시 추가하면 됩니다.

가상 머신 상태 진단

가상 머신을 만드는 중에 문제가 발생하면 gkectl diagnose cluster를 실행하여 가상 머신 상태를 진단합니다.

출력 예시는 다음과 같습니다.


- Validation Category: Cluster Healthiness
Checking cluster object...SUCCESS
Checking machine deployment...SUCCESS
Checking machineset...SUCCESS
Checking machine objects...SUCCESS
Checking machine VMs...FAILURE
    Reason: 1 machine VMs error(s).
    Unhealthy Resources:
    Machine [NODE_NAME]: The VM's UUID "420fbe5c-4c8b-705a-8a05-ec636406f60" does not match the machine object's providerID "420fbe5c-4c8b-705a-8a05-ec636406f60e".
    Debug Information:
    null
...
Exit with error:
Cluster is unhealthy!
Run gkectl diagnose cluster automatically in gkectl diagnose snapshot
Public page https://cloud.google.com/anthos/clusters/docs/on-prem/1.12/diagnose#overview_diagnose_snapshot

자세한 내용은 진단을 참조하세요.

누락된 사용자 클러스터 kubeconfig 파일 다시 만들기

다음 몇 가지 상황에서 사용자 클러스터 kubeconfig 파일을 다시 만들 수 있습니다.

  • 사용자 클러스터를 만들려고 하고 만들기 작업이 실패하고 사용자 클러스터 kubeconfig 파일을 보유하려는 경우
  • 사용자 클러스터 kubeconfig 파일이 누락된 경우(예: 삭제 후)

다음 명령어를 실행하여 사용자 클러스터 kubeconfig 파일을 다시 만듭니다.

KUBECONFIG_SECRET_NAME=$(kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n USER_CLUSTER_NAME | grep admin-kubeconfig | cut -d' ' -f1)

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n USER_CLUSTER_NAME $KUBECONFIG_SECRET_NAME \
  -o jsonpath='{.data.kubeconfig\.conf}' | base64 -d | sed -r "s/kube-apiserver.*local\./USER_CLUSTER_VIP/" > new_user_kubeconfig

다음을 바꿉니다.

  • USER_CLUSTER_VIP: 사용자 마스터 VIP 값입니다.
  • USER_CLUSTER_NAME: 사용자 클러스터 이름입니다.
  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터의 kubeconfig 파일 경로입니다.