如果某个集群存在问题,您可以从 Cloud Customer Care 获取帮助。Customer Care 可能会要求您截取集群的“快照”,可用于诊断问题。快照会捕获集群和节点配置文件,并将该信息打包为一个 tar 文件。
本文档介绍如何创建集群的默认快照或更多自定义快照,还介绍了在集群出现特定错误时如何创建快照。
默认快照
以下部分介绍了标准快照中的内容以及如何创建标准快照。如需了解自定义快照,请参阅自定义快照部分。
默认快照包含哪些信息?
集群的快照是一个有关该集群的配置文件和日志的 tar 文件。具体而言,该命令的默认配置会捕获有关集群的以下信息:
Kubernetes 版本
kubenetes 资源在 kube-system 和 gke-system 命名空间中的状态:集群、机器、节点、服务、端点、ConfigMap、ReplicaSet、CronJob、Pod 以及这些 Pod 的所有者,包括 Deployment、DaemonSet 和 StatefulSet
有关每个节点配置的详细信息,包括 IP 地址、iptables 规则、装载点、文件系统、网络连接,以及正在运行的进程
来自
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 存储桶。 - 为服务帐号授予
storage.admin
角色,以便服务帐号能够将数据上传到 Cloud Storage。 - 下载服务帐号的 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 文件包含集群的系统组件和机器的相关调试信息。
执行此命令时,系统会从以下命名空间收集有关 Pod 的信息:gke-system
、gke-connect
、capi-system
、capi-webhook-system
、cert-manager
和 capi-kubeadm-bootstrap-system
但是,您可以使用 --snapshot-scenario all
标志扩大收集的诊断信息的范围。此标志会将诊断快照的范围扩大为包含集群中的所有 Pod:
bmctl check cluster --snapshot --snapshot-scenario all \
--cluster=CLUSTER_NAME \
--kubeconfig=KUBECONFIG_PATH
快照场景
bmctl check cluster --snapshot
命令支持两种场景。要指定场景,请使用 --scenario
标志。以下列表显示了可能的值:
system
:收集系统组件的快照,包括其日志。all
:收集所有 Pod 的快照,包括其日志。
您可以为管理员集群或用户集群使用每一种场景。例如,要使用 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 日志。