사용자 클러스터 크기 조절

이 페이지에서는 GKE On-Prem 사용자 클러스터의 크기를 조절하는 방법을 설명합니다. 사용자 클러스터 크기 조절은 해당 클러스터에서 노드를 추가하거나 제거하는 것입니다. 클러스터에서 노드를 제거하면 클러스터의 IP 주소가 해제되어 다른 노드에서 사용할 수 있게 됩니다. 노드를 추가하려면 해당 노드에 IP 주소를 사용할 수 있어야 합니다.

사용자 클러스터의 크기를 조절하려면 클러스터의 MachineDeployment 구성에서 replicas 필드를 변경합니다. kubectl patch를 사용하여 명령줄에서 구성을 패치할 수 있습니다.

사용자 클러스터의 최대 및 최소 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.

사용 가능한 IP 주소가 충분한지 확인

클러스터에 노드를 추가하는 경우 클러스터의 IP 주소가 충분한지 확인합니다. IP 주소가 충분한지 확인하는 방법은 클러스터에서 DHCP 서버를 사용하는지 또는 고정 IP를 사용하는지에 따라 다릅니다.

DHCP

클러스터에서 DHCP를 사용하는 경우 노드가 생성된 네트워크의 DHCP 서버에 충분한 IP 주소가 있는지 확인합니다. 사용자 클러스터에서 실행 중인 노드보다 더 많은 IP 주소가 있어야 합니다.

고정 IP

클러스터에서 고정 IP를 사용하는 경우 클러스터에 IP 주소가 충분히 할당되었는지 확인합니다.

kubectl get cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] \
-n [USER_CLUSTER_NAME] [USER_CLUSTER_NAME] -o yaml

각 항목의 의미는 다음과 같습니다.

  • [ADMIN_CLUSTER_KUBECONFIG]는 kubectl에 사용자 클러스터 구성을 보거나 변경하는 데 사용되는 관리자 클러스터의 kubeconfig를 사용하도록 지시합니다.
  • -n [USER_CLUSTER_NAME]는 kubectl에 사용자 클러스터 이름이 지정된 네임스페이스를 살펴보도록 지시합니다.
  • [USER_CLUSTER_NAME] -o yaml은 명령어를 실행 중인 사용자 클러스터를 kubectl에 알려줍니다. -o yaml은 사용자 클러스터의 구성을 표시합니다.

명령어 출력에서 reservedAddresses 필드를 찾습니다. 사용자 클러스터에서 실행 중인 노드보다 필드에 더 많은 IP 주소가 있어야 합니다.

reservedAddresses 필드에 주소를 더 추가해야 하는 경우 다음 단계를 수행하세요.

  1. 수정을 위해 사용자 클러스터의 클러스터 리소스를 엽니다.

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] edit cluster [USER_CLUSTER_NAME] \
    -n [USER_CLUSTER_NAME]
    

    클러스터 구성은 셸의 기본 편집기에서 열립니다.

  2. 고정 IP 블록을 필요한 만큼 추가합니다. IP 블록은 gateway, hostname, ip, netmask 필드로 구성됩니다.

다음은 4개의 고정 IP 블록이 있는 reservedAddresses 필드를 강조표시한 예시입니다.

...
networkSpec:
  dns:
  - 172.x.x.x
  ntp: 129.x.x.x
  reservedAddresses:
  - gateway: 100.x.x.x
    hostname: host-1
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-2
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-3
    ip: 100.x.x.x
    netmask: x
  - gateway: 100.x.x.x
    hostname: host-4
    ip: 100.x.x.x
    netmask: x
...

시작하기 전에

크기를 조절할 사용자 클러스터의 kubeconfig를 가리키는 KUBECONFIG 환경 변수를 내보냅니다.

export KUBECONFIG=[USER_CLUSTER_KUBECONFIG]

사용자 클러스터 크기 조절

사용자 클러스터의 MachineDeployment 리소스를 수정하여 클러스터 크기를 조절합니다. 사용자 클러스터의 MachineDeployment 리소스 이름을 찾으려면 다음 명령어를 실행합니다.

kubectl get machinedeployments

사용자 클러스터의 MachineDeployment에는 사용자 클러스터 이름이 포함됩니다.

사용자 클러스터의 크기를 조절하려면 클러스터의 MachineDeployment 구성을 패치해야 합니다. 클러스터에서 실행하는 노드 수를 나타내는 구성 replicas 필드의 값을 변경합니다.

kubectl patch machinedeployment [MACHINE_DEPLOYMENT_NAME] -p "{\"spec\": {\"replicas\": [INT] }}" --type=merge

여기서 [INT]는 사용자 클러스터에서 실행하려는 노드 수입니다.

크기 조절 확인

성공적으로 크기가 조절되었는지 확인하려면 다음을 실행합니다.

kubectl get nodes
kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME] | grep Replicas

선택한 노드 수는 이러한 명령어 출력에 반영되어야 합니다.

문제해결

자세한 내용은 문제 해결을 참조하세요.

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

증상

사용자 클러스터의 크기 조절 작업이 실패합니다.

가능한 원인

여러 요인으로 인해 크기 조절 작업이 실패할 수 있습니다.

해결 방법

크기 조절에 실패하는 경우 다음 단계를 따르세요.

  1. 클러스터의 MachineDeployment 상태를 살펴보고 이벤트 또는 오류 메시지가 있는지 확인합니다.

    kubectl describe machinedeployments [MACHINE_DEPLOYMENT_NAME]
  2. 새로 생성된 머신에 오류가 있는지 확인합니다.

    kubectl describe machine [MACHINE_NAME]

오류: '할당할 수 있는 주소가 없음'

증상

사용자 클러스터의 크기를 조절하면 kubectl describe machine [MACHINE_NAME]에 다음 오류가 표시됩니다.

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

사용자 클러스터에 사용할 수 있는 IP 주소가 충분하지 않습니다.

해결 방법

클러스터에 더 많은 IP 주소를 할당합니다. 그런 다음 영향을 받은 머신을 삭제합니다.

kubectl delete machine [MACHINE_NAME]

클러스터가 올바르게 구성되면 IP 주소로 대체 머신이 생성됩니다.

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

증상

네트워크에 할당된 주소가 충분하지만 사용자 클러스터에 머신이 등록되지 않습니다.

가능한 원인

IP 충돌이 있을 수 있습니다. 해당 IP를 다른 머신 또는 부하 분산기에서 사용하고 있을 수 있습니다.

해결 방법

영향을 받는 머신의 IP 주소가 사용되지 않았는지 확인합니다. 충돌이 있는 경우 사용자 환경에서 충돌을 해결해야 합니다.

새 노드가 생성되었지만 정상이 아님

증상

수동 부하 분산 모드를 사용하는 경우 새 노드가 사용자 클러스터 제어 영역에 등록되지 않습니다.

가능한 원인

노드의 부팅 프로세스를 차단하는 노드 내 인그레스 검사가 사용 설정되었을 수 있습니다.

해결 방법

검사를 중지하려면 다음을 실행하세요.

kubectl patch machinedeployment [MACHINE_DEPLOYMENT_NAME] -p '{"spec":{"template":{"spec":{"providerSpec":{"value":{"machineVariables":{"net_validation_ports": null}}}}}}}' --type=merge

gkectl을 사용하여 클러스터 문제 진단

gkectl diagnose 명령어를 사용하여 클러스터 문제를 식별하고 클러스터 정보를 Google과 공유하세요. 클러스터 문제 진단을 참조하세요.

기본 로깅 동작

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

  • 기본적으로 로그 항목은 다음과 같이 저장됩니다.

    • gkectl의 기본 로그 파일은 /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log이며 파일은 gkectl을 실행하는 로컬 디렉터리의 logs/gkectl-$(date).log 파일과 심볼릭 링크됩니다.
    • gkeadm의 경우 기본 로그 파일은 gkeadm을 실행하는 로컬 디렉터리의 logs/gkeadm-$(date).log입니다.
  • 모든 로그 항목은 터미널에서 출력되지 않더라도 로그 파일에 저장됩니다(--alsologtostderrfalse인 경우).
  • -v5 세부정보 수준(기본값)에는 지원팀에 필요한 모든 로그 항목이 포함됩니다.
  • 로그 파일에는 실행된 명령어와 실패 메시지도 포함되어 있습니다.

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

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

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

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

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

관리자 제어 영역이 시작된 후에 VM을 시작하지 못하는 경우 다음 안내에 따라 관리자 클러스터에서 Cluster API 컨트롤러의 로그를 검사하여 디버깅할 수 있습니다.

  1. kube-system 네임스페이스에서 Cluster API 컨트롤러 pod의 이름을 찾습니다. 여기서 [ADMIN_CLUSTER_KUBECONFIG]는 관리자 클러스터의 kubeconfig 파일 경로입니다.

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system get pods | grep clusterapi-controllers
  2. pod의 로그를 엽니다. 여기서 [POD_NAME]은 pod 이름입니다. 원하는 경우 grep 또는 유사한 도구를 사용하여 오류를 검색할 수 있습니다.

    kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] -n kube-system logs [POD_NAME] vsphere-controller-manager