이 페이지에서는 gkectl
명령줄 인터페이스(CLI) 도구를 사용하여 GKE On-Prem 클러스터의 문제를 진단하는 방법을 설명합니다.
개요
gkectl
도구에는 gkectl diagnose cluster
및 gkectl diagnose snapshot
등 문제를 해결하는 데 사용할 수 있는 두 가지 명령어가 있습니다. 명령어는 관리자 클러스터와 사용자 클러스터 모두에서 작동합니다.
gkectl diagnose cluster
GKE On-Prem 클러스터에서 상태 확인을 수행하고 오류를 보고합니다. 다음 구성요소에서 상태 확인을 실행합니다.
- 클러스터 객체
- 머신 객체 및 해당 클러스터 노드
- kube-system 및 gke-system 네임스페이스의 pod
- 대상 클러스터가 사용자 클러스터인 경우 사용자 제어 영역
- 클러스터의 vSphere 영구 볼륨
gkectl diagnose snapshot
클러스터의 상태, 구성, 로그를 tarball 파일로 압축합니다. 특히, 명령어의 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.
- Kubernetes 버전
- kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, pod, 이러한 pod 소유자, 배포, DaemonSet, StatefulSet
- 대상 클러스터가 사용자 클러스터인 경우 사용자 제어 영역 상태(사용자 클러스터 제어 영역은 관리자 클러스터에서 실행)
- IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보
gkectl diagnose snapshot
명령어의 로그- 원하는 경우 클러스터를 설치하고 업그레이드하는 데 사용되는 GKE On-Prem 구성 파일
vSphere 및 F5 사용자 인증 정보를 포함한 사용자 인증 정보는 tarball이 생성되기 전에 삭제됩니다.
클러스터 진단
gke diagnose cluster
를 실행하여 클러스터의 일반적인 문제를 찾아낼 수 있습니다.
관리자 클러스터 진단
관리자 클러스터 이름을 전달하거나 kubeconfig만 전달하여 관리자 클러스터를 진단할 수 있습니다.
관리자 클러스터 kubeconfig 사용
관리자 클러스터의 kubeconfig를 전달하면 gkectl
이 자동으로 관리자 클러스터를 선택합니다.
gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]
관리자 클러스터 이름 사용
관리자 클러스터 이름을 가져오려면 다음 명령어를 실행합니다.
kubectl get cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG]
그런 다음 관리자 클러스터 이름을 gkectl diagnose cluster
에 전달합니다.
gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[ADMIN_CLUSTER_NAME]
관리자 클러스터가 올바르게 작동하면 gkectl diagnose cluster
는 다음 출력을 반환합니다.
Diagnosing admin cluster "[ADMIN_CLUSTER_NAME]"... Checking cluster object...PASS Checking machine objects...PASS Checking kube-system pods...PASS Checking storage...PASS Cluster is healthy.
사용자 클러스터 진단
클러스터를 진단하려면 먼저 사용자 클러스터 이름을 가져옵니다.
kubectl get cluster --kubeconfig=[USER_CLUSTER_KUBECONFIG]
그런 다음 관리자 클러스터의 kubeconfig 및 사용자 클러스터 이름을 전달합니다.
gkectl diagnose cluster --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME]
사용자 클러스터가 올바르게 작동하면 gkectl diagnose cluster
는 다음 출력을 반환합니다.
Diagnosing user cluster "[USER_CLUSTER_NAME]"... Checking cluster object...PASS Checking control plane pods...PASS Checking machine objects...PASS Checking other kube-system pods...PASS Checking storage...PASS Cluster is healthy.
클러스터 상태 캡처
gkectl diagnose cluster
가 오류를 찾으면 클러스터 상태를 캡처하고 정보를 Google에 제공해야 합니다. 이렇게 하려면 gkectl diagnose snapshot
명령어를 사용합니다.
gkectl diagnose snapshot
에는 선택적 플래그인 --seed-config
가 있습니다. 이 플래그는 클러스터에 대한 정보 수집 외에도 클러스터를 만들거나 업그레이드하는 데 사용된 GKE On-Prem 구성 파일을 수집합니다.
관리자 클러스터 상태 캡처
관리자 클러스터 상태를 캡처하려면 다음 명령어를 실행합니다. 여기서 --seed-config
는 선택사항입니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] [--seed-config]
출력에는 파일 목록과 tarball 파일 이름이 포함됩니다.
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"... Using default snapshot configuration... Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE Taking snapshots... commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system ... nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log ... Snapshot succeeded. Output saved in [TARBALL_FILE_NAME].tar.gz.
디렉터리에 tarball 파일을 추출하려면 다음 명령어를 실행합니다.
tar -zxf [TARBALL_FILE_NAME] --directory [EXTRACTION_DIRECTORY_NAME]
스냅샷에서 생성된 파일 목록을 보려면 다음 명령어를 실행합니다.
cd [EXTRACTION_DIRECTORY_NAME]/[EXTRACTED_SNAPSHOT_DIRECTORY] ls kubectlCommands ls nodes/[NODE_NAME]/commands ls nodes/[NODE_NAME]/files
특정 작업의 세부정보를 보려면 파일 중 하나를 엽니다.
관리자 클러스터의 SSH 키 지정
관리자 클러스터 스냅샷을 가져오면 gkectl
이 관리자 클러스터의 비공개 SSH 키를 자동으로 찾습니다. --admin-ssh-key-path
매개변수를 사용하여 키를 명시적으로 지정할 수도 있습니다.
SSH를 사용하여 클러스터 노드에 연결 안내를 따라 SSH 키를 다운로드합니다.
그런 다음 gkectl diagnose snapshot
명령어에서 --admin-ssh-key-path
를 디코딩한 키 파일 경로로 설정합니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --admin-ssh-key-path=[PATH_TO_DECODED_KEY]
사용자 클러스터 상태 캡처
사용자 클러스터 상태를 캡처하려면 다음 명령어를 실행합니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME]
출력에는 파일 목록과 tarball 파일 이름이 포함됩니다.
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"... Using default snapshot configuration... Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user ... commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system ... nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log ... Snapshot succeeded. Output saved in [FILENAME].tar.gz.
스냅샷 시나리오
gkectl diagnose snapshot
명령어는 4가지 시나리오를 지원합니다. 시나리오를 지정하려면 --scenario
플래그를 사용합니다. 다음 목록에는 가능한 값이 나와 있습니다.
system
: (기본값) 시스템 네임스페이스(kube-system
및gke-system
)의 스냅샷을 수집합니다.system-with-logs
: 로그가 있는system
스냅샷을 수집합니다.all
: 모든 네임스페이스의 스냅샷을 수집합니다.all-with-logs
: 로그가 있는all
스냅샷을 수집합니다.
4가지 시나리오 각각을 관리자 클러스터 또는 사용자 클러스터에서 사용할 수 있으므로 가능한 순열은 8개 있습니다. 다음 예시는 몇 가지 가능성을 보여줍니다.
system
시나리오를 사용하여 관리자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --scenario=system
system-with-logs
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --user-cluster=[USER_CLUSTER_NAME] \ --scenario=system-with-logs
all
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME] \ --scenario=all
all-with-logs
시나리오를 사용하여 관리자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --scenario=all-with-logs
스냅샷의 테스트 실행 수행
--dry-run
플래그를 사용하여 수행할 작업과 스냅샷 구성을 표시할 수 있습니다.
관리자 클러스터에서 테스트 실행을 수행하려면 다음 명령어를 입력합니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[ADMIN_CLUSTER_NAME] \ --dry-run
사용자 클러스터에서 테스트 실행을 수행하려면 다음 명령어를 입력합니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME] \ --dry-run
스냅샷 구성 사용
네 가지 시나리오가 니즈를 충족하지 않으면 --snapshot-config
플래그로 스냅샷 구성 파일을 전달하여 맞춤설정된 스냅샷을 만들 수 있습니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME] \ --snapshot-config=[SNAPSHOT_CONFIG_FILE]
스냅샷 구성 생성
--scenario
플래그와 --dry-run
플래그를 전달하여 특정 시나리오의 스냅샷 구성을 생성할 수 있습니다. 예를 들어 사용자 클러스터의 기본 시나리오 스냅샷 구성(system
)을 보려면 다음 명령어를 입력합니다.
gkectl diagnose snapshot \ --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] \ --cluster-name=[USER_CLUSTER_NAME] \ --scenario=system --dry-run
출력은 다음과 비슷합니다.
numOfParallelThreads: 10 excludeWords: - password kubectlCommands: - commands: - kubectl get clusters -o wide - kubectl get machines -o wide - kubectl get clusters -o yaml - kubectl get machines -o yaml - kubectl describe clusters - kubectl describe machines namespaces: - default - commands: - kubectl version - kubectl cluster-info - kubectl get nodes -o wide - kubectl get nodes -o yaml - kubectl describe nodes namespaces: [] - commands: - kubectl get pods -o wide - kubectl get deployments -o wide - kubectl get daemonsets -o wide - kubectl get statefulsets -o wide - kubectl get replicasets -o wide - kubectl get services -o wide - kubectl get jobs -o wide - kubectl get cronjobs -o wide - kubectl get endpoints -o wide - kubectl get configmaps -o wide - kubectl get pods -o yaml - kubectl get deployments -o yaml - kubectl get daemonsets -o yaml - kubectl get statefulsets -o yaml - kubectl get replicasets -o yaml - kubectl get services -o yaml - kubectl get jobs -o yaml - kubectl get cronjobs -o yaml - kubectl get endpoints -o yaml - kubectl get configmaps -o yaml - kubectl describe pods - kubectl describe deployments - kubectl describe daemonsets - kubectl describe statefulsets - kubectl describe replicasets - kubectl describe services - kubectl describe jobs - kubectl describe cronjobs - kubectl describe endpoints - kubectl describe configmaps namespaces: - kube-system - gke-system - gke-connect.* prometheusRequests: [] nodeCommands: - nodes: [] commands: - uptime - df --all --inodes - ip addr - sudo iptables-save --counters - mount - ip route list table all - top -bn1 - sudo docker ps -a - ps -edF - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup - sudo conntrack --count nodeFiles: - nodes: [] files: - /proc/sys/fs/file-nr - /proc/sys/net/nf_conntrack_max
numOfParallelThreads
: 스냅샷을 만드는 데 사용된 동시 스레드 수입니다.excludeWords
: 스냅샷에서 제외할 단어 목록입니다(대소문자를 구분하지 않음). 이러한 단어가 포함된 줄은 스냅샷 결과에서 삭제됩니다. 'password'는 지정 여부와 관계없이 항상 제외됩니다.kubectlCommands
: 실행할 kubectl 명령어의 목록입니다. 결과가 저장됩니다. 명령어는 해당 네임스페이스에서 실행됩니다.kubectl logs
명령어의 경우 해당 네임스페이스의 모든 Pod와 컨테이너가 자동으로 추가됩니다. 네임스페이스 지정에 정규 표현식이 지원됩니다. 네임스페이스를 지정하지 않으면default
네임스페이스가 가정됩니다.nodeCommands
: 해당 노드에서 실행할 명령어 목록입니다. 결과가 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.nodeFiles
: 해당 노드에서 수집할 파일의 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.prometheusRequests
: Prometheus 요청 목록입니다. 결과가 저장됩니다.
알려진 문제
버전 1.1.2-gke.0: 경로가 여러 데이터센터로 확인
GKE On-Prem의 출시 노트를 참조하세요.
버전 1.1.x: 볼륨이 머신에 연결되지 않음
GKE On-Prem의 출시 노트를 참조하세요.