클러스터 중 하나에 문제가 발생하면 클라우드 고객 관리에서 도움을 얻을 수 있습니다. 고객 관리에 문의할 때 문제 진단을 위해 클러스터 '스냅샷'이 필요할 수도 있습니다. 스냅샷은 클러스터 및 노드 구성 파일을 캡처해서 하나의 tar 파일로 만든 것입니다.
이 문서에서는 클러스터에 대해 기본 스냅샷 또는 맞춤설정된 스냅샷을 만드는 방법을 설명합니다. 또한 클러스터에 특정 오류가 발생했을 때 스냅샷을 만드는 방법을 설명합니다.
기본 스냅샷
다음 섹션에서는 표준 스냅샷에 포함된 항목과 이를 만드는 방법을 설명합니다. 맞춤설정된 스냅샷에 대한 자세한 내용은 맞춤설정된 스냅샷을 참조하세요.
기본 스냅샷에 포함되는 정보는 무엇인가요?
클러스터 스냅샷은 클러스터의 구성 파일 및 로그가 포함된 tar 파일입니다. 특히, 명령어의 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.
Kubernetes 버전
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자(배포, DaemonSet, StatefulSet 포함)
IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보
bmctl check cluster --snapshot
명령어의 로그
클러스터의 사용자 인증 정보는 기본 스냅샷에 포함되지 않습니다. Cloud Customer Care에서 이 정보를 요청하면 클러스터 정보 검색을 참조하세요.
스냅샷 명령어를 실행할 때 수집되는 전체 정보 목록은 세부 구성 파일 섹션에 표시된 구성 파일을 참조하세요. 이 구성 파일은 기본 스냅샷을 만들 때 실행되는 명령어를 보여줍니다.
기본 스냅샷을 만드는 방법
bmctl check cluster
명령어는 클러스터의 스냅샷을 만듭니다. 이 명령어를 사용하여 다음 작업 중 하나를 수행할 수 있습니다.
- 스냅샷을 만들고 이 스냅샷을 Cloud Storage 버킷에 자동으로 업로드
- 클러스터의 스냅샷을 만들고 명령어를 실행하는 로컬 머신에 스냅샷 파일 저장
방법 #1: 기본 스냅샷을 만들고 Cloud Storage 버킷으로 자동 업로드
스냅샷을 만들고 Cloud Storage 버킷으로 업로드하려면 다음을 수행합니다.
API 및 서비스 계정을 설정합니다.
- Google Cloud 프로젝트 내에서 Cloud Storage API를 사용 설정합니다.
bmctl check cluster --snapshot
명령어가 Cloud Storage 버킷에 클러스터 스냅샷을 자동으로 업로드하기 위해 사용되는 서비스 계정을 만듭니다.- 서비스 계정이 데이터를 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_PATH:
--service-account-key-file
플래그를 제공하지 않으면bmctl
가 환경 변수GOOGLE_APPLICATION_CREDENTIALS
에서 서비스 계정의 키 파일 경로를 가져오려고 시도합니다.
Cloud Customer Care에 스냅샷이 포함된 버킷에 대한 읽기 액세스 권한을 부여합니다.
gsutil iam ch \ serviceAccount:service-PROJECT_ID@anthos-support.iam.gserviceaccount.com:roles/storage.objectViewer \ gs://BUCKET_NAME
방법 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=USER_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=USER_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
관리자 클러스터에 연결할 수 없을 때 맞춤설정된 스냅샷을 만드는 방법
관리자 클러스터에 연결할 수 없을 때 클러스터에 대해 맞춤설정된 스냅샷을 만들 수 있습니다. 다음 단계에서는 관리자 클러스터에 연결할 수 없을 때 클러스터의 맞춤설정된 스냅샷을 만드는 방법을 보여줍니다.
아카이브에서 클러스터의 스냅샷 구성 파일을 검색합니다.
노드 섹션에서 정보를 가져오려는 노드의 IP 주소를 나열하지만 관리자 클러스터 노드의 IP 주소는 제외합니다.
다음 명령어를 실행하여 맞춤설정된 스냅샷을 만듭니다.
bmctl check cluster --snapshot --snapshot-config=SNAPSHOT_CONFIG_FILE --cluster=CLUSTER_NAME --kubeconfig=KUBECONFIG_PATH
인그레스 또는 Anthos Service Mesh 문제를 위한 로그 수집
bmctl
스냅샷에는 인그레스 또는 Anthos Service Mesh 문제 해결을 위한 정보가 없습니다. 관련 진단 로그를 수집하는 방법에 대한 안내는 Anthos Service Mesh 문서의 Anthos Service Mesh 로그 수집을 참조하세요.