诊断集群问题。

本页面适用于基础架构运维者

本页面介绍如何在 Anthos 不公开模式下使用 actl 命令行工具诊断集群问题。diagnose 命令会生成一个归档文件,其中包含一组捕获集群状态的日志。

简介

您可以使用 actl diagnose 命令捕获集群的状态。诊断信息可帮助您更高效地发现问题和调试部署。该命令会捕获您定义的范围的所有相关集群和节点配置文件,然后将信息打包到一个 tar 归档文件中。您可以通过该命令的标志选择命令的诊断范围。

actl diagnose

使用 actl diagnose 命令排查集群问题。此命令会将集群的状态、配置和日志压缩成 tar 文件。此命令的默认配置会捕获集群的以下信息:

  • Kubernetes 版本
  • kube-system 和 APM 的控制器命名空间中的 Kubernetes 资源的状态:集群、机器、节点、服务、端点、ConfigMap、ReplicaSet、CronJob、Pod 以及这些 Pod 的所有者,包括 Deployment、DaemonSet 和 StatefulSet。
  • 如果目标集群是用户集群(用户集群的控制层面在管理员集群中运行),则为用户控制层面的状态。
  • 有关每个节点配置的详细信息,包括 IP 地址、iptables 规则、装载点、文件系统、网络连接,以及正在运行的进程。
  • 管理员集群的控制层面节点的容器日志(当 Kubernetes API 服务器不可用时)。
  • Istio 系统中的信息,包括 pod、Service、Deployment、端点、Secret、configmap、所有 Istio 组件和 Sidecar 当前和以前的日志以及所有 Istio 配置工件。
  • Config Sync 中的信息,包括 config-management-system 相关命名空间中的配置。
  • 来自 actl diagnose 命令的日志。

根据场景创建快照

actl diagnose 命令支持六种场景。要指定场景,请使用 --scenario 标志为以下任意配置收集快照:

  • all:(默认)包括所有预定义的场景,包括:auth、config-management、kubernetes、management-center、observability 和 service-mesh。
  • auth
  • config-management
  • kubernetes
  • management-center
  • 可监测性
  • service-mesh

您可以为管理员集群使用以上每一个场景。如需使用 all 场景创建管理员集群的快照,请运行下命令:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG\
    --cluster=CLUSTER_NAME\
    --scenario=all

请替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群的 kubeconfig 文件。
  • (可选)CLUSTER_NAME:管理员集群的名称。如果您不知道集群名称,请省略此标志,系统将提示您选择要截取快照的集群。

输出包括文件列表和 tar 文件的名称。

Using ["all"] snapshot configuration...
? Choose a cluster (namespace/name) cluster-admin/admin
Taking snapshots in 10 thread(s)...
  kubectlCommands/anthos-management-center-operator/kubectl_get_updateitems
  kubectlCommands/kubectl_cluster-info
  kubectlCommands/kubectl_version
  kubectlCommands/anthos-management-center/kubectl_logs_git-server-0_--container_git-server_--since_24h0m0s
  kubectlCommands/anthos-management-center/kubectl_get_deployments
  ...
  nodes/10.200.0.5/files/lib/systemd/system/docker.service
  nodes/10.200.0.4/files/lib/systemd/system/docker.service
  ...
  istioCommands/istioctl_bug-report

Snapshot succeeded.
Snapshots saved in "[TAR_FILE_PATH]/[TAR_FILE_NAME].tar.gz".

限制快照的时间段

您可以使用 --log-since 标志将日志收集限制为最近的时间段。例如,您可以收集过去两天或过去三小时的日志。默认情况下,diagnose 会收集过去 24 小时的日志。仅 kubectl 日志支持此标志。

要限制日志收集的时间段,请执行以下操作:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --scenario=all \
    --log-since=DURATION

DURATION 替换为时间值,例如 2d 或 3h。默认时间段为 24 小时。

对快照执行试运行

您可以使用 --dry-run 标志来显示要执行的操作和快照配置。

要在管理员集群上执行试运行,请输入以下命令:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --dry-run

自定义快照配置

如果这六个场景不能满足您的需求,您可以创建自定义快照。您可以生成配置并将其复制和粘贴到新的配置文件中,也可以从头开始创建配置文件。然后,您可以通过自定义配置文件创建快照。

选项 1:生成快照配置

您可以通过传入 --scenario--dry-run 标志为给定场景生成快照配置。例如,如需查看集群的 all(默认)场景的快照配置,请输入以下命令:

actl diagnose \
    --scenario=all  \
    --dry-run

以下是输出示例:

ExcludeWords:
- certificateAuthorityData
- password
IstioBugReport:
  Enabled: true
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system
NodeCommands:
- Commands:
  - uptime
  - df --all --inodes
  - ip addr
  - iptables-save --counters
  - mount
  - ip route list table all
  - top -bn1
  - docker info
  - docker ps -a
  - ps -edF
  - ps -eo pid,tid,ppid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args,cgroup
  - conntrack --count
  Nodes: []
NodeFiles:
- Files:
  - /proc/sys/fs/file-nr
  - /proc/sys/net/netfilter/nf_conntrack_max
  - /lib/systemd/system/kubelet.service
  - /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
  - /lib/systemd/system/docker.service
  - /etc/docker/daemon.json
  Nodes: []
NomosBugReport:
  Enabled: true
NumOfParallelThreads: 10

您可以从命令行界面复制此命令的输出,并将其粘贴到您创建的新配置文件中,例如 myconfig.yaml。您可以修改以下值:

  • ExcludeWords:要从快照中排除的字词列表(不区分大小写)。系统会从快照结果中移除包含这些字词的行。无论您是否指定“password”,都始终会将其排除。
  • IstioBugReport:用于启用 istioctl bug-report 快照的标志。
  • KubectlCommands:要运行的 kubectl 命令的列表。这些命令将针对相应的命名空间运行。对于 kubectl logs 命令,系统会自动添加相应命名空间中的所有 pod 和容器。支持使用正则表达式指定命名空间。如果未指定命名空间,则假定为 default 命名空间。
  • NodeCommands:要在相应节点上运行的命令列表。系统会保存结果。未指定节点时,将考虑目标集群中的所有节点。
  • NodeFiles:要从相应节点收集的文件列表。系统会保存这些文件。未指定节点时,将考虑目标集群中的所有节点。
  • NomosBugReport:用于启用 nomos bugreport 快照的标志。
  • NumOfParallelThreads:用于截取快照的并行线程数。

选项 2:手动定义自定义快照配置文件

使用您需要的快照参数创建 YAML 文件,例如:

ExcludeWords:
- certificateAuthorityData
- password
NumOfParallelThreads: 10
KubectlCommands:
- Commands:
  - kubectl get deployments
  - kubectl get deployments -o yaml
  - kubectl get pods
  - kubectl get pods -o yaml
  - kubectl get secret
  - kubectl logs
  - kubectl get gateways -o yaml
  Namespaces:
  - istio-system

使用自定义快照配置创建快照

使用 --snapshot-config 标志传入自定义快照配置文件:

actl diagnose \
    --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
    --cluster=CLUSTER_NAME \
    --snapshot-config=SNAPSHOT_CONFIG_FILE

SNAPSHOT_CONFIG_FILE 替换为自定义快照配置文件的名称,例如 myconfig.yaml

查看快照内容

如需查看 tar 文件的内容,请使用以下命令解压:

tar -zxf TAR_FILE_PATHTAR_FILENAME.tar.gz  --directory EXTRACTION_DIRECTORY_NAME

请先查看 tar 文件的内容,然后在与支持人员的沟通中提供该文件。