클러스터를 진단하거나 확인하여 문제를 디버깅하고 클러스터 상태의 스냅샷을 캡처할 수 있습니다. 또한 설치 시 부분적으로 성공했지만 클러스터가 오류를 반환하거나 올바르게 작동하지 않는 경우 클러스터를 재설정할 수 있습니다.
bmctl check cluster
를 사용한 클러스터 진단
bmctl check cluster
명령어로 생성된 클러스터의 상태를 캡처할 수 있습니다. 명령 플래그를 사용하면 명령어의 진단 범위를 선택할 수 있으므로 집중된 정보를 얻을 수 있습니다.
진단 정보는 문제를 발견하고 더 효과적으로 배포를 디버깅하는 데 도움이 될 수 있습니다. 이 명령어는 정의된 범위에 해당하는 모든 관련 클러스터 및 노드 구성 파일을 캡처한 후 단일 tar 보관 파일에 해당 정보를 패키징합니다.
bmctl check cluster --snapshot --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH
다음을 바꿉니다.
CLUSTER_NAME: 대상 클러스터의 이름입니다.
ADMIN_KUBECONFIG_PATH: 관리자 클러스터
kubeconfig
파일의 경로입니다.
이 명령어는 지정된 클러스터에 있는 모든 시스템 구성요소와 머신의 관련 디버그 정보를 포함하는 tar 보관 파일을 출력합니다.
다음 명령어 플래그로 수집된 진단 정보의 범위를 변경할 수 있습니다.
--snapshot-scenario all
플래그는 지정된 클러스터의 모든 pod를 포함하도록 진단 스냅샷의 범위를 늘립니다.
bmctl check cluster --snapshot --snapshot-scenario all --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH
--snapshot-dry-run
플래그는--snapshot-config string
플래그와 함께 작동합니다. 커스텀 진단 범위를 정의하기 위해 수정할 수 있는 구성 파일을 출력하려면--snapshot-dry-run
플래그를 사용하세요. 범위에 특정 pod, 네임스페이스 또는 노드 명령어가 포함될 수 있습니다.
--snapshot-dry-run
플래그로 생성된 출력 파일을 수정한 후에는 이 파일을 입력으로 사용하여 아래에 설명된 --snapshot-config string
플래그로 특정 범위를 진단할 수 있습니다. 이 플래그를 생략하면 기본 구성이 적용됩니다.
bmctl check cluster --snapshot --snapshot-dry-run --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH
--snapshot-config
플래그는bmctl
명령어에 지시하여 스냅샷 구성 파일에 지정된 범위 옵션을 사용하도록 합니다. 일반적으로--snapshot-dry-run
플래그로 스냅샷 구성 파일을 만듭니다.
bmctl check cluster --snapshot --snapshot-config SNAPSHOT_CONFIG_FILE --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH
관리자 클러스터에 연결할 수 없을 때 클러스터 진단
관리자 클러스터가 작동 중지되거나 연결할 수 없는 경우 스냅샷 구성 파일을 사용하여 클러스터 스냅샷을 만듭니다. 스냅샷 구성 파일은 YAML 형식입니다. 구성 파일에는 클러스터에 정보를 캡처하는 방법을 지정하는 다음 필드가 포함되어 있습니다.
numOfParallelThreads
: 스냅샷 루틴은 일반적으로 여러 명령어를 실행합니다. 여러 동시 스레드를 사용하면 루틴을 더 빠르게 실행할 수 있습니다. 다음 예시와 같이numOfParallelThreads
를10
으로 설정하는 것이 좋습니다. 스냅샷이 너무 오래 걸리면 이 값을 늘립니다.excludeWords
: 스냅샷에 대량의 클러스터 노드 데이터가 포함됩니다. 스냅샷을 공유할 때 보안 위험을 줄이려면excludeWords
를 사용합니다. 예를 들어 해당 비밀번호 문자열을 식별할 수 없도록password
를 제외합니다.nodeCommands
: 이 섹션에서는 다음 정보를 지정합니다.nodes
: 정보를 수집할 클러스터 노드의 IP 주소 목록입니다. 관리자 클러스터에 연결할 수 없을 때 스냅샷을 만들려면 노드 IP 주소를 하나 이상 지정합니다.commands
: 각 노드에서 실행할 명령어 및 인수 목록입니다. 각 명령어의 출력이 스냅샷에 포함됩니다.
nodeFiles
: 이 섹션에서는 다음 정보를 지정합니다.nodes
: 파일을 수집할 클러스터 노드의 IP 주소 목록입니다. 관리자 클러스터에 연결할 수 없을 때 스냅샷을 만들려면 노드 IP 주소를 하나 이상 지정합니다.files
: 각 노드에서 검색할 파일의 목록입니다. 지정된 파일이 노드에서 발견되면 스냅샷에 포함됩니다.
nodeSSHKey
: 노드의 SSH 키 파일 경로입니다. 이 필드는 관리자 클러스터에 연결할 수 없을 때 스냅샷을 만드는 데 필요합니다.
스냅샷 구성 파일을 사용하여 스냅샷을 만들려면 다음 명령어를 사용합니다.
bmctl check cluster --snapshot --snapshot-config SNAPSHOT_CONFIG
SNAPSHOT_CONFIG
를 스냅샷 구성 파일의 경로로 바꿉니다.
다음 샘플 스냅샷 구성 파일은 스냅샷을 만드는 데 사용되는 표준 명령어와 파일을 보여줍니다. 추가 진단 정보가 필요한 경우 명령어와 파일을 더 추가할 수 있습니다.
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 to each nodes
관리자 클러스터의 중단된 설치/업그레이드에 대한 스냅샷 만들기
관리자/하이브리드/독립형 클러스터를 설치할 때 bmctl이 다음 출력에서 멈춘 경우
- 클러스터 kubeconfig가 준비될 때까지 대기
- 클러스터가 준비될 때까지 대기
- 노드 풀이 준비될 때까지 대기
또는 관리자/하이브리드/독립형 클러스터를 업그레이드하는 경우
- 업그레이드가 완료될 때까지 대기
다음 명령어를 실행하여 부트스트랩 클러스터를 사용하여 스냅샷을 만들 수 있습니다.
bmctl check cluster --snapshot --kubeconfig <var>WORKSPACE_DIR</var>/.kindkubeconfig --cluster <var>CLUSTER_NAME</var>
bmctl reset cluster
로 클러스터 재설정
클러스터가 올바르게 설치되지 않으면 노드를 재설정하여 정상 상태로 되돌릴 수 있습니다. 그런 다음 구성을 변경한 후에 클러스터를 다시 설치할 수 있습니다.
자체 관리 클러스터 재설정
관리자 클러스터와 같이 자체적으로 관리되는 클러스터를 재설정하려면 다음 명령어를 실행합니다.
bmctl reset --cluster CLUSTER_NAME
CLUSTER_NAME을 재설정하려는 클러스터의 이름으로 바꿉니다.
사용자 클러스터 재설정
사용자 클러스터를 재설정하려면 다음 명령어를 실행합니다.
bmctl reset --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG_PATH
CLUSTER_NAME을 재설정하려는 사용자 클러스터의 이름으로 바꾸고 ADMIN_KUBECONFIG_PATH를 연결된 관리자 클러스터의 kubeconfig
파일 경로로 바꿉니다. bmctl
은 --kubeconfig
를 --admin-kubeconfig
플래그의 별칭으로 사용하도록 지원합니다.
클러스터 세부정보 재설정
클러스터 유형에 관계없이 재설정 명령어가 전체 클러스터에 적용됩니다. 클러스터 내 노드 하위 집합을 대상으로 하는 옵션은 없습니다.
bmctl cluster reset
명령어의 결과는 이 샘플과 비슷하게 표시됩니다.
bmctl reset --cluster cluster1 Creating bootstrap cluster... OK Deleting GKE Hub member admin in project my-gcp-project... Successfully deleted GKE Hub member admin in project my-gcp-project Loading images... OK Starting reset jobs... Resetting: 1 Completed: 0 Failed: 0 ... Resetting: 0 Completed: 1 Failed: 0 Flushing logs... OK
재설정 작업 중에 bmctl
은 먼저 GKE 허브 멤버십 등록 삭제를 시도한 다음 영향을 받은 노드를 삭제합니다. 초기화 중에는 anthos-system StorageClass
의 스토리지 마운트 및 데이터도 삭제됩니다.
bmctl은 모든 노드에 대해 kubeadm reset
을 실행하고, 클러스터 네트워킹에 사용되는 터널 인터페이스를 삭제하고, 다음 디렉터리를 삭제합니다.
/etc/kubernetes
/etc/cni/net.d
/root/.kube
/var/lib/kubelet
부하 분산기 노드에서 bmctl
도 다음 작업을 수행합니다.
keepalived
및haproxy
서비스 사용 중지keepalived
및haproxy
의 구성 파일 삭제
재설정 도구는 클러스터 구성 파일이 현재 작업 디렉터리의 다음 위치에 있을 것으로 예상합니다.
bmctl-workspace/cluster name/cluster name.yaml