您可以诊断或检查集群以调试问题并捕获集群状态的快照。此外,如果安装部分成功,但集群返回错误或者没有正确运行,您可以尝试重置集群。
使用 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 Hub 成员资格注册,然后清理受影响的节点。 重置期间,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