클러스터 중 하나에 문제가 발생하면 클라우드 고객 관리에서 도움을 얻을 수 있습니다. 고객 관리에 문의할 때 문제 진단을 위해 클러스터 '스냅샷'이 필요할 수도 있습니다. 스냅샷은 클러스터 및 노드 구성 파일을 캡처해서 하나의 tar 파일로 만든 것입니다.
이 문서에서는 클러스터에 대해 기본 스냅샷 또는 맞춤설정된 스냅샷을 만드는 방법을 설명합니다. 또한 클러스터에 특정 오류가 발생했을 때 스냅샷을 만드는 방법을 설명합니다.
기본 스냅샷
다음 섹션에서는 표준 스냅샷에 포함된 항목과 이를 만드는 방법을 설명합니다. 맞춤설정된 스냅샷에 대한 자세한 내용은 맞춤설정된 스냅샷을 참조하세요.
기본 스냅샷에 포함되는 정보는 무엇인가요?
클러스터 스냅샷은 클러스터의 구성 파일 및 로그가 포함된 tar 파일입니다. 특히, 명령어의 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.
Kubernetes 버전.
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet.
IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보.
Google Distributed Cloud의 VM 런타임과 클러스터에서 실행되는 VM 및 VM 관련 리소스에 대한 정보. 기본적으로 수집되는 항목과 VM별 스냅샷을 만드는 방법에 대한 자세한 내용은 이 문서의 스냅샷의 VM 정보를 참조하세요.
bmctl check cluster --snapshot
명령어의 로그
클러스터의 사용자 인증 정보는 기본 스냅샷에 포함되지 않습니다. Cloud Customer Care에서 이 정보를 요청하면 클러스터 정보 검색을 참조하세요.
스냅샷 명령어를 실행할 때 수집되는 전체 정보 목록은 세부 구성 파일 섹션에 표시된 구성 파일을 참조하세요. 이 구성 파일은 기본 스냅샷을 만들 때 실행되는 명령어를 보여줍니다.
기본 스냅샷을 만드는 방법
bmctl check cluster
명령어는 클러스터의 스냅샷을 만듭니다. 이 명령어를 사용하여 다음 작업 중 하나를 수행할 수 있습니다.
- 스냅샷을 만들고 이 스냅샷을 Cloud Storage 버킷에 자동으로 업로드합니다.
- 클러스터의 스냅샷을 만들고 명령어를 실행하는 로컬 머신에 스냅샷 파일을 저장합니다.
방법 #1: 기본 스냅샷을 만들고 Cloud Storage 버킷으로 자동 업로드
스냅샷을 만들고 Cloud Storage 버킷으로 업로드하려면 다음을 수행합니다.
API 및 서비스 계정을 설정합니다.
- Google Cloud 프로젝트 내에서 Cloud Storage API를 사용 설정합니다.
- 서비스 계정이 데이터를 Cloud Storage로 업로드할 수 있도록 서비스 계정에
storage.admin
역할을 부여합니다. - 서비스 계정에 대해 JSON 키를 다운로드합니다.
자세한 내용은 Google 서비스 및 서비스 계정 사용 설정을 참조하세요.
다음
bmctl
명령어를 실행하여 스냅샷을 만들고 Cloud Storage 버킷으로 자동으로 업로드합니다.bmctl check cluster --snapshot --cluster=CLUSTER_NAME \ --kubeconfig=KUBECONFIG_PATH \ --upload-to BUCKET_NAME \ [--service-account-key-file SERVICE_ACCOUNT_KEY_FILE]
명령어에서 다음 항목을 클러스터 환경에 해당하는 정보로 바꿉니다.
CLUSTER_NAME
: 스냅샷을 만들려는 클러스터의 이름입니다.KUBECONFIG_PATH
: 관리자 클러스터 kubeconfig 파일의 경로 (kubeconfig 파일의 경로는 기본적으로bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다. 그러나WORKSPACE_DIR
플래그로 작업공간을 지정한 경우 경로는WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다.)BUCKET_NAME
: 소유한 Cloud Storage 버킷의 이름입니다.SERVICE_ACCOUNT_KEY_FILE
:--service-account-key-file
플래그를 제공하지 않으면bmctl
이GOOGLE_APPLICATION_CREDENTIALS
환경 변수에서 서비스 계정 키 파일의 경로를 가져오려고 시도합니다.
Google Cloud 지원팀의 업데이트된 클러스터 스냅샷 보기 허용에 설명된 대로 서비스 계정을 만들고 Cloud Customer Care와 액세스를 공유합니다.
방법 2: 로컬 머신에 기본 스냅샷 만들기
다음 명령어로 생성된 클러스터의 상태를 캡처할 수 있습니다.
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH
다음을 바꿉니다.
CLUSTER_NAME
: 대상 클러스터의 이름입니다.KUBECONFIG_PATH
: 관리자 클러스터 kubeconfig 파일의 경로 (kubeconfig 파일의 경로는 기본적으로bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다. 그러나WORKSPACE_DIR
플래그로 작업공간을 지정한 경우 경로는WORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
입니다.)
이 명령어는 로컬 머신에 tar 파일을 출력합니다. 이 tar 파일의 이름은 snapshot-CLUSTER_NAME-TIMESTAMP.tar.gz
형식입니다. 여기서 TIMESTAMP
는 파일이 생성된 날짜 및 시간을 나타냅니다. 이 tar 파일에는 클러스터의 시스템 구성요소 및 머신에 대한 관련 디버그 정보가 포함됩니다.
이 명령어를 실행하면 gke-system
, gke-connect
, capi-system
, capi-webhook-system
, cert-manager
, capi-kubeadm-bootstrap-system
네임스페이스에서 포드에 대한 정보가 수집됩니다.
하지만 --snapshot-scenario all
플래그를 사용해서 수집되는 진단 정보 범위를 넓힐 수 있습니다. 이 플래그는 클러스터의 모든 포드를 포함하도록 진단 스냅샷 범위를 늘립니다.
bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH
스냅샷 시나리오
bmctl check cluster --snapshot
명령어는 두 가지 시나리오를 지원합니다. 시나리오를 지정하려면 --scenario
플래그를 사용합니다. 다음 목록에는 가능한 값이 나와 있습니다.
system
: 로그를 포함한 시스템 구성요소의 스냅샷을 수집합니다.all
: 로그를 포함한 모든 포드의 스냅샷을 수집합니다.
두 가지 시나리오를 각각 관리자 클러스터 또는 사용자 클러스터에 사용할 수 있습니다. 예를 들어 system
시나리오를 사용하여 관리자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
bmctl check cluster --snapshot --snapshot-scenario system \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
all
시나리오를 사용하여 사용자 클러스터 스냅샷을 만들려면 다음을 실행합니다.
bmctl check cluster --snapshot --snapshot-scenario all \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
스냅샷의 테스트 실행 수행
--snapshot-dry-run
플래그를 사용하면 명령어가 스냅샷을 만들지 않습니다.
대신 스냅샷 명령어가 수행할 작업을 표시하고 스냅샷 구성 파일을 출력합니다. 스냅샷 구성 파일에 대한 자세한 내용은 맞춤설정된 스냅샷을 만드는 방법을 참조하세요.
관리자 클러스터에서 테스트 실행 스냅샷을 수행하려면 다음 명령어를 입력합니다.
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=ADMIN_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
사용자 클러스터에서 테스트 실행 스냅샷을 수행하려면 다음 명령어를 입력합니다.
bmctl check cluster --snapshot --snapshot-dry-run \ --cluster=USER_CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
특정 기간의 로그 가져오기
--since
플래그를 사용하면 특히 관심 있는 기간의 로그를 검색할 수 있습니다. 이러한 방식으로 지난 몇 초, 몇 분, 몇 시간 동안 발생한 더 작고 집중적인 로깅 스냅샷을 만들 수 있습니다.
예를 들어 다음 bmctl
명령어는 지난 3시간 동안 발생한 로깅의 스냅샷을 만듭니다.
bmctl check cluster --snapshot --since=3h \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
스냅샷이 임시로 저장되는 디렉터리 지정
--snapshot-temp-output-dir
플래그를 사용하여 스냅샷이 임시로 저장되는 디렉터리를 지정할 수 있습니다.
bmctl check cluster --snapshot --snapshot-temp-output-dir=TEMP_OUTPUT_DIR \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
디렉터리를 지정하지 않으면 스냅샷은 /tmp
디렉터리에 임시로 저장됩니다. 예를 들어 기본 /tmp
디렉터리에서 공간이 제한된 경우 --snapshot-temp-output-dir
옵션을 사용하는 것이 좋습니다.
콘솔 로깅 차단
스냅샷 실행 중에 로그 메시지가 콘솔에 표시되지 않도록 --quiet
플래그를 사용할 수 있습니다. 대신 콘솔 로그가 스냅샷의 일부로 'bmctl_diagnose_snapshot.log' 파일에 저장됩니다.
다음 명령어를 실행하여 로그 메시지가 콘솔에 표시되지 않도록 합니다.
bmctl check cluster --snapshot --quiet \ --cluster=CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG_PATH
맞춤설정된 스냅샷
다음 이유로 인해 클러스터에 대해 맞춤설정된 스냅샷을 만들어야 할 수도 있습니다.
- 기본 스냅샷에 제공되는 것보다 더 많은 클러스터에 대한 정보를 포함하기 위해
- 기본 스냅샷에 있는 일부 정보를 제외하기 위해
맞춤설정된 스냅샷을 만드는 방법
맞춤설정된 스냅샷을 만들려면 스냅샷 구성 파일을 사용해야 합니다. 다음 단계에서는 구성 파일을 만들고, 이를 수정하고, 이를 사용해서 클러스터에 대해 맞춤설정된 스냅샷을 만드는 방법을 설명합니다.
클러스터에서 다음 명령어를 실행하고 출력을 파일에 기록하여 스냅샷 구성 파일을 만듭니다.
bmctl check cluster \ --snapshot --snapshot-dry-run --cluster CLUSTER_NAME \ --kubeconfig KUBECONFIG_PATH
맞춤설정된 스냅샷에 표시하려는 정보 유형을 정의합니다. 이렇게 하려면 1단계에서 만든 스냅샷 구성 파일을 수정합니다. 예를 들어 특정 노드의 실행 시간과 같이 스냅샷에 추가 정보를 포함하고 싶으면 구성 파일에서 관련 섹션에 Linux 명령어
uptime
을 추가합니다. 다음 구성 파일 스냅샷은 스냅샷 명령어를 사용해서 노드10.200.0.3
에 대해uptime
정보를 제공하는 방법을 보여줍니다. 이 정보는 표준 스냅샷에 표시되지 않습니다.... nodeCommands: - nodes: - 10.200.0.3 commands: - uptime ...
구성 파일을 수정해서 원하는 스냅샷 유형을 정의한 다음에는 다음 명령어를 실행하여 맞춤설정된 스냅샷을 만듭니다.
bmctl check cluster --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE \ --cluster CLUSTER_NAME--kubeconfig KUBECONFIG_PATH
--snapshot-config
플래그는bmctl
명령어가 스냅샷 구성 파일 내용을 사용해서 스냅샷에 표시되는 정보를 정의하도록 지시합니다.
세부 구성 파일
다음 샘플 스냅샷 구성 파일은 스냅샷을 만드는 데 사용되는 표준 명령어 및 파일을 보여주지만, 추가 진단 정보가 필요한 경우 명령어 및 파일을 더 추가할 수 있습니다.
numOfParallelThreads: 10
excludeWords:
- password
nodeCommands:
- nodes:
- 10.200.0.3
- 10.200.0.4
commands:
- uptime
- df --all --inodes
- ip addr
- ip neigh
- iptables-save --counters
- mount
- ip route list table all
- top -bn1 || true
- docker info || true
- docker ps -a || true
- crictl ps -a || true
- docker ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
sudo docker logs || true
- docker ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
xargs sudo docker logs || true
- crictl ps -a | grep anthos-baremetal-haproxy | cut -d ' ' -f1 | head -n 1 | xargs
sudo crictl logs || true
- crictl ps -a | grep anthos-baremetal-keepalived | cut -d ' ' -f1 | head -n 1 |
xargs sudo crictl logs || true
- ps -edF
- ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
- conntrack --count
- dmesg
- systemctl status -l docker || true
- journalctl --utc -u docker
- journalctl --utc -u docker-monitor.service
- systemctl status -l kubelet
- journalctl --utc -u kubelet
- journalctl --utc -u kubelet-monitor.service
- journalctl --utc --boot --dmesg
- journalctl --utc -u node-problem-detector
- systemctl status -l containerd || true
- journalctl --utc -u containerd
- systemctl status -l docker.haproxy || true
- journalctl --utc -u docker.haproxy
- systemctl status -l docker.keepalived || true
- journalctl --utc -u docker.keepalived
- systemctl status -l container.haproxy || true
- journalctl --utc -u container.haproxy
- systemctl status -l container.keepalived || true
- journalctl --utc -u container.keepalived
nodeFiles:
- nodes:
- 10.200.0.3
- 10.200.0.4
files:
- /proc/sys/fs/file-nr
- /proc/sys/net/netfilter/nf_conntrack_max
- /proc/sys/net/ipv4/conf/all/rp_filter
- /lib/systemd/system/kubelet.service
- /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- /lib/systemd/system/docker.service || true
- /etc/systemd/system/containerd.service || true
- /etc/docker/daemon.json || true
- /etc/containerd/config.toml || true
- /etc/systemd/system/container.keepalived.service || true
- /etc/systemd/system/container.haproxy.service || true
- /etc/systemd/system/docker.keepalived.service || true
- /etc/systemd/system/docker.haproxy.service || true
nodeSSHKey: ~/.ssh/id_rsa # path to your ssh key file
구성 파일에 있는 다음 항목은 위에서 샘플 구성 파일에 표시되는 것과 다르게 보일 수 있습니다.
nodeCommands
및nodeFiles
섹션에 있는 노드 IP 주소- 클러스터의
nodeSSHKey
경로
구성 파일의 필드
스냅샷 구성 파일은 YAML 형식입니다. 구성 파일에는 다음 필드가 포함됩니다.
numOfParallelThreads
: 스냅샷 루틴은 일반적으로 여러 명령어를 실행합니다. 여러 동시 스레드를 사용하면 루틴을 더 빠르게 실행할 수 있습니다. 앞의 샘플 구성 파일에 나온 것처럼numOfParallelThreads
를10
으로 설정하는 것이 좋습니다. 스냅샷이 너무 오래 걸리면 이 값을 늘립니다.excludeWords
: 스냅샷에 대량의 클러스터 노드 데이터가 포함됩니다. 스냅샷을 공유할 때 보안 위험을 줄이려면excludeWords
를 사용합니다. 예를 들어 해당 비밀번호 문자열을 식별할 수 없도록password
를 제외합니다.nodeCommands
: 이 섹션에서는 다음 정보를 지정합니다.nodes
: 정보를 수집할 클러스터 노드의 IP 주소 목록입니다. 관리자 클러스터에 연결할 수 없을 때 스냅샷을 만들려면 노드 IP 주소를 하나 이상 지정합니다.commands
: 각 노드에서 실행할 명령어 및 인수 목록입니다. 각 명령어의 출력이 스냅샷에 포함됩니다.
nodeFiles
: 이 섹션에서는 다음 정보를 지정합니다.nodes
: 파일을 수집할 클러스터 노드의 IP 주소 목록입니다. 관리자 클러스터에 연결할 수 없을 때 스냅샷을 만들려면 노드 IP 주소를 하나 이상 지정합니다.files
: 각 노드에서 검색할 파일의 목록입니다. 지정된 파일이 노드에서 발견되면 스냅샷에 포함됩니다.
nodeSSHKey
: SSH 키 파일의 경로입니다. 관리자 클러스터에 연결할 수 없으면 이 필드가 필요합니다.
특정 오류가 발생할 때 스냅샷 만들기
설치 또는 업그레이드 중단 중에 기본 스냅샷을 만드는 방법
관리자, 하이브리드 또는 독립형 클러스터를 설치하거나 업그레이드할 때 bmctl
은 다음 출력이 표시될 수 있는 시점에 멈출 수 있습니다.
- 클러스터 kubeconfig가 준비될 때까지 기다리는 중입니다.
- 클러스터가 준비될 때까지 기다리는 중입니다.
- 노드 풀이 준비될 때까지 기다리는 중입니다.
- 업그레이드가 완료될 때까지 기다리는 중입니다.
설치 또는 업그레이드가 중단되면 부트스트랩 클러스터를 사용하여 다음 명령어를 실행하여 클러스터의 스냅샷을 만들 수 있습니다.
bmctl check cluster --snapshot --cluster=CLUSTER_NAME \
--kubeconfig=WORKSPACE_DIR/.kindkubeconfig
설치 또는 업그레이드 중단 중에 맞춤설정된 스냅샷을 만드는 방법
다음 단계는 설치 또는 업그레이드가 중단될 때 클러스터의 맞춤설정된 스냅샷을 만드는 방법을 보여줍니다.
아카이브에서 클러스터의 스냅샷 구성 파일을 검색합니다.
스냅샷에 필요한 정보가 포함되도록 스냅샷 구성 파일을 수정합니다.
다음 명령어를 실행하여 맞춤설정된 스냅샷을 만듭니다.
bmctl check cluster --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE \ --cluster=CLUSTER_NAME --kubeconfig=WORKSPACE_DIR/.kindkubeconfig
관리자 클러스터에 연결할 수 없을 때 맞춤설정된 스냅샷을 만드는 방법
관리자 클러스터에 연결할 수 없을 때 다음 명령어를 실행하여 클러스터에 대해 맞춤설정된 스냅샷을 만들 수 있습니다.
bmctl check cluster --snapshot --cluster CLUSTER_NAME
--node-ssh-key SSH_KEY_FILE
--nodes NODE_1_IP_ADDRESS, NODE_2_IP_ADDRESS, ...
명령어에서 다음 항목을 클러스터 환경에 해당하는 정보로 바꿉니다.
CLUSTER_NAME
: 스냅샷을 만들려는 클러스터의 이름입니다.SSH_KEY_FILE
: 노드 SSH 키 파일의 경로입니다.NODE_x_IP_ADDRESS
: 정보가 필요한 클러스터 노드의 IP 주소입니다.
또는 노드 IP 주소를 별도의 줄에 나열할 수 있습니다.
bmctl check cluster
--snapshot --cluster CLUSTER_NAME \
--node-ssh-key SSH_KEY_FILE \
--nodes NODE_1_IP_ADDRESS \
--nodes NODE_2_IP_ADDRESS
...
스냅샷의 VM 정보
Google Distributed Cloud의 VM 런타임을 사용하여 베어메탈용 GKE에서 가상 머신(VM)을 만들고 관리하는 경우 스냅샷에서 관련 진단 정보를 수집할 수 있습니다. 스냅샷은 VM에서 문제를 진단하고 해결하는 데 사용되는 중요한 리소스입니다.
기본적으로 수집되는 항목
기본 스냅샷을 만들면 Google Distributed Cloud의 VM 런타임과 관련 리소스에 대한 정보가 포함됩니다.
Google Distributed Cloud의 VM 런타임은 베어메탈용 GKE와 함께 번들로 제공되며 워크로드를 실행하는 클러스터에서 VMRuntime
커스텀 리소스를 사용할 수 있습니다.
Google Distributed Cloud에서 VM 런타임을 사용 설정하지 않아도 스냅샷에는 계속 VMRuntime
커스텀 리소스 YAML 설명이 포함됩니다.
Google Distributed Cloud에서 VM 런타임을 사용 설정한 경우 스냅샷에는 클러스터에 있는 VM 관련 리소스(객체가 있는 경우)의 상태 및 구성 정보가 포함됩니다. VM 관련 리소스에는 포드, 배포, DaemonSet, ConfigMap과 같은 Kubernetes 객체가 포함됩니다.
vm-system
네임스페이스의 객체
다음 객체의 상태와 구성 정보는 생성된 스냅샷의 kubectlCommands/vm-system
에 있습니다.
KubeVirt
VirtualMachineType
VMHighAvailabilityPolicy
다른 네임스페이스의 객체
VM(VirtualMachine
)을 만들 때 네임스페이스를 지정할 수 있습니다. 네임스페이스를 지정하지 않으면 VM에서 default
네임스페이스를 가져옵니다. 이 섹션의 다른 객체(예: VirtualMachineInstance
) 모두 해당 VM의 네임스페이스에 binding됩니다.
다음 객체의 상태와 구성 정보는 생성된 스냅샷의 kubectlCommands/VM_NAMESPACE
에 있습니다. VM에 특정 네임스페이스를 설정하지 않은 경우 정보는 kubectlCommands/default
에 있습니다.
VirtualMachine
VirtualMachineInstance
VirtualMachineDisk
GuestEnvironmentData
VirtualMachineAccessRequest
VirtualMachinePasswordResetRequest
네임스페이스가 아닌 객체
다음 객체는 네임스페이스가 아니므로 해당 정보는 생성된 스냅샷의 kubectlCommands
에 직접 있습니다.
VMRuntime
DataVolume
CDI
GPUAllocation
스냅샷 구성 파일을 사용하여 VM 세부정보만 캡처
특히 VM의 문제를 진단하는 경우 스냅샷 구성 파일을 사용하여 수집된 정보를 VM 관련 세부정보로만 제한하고 수집된 VM 정보를 맞춤설정할 수 있습니다.
다음 스냅샷 구성 파일에서는 VM별 스냅샷을 구성하는 방법을 보여줍니다. 스냅샷에 대한 추가 정보를 수집하도록 추가 명령어를 포함할 수 있습니다.
---
kubectlCommands:
- commands:
- kubectl get vm -o wide
- kubectl get vmi -o wide
- kubectl get gvm -o wide
- kubectl get vm -o yaml
- kubectl get vmi -o yaml
- kubectl get gvm -o yaml
- kubectl describe vm
- kubectl describe vmi
- kubectl describe gvm
namespaces:
- .*
- commands:
- kubectl get virtualmachinetype -o wide
- kubectl get virtualmachinedisk -o wide
- kubectl get virtualmachinetype -o yaml
- kubectl get virtualmachinedisk -o yaml
- kubectl describe virtualmachinetype
- kubectl describe virtualmachinedisk
namespaces:
- vm-system
스냅샷 구성 파일 사용 방법에 대한 자세한 내용은 이 문서의 맞춤설정된 스냅샷을 참조하세요.