고급 클러스터가 사용 설정된 경우 진단 스냅샷 만들기

이 문서에서는 고급 클러스터가 사용 설정된 경우 VMware용 Google Distributed Cloud (소프트웨어 전용)를 사용하여 만든 클러스터의 문제를 해결하기 위한 진단 스냅샷을 만들기 위해 gkectl diagnose 명령어를 사용하는 방법을 보여줍니다. 고급 클러스터는 관리자 클러스터 구성 파일사용자 클러스터 구성 파일에서 enableAdvancedClusterstrue로 설정된 경우 사용 설정됩니다. 고급 클러스터가 사용 설정되어 있지 않으면 고급 클러스터가 사용 설정되지 않은 경우 진단 스냅샷 만들기를 참고하세요.

추가 지원이 필요하면 Cloud Customer Care에 연락합니다.

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 플래그는 kubectljournalctl 로그에서만 지원됩니다.
  • --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: 해당 노드에서 수집할 파일의 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.

다음 단계

추가 지원이 필요하면 Cloud Customer Care에 문의하기