이 문서에서는 VMware용 Google Distributed Cloud(소프트웨어만 해당)를 사용하여 만든 클러스터에서 문제를 해결하기 위해 gkectl diagnose
명령어를 사용하여 진단 스냅샷을 만드는 방법을 보여줍니다. gkectl
도구에는 문제를 해결하는 데 사용할 수 있는 두 가지 명령어 gkectl diagnose snapshot
및 gkectl diagnose cluster
가 있습니다. 명령어는 관리자 클러스터와 사용자 클러스터 모두에서 작동합니다.
gkectl diagnose cluster
명령어를 사용하여 클러스터 문제를 진단하는 방법을
자세히 알아보려면
클러스터 문제 진단을 참조하세요.
gkectl diagnose snapshot
이 명령어는 클러스터의 상태, 구성, 로그를 tar 파일 하나로 압축합니다. gkectl diagnose snapshot
을 실행할 경우 이 명령어는 자동으로 gkectl diagnose cluster
를 프로세스의 일부로 실행하고 출력 파일이 /diagnose-report
라는 스냅샷의 새 폴더에 배치됩니다.
기본 스냅샷
gkectl diagnose snapshot
명령어 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.
Kubernetes 버전.
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet.
제어 영역 상태
IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보.
Kubernetes API 서버를 사용할 수 없는 경우 관리자 클러스터의 제어 영역 노드의 컨테이너 로그
리소스 풀 기반의 VM 객체 및 해당 이벤트를 포함한 vSphere 정보. 또한 VM과 연결된 데이터 센터, 클러스터, 네트워크, Datastore 객체에 대한 정보를 수집합니다.
가상 서버, 가상 주소, 풀, 노드, 모니터를 포함한 F5 BIG-IP 부하 분산기 정보
gkectl diagnose snapshot
명령어의 로그프리플라이트 작업 로그
시나리오를 기반으로 한 네임스페이스 내 컨테이너의 로그
스냅샷 파일
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
의 관리자 클러스터 Kubernetes 인증서 만료 정보스냅샷에 있는 모든 파일의 HTML 색인 파일
원하는 경우
--config
플래그를 사용하여 클러스터를 설치하고 업그레이드하는 데 사용되는 관리자 클러스터 구성 파일
vSphere 및 F5를 포함한 사용자 인증 정보는 tar 파일이 만들어지기 전에 삭제됩니다.
경량형 스냅샷
Google Distributed Cloud 버전 1.29 이상에서는 관리자 클러스터와 사용자 클러스터 모두에 gkectl diagnose snapshot
경량형 버전을 사용할 수 있습니다.
이 경량형 스냅샷은 클러스터에 대한 정보를 적게 캡처하므로 스냅샷 프로세스 속도가 빨라집니다. 명령어에 --scenario=lite
를 추가할 때
다음 정보만 스냅샷에 포함됩니다.
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet
gkectl diagnose snapshot
명령어의 로그
클러스터 상태 캡처
gkectl diagnose cluster
명령어가 오류를 찾으면 클러스터 상태를 캡처하고 정보를 Cloud Customer Care에 제공해야 합니다. gkectl diagnose snapshot
명령어를 사용하여
이 정보를 캡처할 수 있습니다.
gkectl diagnose snapshot
에는 --config
에 대한 플래그(선택사항)가 있습니다. 이 플래그는 클러스터에 대한 정보 수집 외에도 클러스터를 만들거나 업그레이드하는 데 사용된 구성 파일을 수집합니다.
관리자 클러스터 상태 캡처
관리자 클러스터 상태를 캡처하려면 다음 명령어를 실행합니다.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config
--config
파라미터는 선택사항입니다.
대상 클러스터의 가상 IP 주소(VIP)에 문제가 있는 경우 --config
플래그를 사용하여 관리자 클러스터 구성 파일을 제공하여 디버깅 정보를 더 제공합니다.
버전 1.29 이상에서는 기본 스냅샷의 모든 정보가 필요하지 않으면 --scenario=lite
를 포함할 수 있습니다.
출력에는 다음 예시 출력에 표시된 것처럼 파일 목록과 tar 파일의 이름이 포함됩니다.
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 [TAR_FILE_NAME].tar.gz.
디렉터리에 tar 파일을 추출하려면 다음 명령어를 실행합니다.
tar -zxf TAR_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
다음을 바꿉니다.
TAR_FILE_NAME
: tar 파일의 이름입니다.EXTRACTION_DIRECTORY_NAME
: tar 파일을 추출해 보관처리하려는 디렉터리입니다.
스냅샷에서 생성된 파일 목록을 보려면 다음 명령어를 실행합니다.
cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY ls kubectlCommands ls nodes/NODE_NAME/commands ls nodes/NODE_NAME/files
NODE_NAME
을 파일을 보려는 노드 이름으로 바꿉니다.
특정 작업의 세부정보를 보려면 파일 중 하나를 엽니다.
관리자 클러스터의 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
다음 출력 예시에는 파일 목록과 tar 파일의 이름이 포함됩니다.
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.
스냅샷 시나리오
스냅샷 시나리오를 사용하면 스냅샷에 포함되는 정보를 제어할 수 있습니다. 시나리오를 지정하려면 --scenario
플래그를 사용합니다. 다음 목록에는 가능한 값이 나와 있습니다.
system
(기본값): 지원되는 시스템 네임스페이스의 로그가 있는 스냅샷을 수집합니다.all
: 사용자 정의 네임스페이스를 포함한 모든 네임스페이스의 로그를 사용하여 스냅샷을 수집합니다.lite
(1.29 이상): Kubernetes 리소스와gkectl
로그만 사용하여 스냅샷을 수집합니다. 컨테이너 로그 및 노드 커널 로그와 같은 다른 모든 로그는 제외됩니다.
사용 가능한 스냅샷 시나리오는 Google Distributed Cloud 버전에 따라 달라집니다.
1.13보다 낮은 버전:
system
,system-with-logs
,all
,all-with-logs
버전 1.13~1.28:
system
및all
.system
시나리오는 이전의system-with-logs
시나리오와 동일합니다.all
시나리오는 이전의all-with-logs
시나리오와 동일합니다.버전 1.29 이상:
system
,all
,lite
.
관리자 클러스터의 스냅샷을 만들기 위해서는 시나리오를 지정할 필요가 없습니다.
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
system
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=system
all
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=all
lite
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
gkectl diagnose snapshot \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME \ --scenario=lite
--log-since
를 사용하여 스냅샷 제한
--log-since
플래그를 사용하여 로그 컬렉션을 최근 기간으로 제한합니다. 예를 들어 최근 2일 또는 최근 3시간의 로그만 수집할 수 있습니다. 기본적으로 diagnose snapshot
은 모든 로그를 수집합니다.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=CLUSTER_NAME \ --scenario=system \ --log-since=DURATION
<var>DURATION</var>
를 120m
또는 48h
과 같은 시간 값으로 바꿉니다.
다음 고려사항이 적용됩니다.
--log-since
플래그는kubectl
및journalctl
로그에서만 지원됩니다.--log-since
과 같은 명령어 플래그는 맞춤설정된 스냅샷 구성에서 허용되지 않습니다.
스냅샷의 테스트 실행 수행
--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
스냅샷 구성 사용
이러한 두 시나리오(--scenario system
또는 all
)가 요구를 충족하지 않으면 --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
seesawCommands: []
seesawFiles: []
nodeCollectors:
- nodes: []
f5:
enabled: true
vCenter:
enabled: true
다음 정보가 출력에 표시됩니다.
numOfParallelThreads
: 스냅샷을 만드는 데 사용된 동시 스레드 수입니다.excludeWords
: 스냅샷에서 제외할 단어 목록입니다(대소문자를 구분하지 않음). 이러한 단어가 포함된 줄은 스냅샷 결과에서 삭제됩니다. 'password'는 지정 여부와 관계없이 항상 제외됩니다.kubectlCommands
: 실행할 kubectl 명령어의 목록입니다. 결과가 저장됩니다. 명령어는 해당 네임스페이스에서 실행됩니다.kubectl logs
명령어의 경우 해당 네임스페이스의 모든 포드와 컨테이너가 자동으로 추가됩니다. 네임스페이스 지정에 정규 표현식이 지원됩니다. 네임스페이스를 지정하지 않으면default
네임스페이스가 사용됩니다.nodeCommands
: 해당 노드에서 실행할 명령어 목록입니다. 결과가 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.nodeFiles
: 해당 노드에서 수집할 파일의 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.seesawCommands
: Seesaw 부하 분산기 정보를 수집하기 위해 실행할 명령어 목록입니다. 클러스터가 Seesaw 부하 분산기를 사용하면 결과가 저장됩니다.seesawFiles
: Seesaw 부하 분산기를 위해 수집할 파일 목록입니다.nodeCollectors
: eBPF 정보를 수집하기 위해 Cilium 노드를 위해 실행하는 수집기입니다.f5
: F5 BIG-IP 부하 분산기와 관련된 정보 수집을 사용 설정하는 플래그입니다.vCenter
: vCenter와 관련된 정보를 수집할 수 있는 플래그입니다.prometheusRequests
: Prometheus 요청 목록입니다. 결과가 저장됩니다.
Cloud Storage 버킷에 스냅샷 업로드
기록 보관, 분석, 스토리지를 간편하게 수행하기 위해 특정 클러스터의 모든 스냅샷을 Cloud Storage 버킷에 업로드할 수 있습니다. Cloud Customer Care의 도움이 필요한 경우에 특히 유용합니다.
Cloud Storage 버킷에 스냅샷을 업로드하기 전에 다음 초기 요구사항을 검토하고 완료합니다.
Fleet 호스트 프로젝트에서
storage.googleapis.com
을 사용 설정합니다. 다른 프로젝트를 사용해도 되지만 Fleet 호스트 프로젝트를 사용하는 것이 좋습니다.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
roles/storage.admin
를 상위 프로젝트의 서비스 계정에 부여하고--service-account-key-file
파라미터를 사용하여 서비스 계정 JSON 키 파일을 전달합니다. 모든 서비스 계정을 사용할 수 있지만 연결 등록 서비스 계정을 사용하는 것이 좋습니다. 자세한 내용은 서비스 계정을 참조하세요.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
CONNECT_REGISTER_SERVICE_ACCOUNT
를 연결 등록 서비스 계정으로 바꿉니다.
이러한 요구사항을 충족하는 경우 이제 스냅샷을 Cloud Storage 버킷에 업로드할 수 있습니다.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
--share-with
플래그는 서비스 계정 이름 목록을 허용할 수 있습니다. GOOGLE_SUPPORT_SERVICE_ACCOUNT
를 Cloud Customer Care에서 제공하는 Cloud Customer Care 서비스 계정과 Cloud Customer Care에서 제공하는 다른 서비스 계정으로 바꿉니다.
--upload
플래그를 사용하면 명령어가 프로젝트에서 이름이 'anthos-snapshot-
'으로 시작하는 스토리지 버킷을 검색합니다. 이러한 버킷이 있으면 명령어가 스냅샷을 해당 버킷에 업로드합니다. 명령어로 이름이 일치하는 버킷을 찾을 수 없으면 이름이 anthos-snapshot-UUID
인 새 버킷을 만듭니다. 여기서 UUID
는 32자리의 범용 고유 식별자입니다.
--share-with
플래그를 사용하면 Cloud Customer Care와 버킷 액세스 권한을 수동으로 공유할 필요가 없습니다.
Cloud Storage 버킷에 스냅샷을 업로드할 때 다음 출력 예시가 표시됩니다.
Using "system" snapshot configuration...
Taking snapshot of user cluster <var>CLUSTER_NAME</var>...
Setting up <var>CLUSTER_NAME</var> ssh key...DONE
Using the gke-connect register service account key...
Setting up Google Cloud Storage bucket for uploading the snapshot...DONE
Taking snapshots in 10 thread(s)...
...
Snapshot succeeded.
Snapshots saved in "<var>SNAPSHOT_FILE_PATH</var>".
Uploading snapshot to Google Cloud Storage...... DONE
Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/<var>xSNAPSHOT_FILE_NAME</var>.
Shared successfully with service accounts:
<var>GOOGLE_SUPPORT_SERVICE_ACCOUNT</var>