이 문서에서는 gkectl diagnose
를 사용하여 클러스터의 문제를 진단하는 방법을 보여줍니다.
개요
gkectl
도구에는 gkectl diagnose cluster
및 gkectl diagnose snapshot
등 문제를 해결하는 데 사용할 수 있는 두 가지 명령어가 있습니다. 명령어는 관리자 클러스터와 사용자 클러스터 모두에서 작동합니다.
gkectl diagnose cluster
클러스터에서 상태 확인을 수행하고 오류를 보고합니다. 다음 구성요소에서 상태 확인을 실행합니다.
- VCenter
- 사용자 인증 정보
- DRS
- 안티어피니티 그룹
- 네트워크
- 버전
- 데이터센터
- Datastore
- 리소스 풀
- 폴더
- 네트워크
- 부하 분산기 (F5, Seesaw, 수동)
- 사용자 클러스터 및 노드 풀
- 클러스터 객체
- 사용자 클러스터의 Konnectivity 서버 준비
- 머신 객체 및 해당 클러스터 노드
- kube-system 및 gke-system 네임스페이스의 포드
- 제어 영역
- 클러스터의 vSphere 영구 볼륨
- 사용자 및 관리자 클러스터 vCPU(가상 CPU)와 메모리 경합 신호
- 사용자 및 관리자 클러스터 ESXi가 사전 구성된 호스트 CPU 사용량 및 메모리 사용량 경보
- 하루 중 특정 시간(TOD)
- Dataplane V2가 사용 설정된 클러스터의 노드 네트워크 정책
- Dataplane V2 노드 에이전트의 전반적인 상태
gkectl diagnose snapshot
이 명령어는 클러스터의 상태, 구성, 로그를 tarball 파일 하나로 압축합니다. gkectl diagnose snapshot
을 실행할 경우 이 명령어는 자동으로 gkectl diagnose cluster
를 프로세스의 일부로 실행하고 출력 파일이 /diagnose-report
라는 스냅샷의 새 폴더에 배치됩니다.
gkectl diagnose snapshot
명령어 기본 구성에는 클러스터에 대한 다음 정보가 포함됩니다.
Kubernetes 버전
kube-system 및 gke-system 네임스페이스의 Kubernetes 리소스 상태: 클러스터, 머신, 노드, 서비스, 엔드포인트, ConfigMap, ReplicaSet, CronJob, 포드, 이러한 포드 소유자, 배포, DaemonSet, StatefulSet
제어 영역 상태
IP 주소, iptable 규칙, 마운트 지점, 파일 시스템, 네트워크 연결, 실행 중인 프로세스를 포함한 각 노드 구성에 대한 세부정보
Kubernetes API server를 사용할 수 없는 경우 관리자 클러스터의 제어 영역 노드의 컨테이너 로그
리소스 풀 기반의 VM 객체 및 해당 이벤트를 포함한 vSphere 정보. VM과 연결된 데이터 센터, 클러스터, 네트워크, Datastore 객체
가상 서버, 가상 주소, 풀, 노드, 모니터를 포함한 F5 BIG-IP 부하 분산기 정보
gkectl diagnose snapshot
명령어의 로그실행 전 작업 로그
시나리오를 기반 네임스페이스 내 컨테이너의 로그
스냅샷 파일
/nodes/<admin_master_node_name>/sudo_kubeadm_certs_check-expiration
의 관리자 클러스터 Kubernetes 인증서 만료 정보스냅샷에 있는 모든 파일의 HTML 색인 파일
원하는 경우
--config
플래그를 사용하여 클러스터를 설치하고 업그레이드하는 데 사용되는 관리자 클러스터 구성 파일
vSphere 및 F5 사용자 인증 정보를 포함한 사용자 인증 정보는 tarball이 생성되기 전에 삭제됩니다.
도움 받기
사용 가능한 명령어에 대한 도움말을 확인하려면 다음 안내를 따르세요.
gkectl diagnose --help
관리자 클러스터 진단
관리자 클러스터를 진단하려면 다음 안내를 따르세요.
gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
ADMIN_CLUSTER_KUBECONFIG를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.
출력 예시:
Preparing for the diagnose tool... Diagnosing the cluster......DONE - Validation Category: Admin Cluster Connectivity Checking VMs TOD (availability)...SUCCESS Checking Konnectivity Server (readiness)...SUCCESS - Validation Category: Admin Cluster F5 BIG-IP Checking f5 (credentials, partition)...SUCCESS - Validation Category: Admin Cluster VCenter Checking Credentials...SUCCESS Checking DRS enabled...SUCCESS Checking Hosts for AntiAffinityGroups...SUCCESS Checking Version...SUCCESS Checking Datacenter...SUCCESS Checking Datastore...SUCCESS Checking Resource pool...SUCCESS Checking Folder...SUCCESS Checking Network...SUCCESS - Validation Category: Admin Cluster Checking cluster object...SUCCESS Checking machine deployment...SUCCESS Checking machineset...SUCCESS Checking machine objects...SUCCESS Checking kube-system pods...SUCCESS Checking anthos-identity-service pods...SUCCESS Checking storage...SUCCESS Checking resource...SUCCESS Checking virtual machine resource contention...SUCCESS Checking host resource contention...SUCCESS All validation results were SUCCESS. Cluster is healthy!
대상 클러스터에 가상 IP 주소(VIP) 문제가 있으면 --config
플래그를 사용하여 관리자 클러스터 구성 파일을 제공합니다. 이를 통해 디버깅 정보를 더 많이 제공할 수 있습니다.
gkectl diagnose cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config CLUSTER_CONFIG
CLUSTER_CONFIG를 관리자 또는 사용자 클러스터 구성 파일의 경로로 바꿉니다.
출력 예시:
Failed to access the api server via LB VIP "...": ... Try to use the admin master IP instead of problematic VIP... Reading config with version "[CONFIG_VERSION]" Finding the admin master VM... Fetching the VMs in the resource pool "[RESOURCE_POOL_NAME]"... Found the "[ADMIN_MASTER_VM_NAME]" is the admin master VM. Diagnosing admin|user cluster "[TARGET_CLUSTER_NAME]"... ...
사용자 클러스터 진단
사용자 클러스터 이름을 가져오려면 다음 명령어를 실행합니다.
kubectl get cluster --kubeconfig=USER_CLUSTER_KUBECONFIG
USER_CLUSTER_KUBECONFIG를 사용자 클러스터 kubeconfig 파일 경로로 바꿉니다.
사용자 클러스터를 진단하려면 다음 명령어를 실행합니다.
gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
USER_CLUSTER_NAME를 사용자 클러스터 이름으로 바꿉니다.
출력 예시:
Preparing for the diagnose tool... Diagnosing the cluster......DONE Diagnose result is saved successfully in- Validation Category: User Cluster Connectivity Checking Node Network Policy...SUCCESS Checking VMs TOD (availability)...SUCCESS Checking Dataplane-V2...Success - Validation Category: User Cluster F5 BIG-IP Checking f5 (credentials, partition)...SUCCESS - Validation Category: User Cluster VCenter Checking Credentials...SUCCESS Checking DRS enabled...SUCCESS Checking Hosts for AntiAffinityGroups...SUCCESS Checking VSphere CSI Driver...SUCCESS Checking Version...SUCCESS Checking Datacenter...SUCCESS Checking Datastore...SUCCESS Checking Resource pool...SUCCESS Checking Folder...SUCCESS Checking Network...SUCCESS - Validation Category: User Cluster Checking user cluster and node pools...SUCCESS Checking cluster object...SUCCESS Checking machine deployment...SUCCESS Checking machineset...SUCCESS Checking machine objects...SUCCESS Checking control plane pods...SUCCESS Checking kube-system pods...SUCCESS Checking gke-system pods...SUCCESS Checking gke-connect pods...SUCCESS Checeking anthos-identity-service pods...SUCCESS Checking storage...SUCCESS Checking resource...SUCCESS Checking virtual machine resource contention...SUCCESS Checking host resource contention...SUCCESS All validation results were SUCCESS. Cluster is healthy!
진단된 클러스터 문제 해결
gkectl diagnose cluster
를 실행할 때 다음 문제가 발생하는 경우 가능한 해결 방법은 아래와 같습니다.
문제 | 가능한 원인 | 해결 방법 |
---|---|---|
관리자 클러스터 또는 사용자 클러스터에서 Kubernetes API 서버에 연결할 수 없습니다. | 가상 머신 상태 OOB(Out-Of-Box) 메모리 지연 시간 그래프를 확인하세요. 메모리 지연 시간이 0에 가까우면 이상적입니다. 메모리 경합은 CPU 경합을 증가시킬 수도 있으며, 스와핑이 포함되어 있기 때문에 CPU 준비 상태 그래프가 급증할 수 있습니다. | 물리적 메모리를 늘리세요. 다른 옵션은 VMware 문제 해결 제안을 참조하세요. |
노드 풀 생성 시간이 타임아웃됩니다. | VMDK 높은 읽기/쓰기 지연 시간. 가상 디스크 읽기 및 쓰기 지연 시간의 VM 상태 OOB를 확인하세요. VMware에 따르면 총 지연 시간이 20ms보다 긴 경우 문제가 있는 것입니다. | 디스크 성능 문제에 대한 VMware 솔루션을 참조하세요. |
클러스터 상태 캡처
gkectl diagnose cluster
가 오류를 찾으면 클러스터 상태를 캡처하고 정보를 Google에 제공해야 합니다. 이렇게 하려면 gkectl diagnose snapshot
명령어를 사용합니다.
gkectl diagnose snapshot
에는 선택적 플래그인 --config
가 있습니다. 이 플래그는 클러스터에 대한 정보 수집 외에도 클러스터를 만들거나 업그레이드하는 데 사용된 VMware용 GKE 구성 파일을 수집합니다.
관리자 클러스터 상태 캡처
관리자 클러스터 상태를 캡처하려면 다음 명령어를 실행합니다. 여기서 --config
는 선택사항입니다.
gkectl diagnose snapshot --kubeconfig=[ADMIN_CLUSTER_KUBECONFIG] --config
출력에는 파일 목록과 tarball 파일 이름이 포함됩니다.
Taking snapshot of admin cluster "[ADMIN_CLUSTER_NAME]"... Using default snapshot configuration... Setting up "[ADMIN_CLUSTER_NAME]" ssh key file...DONE Taking snapshots... commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_kube-system ... nodes/[ADMIN_CLUSTER_NODE]/commands/journalctl_-u_kubelet nodes/[ADMIN_CLUSTER_NODE]/files/var/log/startup.log ... Snapshot succeeded. Output saved in [TARBALL_FILE_NAME].tar.gz.디렉터리에 tarball 파일을 추출하려면 다음 명령어를 실행합니다.
tar -zxf TARBALL_FILE_NAME --directory EXTRACTION_DIRECTORY_NAME
스냅샷에서 생성된 파일 목록을 보려면 다음 명령어를 실행합니다.
cd EXTRACTION_DIRECTORY_NAME/EXTRACTED_SNAPSHOT_DIRECTORY ls kubectlCommands ls nodes/NODE_NAME/commands ls nodes/NODE_NAME/files
특정 작업의 세부정보를 보려면 파일 중 하나를 엽니다.
관리자 클러스터의 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
출력에는 파일 목록과 tarball 파일 이름이 포함됩니다.
Taking snapshot of user cluster "[USER_CLUSTER_NAME]"... Using default snapshot configuration... Setting up "[USER_CLUSTER_NAME]" ssh key file...DONE commands/kubectl_get_pods_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user commands/kubectl_get_deployments_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_...env.default.kubeconfig_--namespace_user ... commands/kubectl_get_pods_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system commands/kubectl_get_deployments_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system commands/kubectl_get_daemonsets_-o_yaml_--kubeconfig_.tmp.user-kubeconfig-851213064_--namespace_kube-system ... nodes/[USER_CLUSTER_NODE]/commands/journalctl_-u_kubelet nodes/[USER_CLUSTER_NODE]/files/var/log/startup.log ... Snapshot succeeded. Output saved in [FILENAME].tar.gz.
스냅샷 시나리오
gkectl diagnose snapshot
명령어는 사용자 클러스터에 대해 두 가지 시나리오를 지원합니다. 시나리오를 지정하려면 --scenario
플래그를 사용합니다. 다음 목록에는 가능한 값이 나와 있습니다.
시스템(기본값): 지원되는 시스템 네임스페이스의 로그가 있는 스냅샷을 수집합니다.
모두: 사용자 정의 네임스페이스를 포함한 모든 네임스페이스의 로그를 사용하여 스냅샷을 수집합니다.
다음 예시는 몇 가지 가능성을 보여줍니다.
관리자 클러스터의 스냅샷을 만들려면 시나리오를 지정할 필요가 없습니다.
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
DURATION를 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
출력은 다음과 비슷합니다.
numOfParallelThreads: 10 excludeWords: - password kubectlCommands: - commands: - kubectl get clusters -o wide - kubectl get machines -o wide - kubectl get clusters -o yaml - kubectl get machines -o yaml - kubectl describe clusters - kubectl describe machines namespaces: - default - commands: - kubectl version - kubectl cluster-info - kubectl get nodes -o wide - kubectl get nodes -o yaml - kubectl describe nodes namespaces: [] - commands: - kubectl get pods -o wide - kubectl get deployments -o wide - kubectl get daemonsets -o wide - kubectl get statefulsets -o wide - kubectl get replicasets -o wide - kubectl get services -o wide - kubectl get jobs -o wide - kubectl get cronjobs -o wide - kubectl get endpoints -o wide - kubectl get configmaps -o wide - kubectl get pods -o yaml - kubectl get deployments -o yaml - kubectl get daemonsets -o yaml - kubectl get statefulsets -o yaml - kubectl get replicasets -o yaml - kubectl get services -o yaml - kubectl get jobs -o yaml - kubectl get cronjobs -o yaml - kubectl get endpoints -o yaml - kubectl get configmaps -o yaml - kubectl describe pods - kubectl describe deployments - kubectl describe daemonsets - kubectl describe statefulsets - kubectl describe replicasets - kubectl describe services - kubectl describe jobs - kubectl describe cronjobs - kubectl describe endpoints - kubectl describe configmaps namespaces: - kube-system - gke-system - gke-connect.* prometheusRequests: [] nodeCommands: - nodes: [] commands: - uptime - df --all --inodes - ip addr - sudo iptables-save --counters - mount - ip route list table all - top -bn1 - sudo docker ps -a - ps -edF - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup - sudo conntrack --count nodeFiles: - nodes: [] files: - /proc/sys/fs/file-nr - /proc/sys/net/nf_conntrack_max seesawCommands: [] seesawFiles: [] nodeCollectors: - nodes: [] f5: enabled: true vCenter: enabled: true
numOfParallelThreads
: 스냅샷을 만드는 데 사용된 동시 스레드 수입니다.excludeWords
: 스냅샷에서 제외할 단어 목록입니다(대소문자를 구분하지 않음). 이러한 단어가 포함된 줄은 스냅샷 결과에서 삭제됩니다. 'password'는 지정 여부와 관계없이 항상 제외됩니다.kubectlCommands
: 실행할 kubectl 명령어의 목록입니다. 결과가 저장됩니다. 명령어는 해당 네임스페이스에서 실행됩니다.kubectl logs
명령어의 경우 해당 네임스페이스의 모든 포드와 컨테이너가 자동으로 추가됩니다. 네임스페이스 지정에 정규 표현식이 지원됩니다. 네임스페이스를 지정하지 않으면default
네임스페이스가 가정됩니다.nodeCommands
: 해당 노드에서 실행할 명령어 목록입니다. 결과가 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.nodeFiles
: 해당 노드에서 수집할 파일의 목록입니다. 파일이 저장됩니다. 노드가 지정되지 않으면 대상 클러스터의 모든 노드가 고려됩니다.seesawCommands
: Seesaw 부하 분산기 정보를 수집하기 위해 실행할 명령어 목록입니다. 클러스터가 Seesaw 부하 분산기를 사용하면 결과가 저장됩니다.seesawFiles
: Seesaw 부하 분산기를 위해 수집할 파일 목록입니다.nodeCollectors
: eBPF 정보를 수집하기 위해 Cilium 노드를 위해 실행하는 수집기입니다.f5
: F5 BIG-IP 부하 분산기와 관련된 정보 수집을 사용 설정하는 플래그입니다.vCenter
: vCenter와 관련된 정보를 수집할 수 있는 플래그입니다.prometheusRequests
: Prometheus 요청 목록입니다. 결과가 저장됩니다.
Cloud Storage 버킷에 스냅샷 업로드
기록 보관, 분석, 스토리지를 간편하게 수행하기 위해 특정 클러스터의 모든 스냅샷을 Cloud Storage 버킷에 업로드할 수 있습니다. Cloud Customer Care의 도움이 필요한 경우에 특히 유용합니다.
명령어를 실행하기 전에 다음 설정 요구사항을 충족하는지 확인하세요.
Fleet 호스트 프로젝트에서
storage.googleapis.com
을 사용 설정합니다. 다른 프로젝트를 사용해도 되지만 Fleet 호스트 프로젝트를 사용하는 것이 좋습니다.gcloud services enable --project=FLEET_HOST_PROJECT_ID storage.googleapis.com
roles/storage.admin
를 상위 프로젝트의 서비스 계정에 부여하고--service-account-key-file
매개변수를 사용하여 서비스 계정 JSON 키 파일을 전달합니다. 모든 서비스 계정을 사용할 수 있지만 연결 등록 서비스 계정을 사용하는 것이 좋습니다. 자세한 내용은 서비스 계정을 참조하세요.gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT" \ --role "roles/storage.admin"
CONNECT_REGISTER_SERVICE_ACCOUNT를 연결 등록 서비스 계정으로 바꿉니다.
이러한 요구사항을 충족하는 경우 다음 명령어로 스냅샷을 업로드할 수 있습니다.
gkectl diagnose snapshot --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name CLUSTER_NAME \ --upload \ --share-with GOOGLE_SUPPORT_SERVICE_ACCOUNT
--share-with
플래그는 서비스 계정 이름 목록을 허용할 수 있습니다. GOOGLE_SUPPORT_SERVICE_ACCOUNT를 Google 지원에서 제공하는 Google 지원 서비스 계정과 Google 지원에서 제공하는 다른 서비스 계정으로 바꿉니다. --upload
플래그를 사용하면 명령어가 프로젝트에서 이름이 "anthos-snapshot-
"으로 시작하는 스토리지 버킷을 검색합니다. 이러한 버킷이 있으면 명령어가 스냅샷을 해당 버킷에 업로드합니다. 명령어로 이름이 일치하는 버킷을 찾을 수 없으면 이름이 anthos-snapshot-UUID
인 새 버킷을 만듭니다. 여기서 UUID
는 32자리의 범용 고유 식별자입니다.
--share-with
플래그를 사용할 때는 버킷에 대한 액세스 권한을 Google Cloud 지원팀과 수동으로 공유할 필요가 없습니다.
출력 예시:
Using "system" snapshot configuration... Taking snapshot of user cluster CLUSTER_NAME... Setting up CLUSTER_NAME ssh key...DONE Using the gke-connect register service account key... Setting up Google Cloud Storage bucket for uploading the snapshot...DONE Taking snapshots in 10 thread(s)... ... Snapshot succeeded. Snapshots saved in "SNAPSHOT_FILE_PATH". Uploading snapshot to Google Cloud Storage...... DONE Uploaded the snapshot successfully to gs://anthos-snapshot-a4b17874-7979-4b6a-a76d-e49446290282/xSNAPSHOT_FILE_NAME. Shared successfully with service accounts: GOOGLE_SUPPORT_SERVICE_ACCOUNT
알려진 문제
BundleUnexpectedDiff
오류
VMware용 GKE 번들에서 관리하는 Kubernetes Cluster API 리소스가 실수로 수정될 수 있으며 이로 인해 시스템 구성요소에 장애가 발생하거나 클러스터 업그레이드 또는 업데이트가 실패할 수 있습니다.
VMware용 GKE 버전 1.13에서 onprem-user-cluster-controller
는 주기적으로 객체 상태를 확인하고 로그와 이벤트를 통해 원하는 상태와 예기치 않은 차이를 보고합니다. 이러한 객체에는 사용자 클러스터 제어 영역과 서비스 및 DaemonSets과 같은 부가기능이 포함됩니다.
다음은 이벤트 예시입니다.
Type Reason Age From Message ---- ------ ---- ---- ------- Warning BundleUnexpectedDiff 13m onpremusercluster/ci-bundle-diff Detected unexpected difference of user control plane objects: [ConfigMap/istio], please check onprem-user-cluster-controller logs for more details.
다음은 onprem-user-cluster-controller
에서 생성한 로그의 예시입니다.
2022-08-06T02:54:42.701352295Z W0806 02:54:42.701252 1 update.go:206] Detected unexpected difference of user addon object(ConfigMap/istio), Diff: map[string]string{ 2022-08-06T02:54:42.701376406Z - "mesh": ( 2022-08-06T02:54:42.701381190Z - """ 2022-08-06T02:54:42.701385438Z - defaultConfig: 2022-08-06T02:54:42.701389350Z - discoveryAddress: istiod.gke-system.svc:15012 ... 2022-08-06T02:54:42.701449954Z - """ 2022-08-06T02:54:42.701453099Z - ), 2022-08-06T02:54:42.701456286Z - "meshNetworks": "networks: {}", 2022-08-06T02:54:42.701459304Z + "test-key": "test-data", 2022-08-06T02:54:42.701462434Z }
이벤트와 로그가 클러스터 작업을 차단하지 않습니다. 다음 클러스터 업그레이드에서 원하는 상태와 예기치 않은 차이가 있는 객체를 덮어씁니다.