이 문서에서는 고급 클러스터가 사용 설정된 경우 VMware용 Google Distributed Cloud (소프트웨어 전용)를 사용하여 만든 클러스터의 문제를 해결하기 위한 진단 스냅샷을 만들기 위해 gkectl diagnose
명령어를 사용하는 방법을 보여줍니다.
고급 클러스터는 관리자 클러스터 구성 파일 및 사용자 클러스터 구성 파일에서 enableAdvancedClusters
이 true
로 설정된 경우 사용 설정됩니다. 고급 클러스터가 사용 설정되어 있지 않으면 고급 클러스터가 사용 설정되지 않은 경우 진단 스냅샷 만들기를 참고하세요.
gkectl diagnose snapshot
이 명령어는 클러스터의 상태, 구성, 로그를 tar 파일 하나로 압축합니다. gkectl diagnose snapshot 명령어의 기본 구성은 클러스터에 관한 다음 정보를 캡처합니다.
Kubernetes 버전.
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet.
제어 영역 상태
IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보.
Kubernetes API 서버를 사용할 수 없는 경우 관리자 클러스터의 제어 영역 노드의 컨테이너 로그
gkectl diagnose snapshot
명령어의 로그프리플라이트 작업 로그
시나리오를 기반으로 한 네임스페이스 내 컨테이너의 로그
vSphere 및 F5를 포함한 사용자 인증 정보는 tar 파일이 만들어지기 전에 삭제됩니다.
관리자 클러스터 상태 캡처
관리자 클러스터 상태를 캡처하려면 다음 명령어를 실행합니다.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
ADMIN_CLUSTER_KUBECONFIG
를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.
출력에는 다음 예시 출력에 표시된 것처럼 파일 목록과 tar 파일의 이름이 포함됩니다.
Using "system" snapshot configuration...
Creating ssh signer for "[ADMIN_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet
nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log
...
Snapshot succeeded. Output saved in [FILENAME].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 파일의 이름이 포함됩니다.
Using "system" snapshot configuration...
Creating ssh signer for "[USER_CLUSTER_NAME]"...
Taking snapshots in 10 thread(s)...
gkectlLogs/gkectl-xxx.log
...
kubectlCommands/[NAMESPACE]/kubectl_get_pods
kubectlCommands/[NAMESPACE]/kubectl_get_deployments
kubectlCommands/[NAMESPACE]/kubectl_get_daemonsets
...
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/commands/journalctl_-u_kubelet
nodes/[USER_CLUSTER_NODE_IP_ADDRESS]/files/var/log/startup.logn
...
Snapshot succeeded. Output saved in [FILENAME].tar.gz.
스냅샷 시나리오
스냅샷 시나리오를 사용하면 스냅샷에 포함되는 정보를 제어할 수 있습니다. 시나리오를 지정하려면 --scenario
플래그를 사용합니다. 다음 목록에는 가능한 값이 나와 있습니다.
system
(기본값): 지원되는 시스템 네임스페이스의 로그가 있는 스냅샷을 수집합니다.all
: 사용자 정의 네임스페이스를 포함한 모든 네임스페이스의 로그를 사용하여 스냅샷을 수집합니다.
관리자 클러스터의 스냅샷을 만들기 위해서는 시나리오를 지정할 필요가 없습니다.
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
--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
출력은 다음 예시와 비슷합니다.
The snapshot configuration is:
numOfParallelThreads: 10
excludeWords:
- password
kubectlCommands:
- commands:
- kubectl version
- kubectl cluster-info
- kubectl top node
- kubectl top pod -A --containers
namespaces: []
- commands:
- kubectl get -o wide --ignore-not-found
- kubectl get -o yaml --ignore-not-found
- kubectl describe
namespaces:
- kube-system
...
expandResources: true
- commands:
- kubectl logs
namespaces:
- kube-system
...
kindNodeCommands: []
nodeCommands:
- nodes: []
commands:
- uptime
- df --all --inodes
- ip addr
- ip neigh
- iptables-save --counters
- mount
- ip route list table all
- top -bn1 || true
- docker info || true
...
- nodes: []
commands:
- dmesg
- systemctl status -l kubelet
- journalctl --utc -u kubelet
- journalctl --utc -u kubelet-monitor.service
...
nodeFiles:
- nodes: []
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/netfilter/nf_conntrack_max
...
- nodes: []
files:
- /var/log/apiserver/audit-proxy-buffer/* || true
다음 정보가 출력에 표시됩니다.
numOfParallelThreads
: 스냅샷을 만드는 데 사용된 동시 스레드 수입니다.excludeWords
: 스냅샷에서 제외할 단어 목록입니다(대소문자를 구분하지 않음). 이러한 단어가 포함된 줄은 스냅샷 결과에서 삭제됩니다. 'password'는 지정 여부와 관계없이 항상 제외됩니다.kubectlCommands
: 실행할 kubectl 명령어의 목록입니다. 결과가 저장됩니다. 명령어는 해당 네임스페이스에서 실행됩니다.kubectl logs
명령어의 경우 해당 네임스페이스의 모든 포드와 컨테이너가 자동으로 추가됩니다. 네임스페이스 지정에 정규 표현식이 지원됩니다. 네임스페이스를 지정하지 않으면default
네임스페이스가 사용됩니다.nodeCommands
: 해당 노드에서 실행할 명령어 목록입니다. 결과가 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.nodeFiles
: 해당 노드에서 수집할 파일의 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.