$ oc adm must-gather \
--image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel9:v4.17.3
打开支持案例时,向 Red Hat 支持提供有关集群的调试信息将非常有帮助。
建议提供
oc adm must-gather
命令行界面 (CLI) 命令会收集集群中可能需要用于调试问题的信息,包括:
资源定义
服务日志
默认情况下,oc adm must-gather
命令使用默认插件镜像并将数据写入 ./must-gather.local
。
或者,您可以使用适当的参数运行该命令来收集特定信息,如下节所述。
要收集与一个或多个特定功能相关的数据,请使用带有镜像的 --image
参数,如下一节所列。
例如:
$ oc adm must-gather \
--image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel9:v4.17.3
要收集审计日志,请使用 -- /usr/bin/gather_audit_logs
参数,如下节所述。
例如:
$ oc adm must-gather -- /usr/bin/gather_audit_logs
为了减小文件大小,审计日志不包含在默认信息集中。 |
运行 oc adm must-gather
时,会在集群上的新项目中创建一个具有随机名称的新 Pod。数据将在该 Pod 上收集,并保存在当前工作目录中以 must-gather.local
开头的新的目录中。
例如:
NAMESPACE NAME READY STATUS RESTARTS AGE
...
openshift-must-gather-5drcj must-gather-bklx4 2/2 Running 0 72s
openshift-must-gather-5drcj must-gather-s8sdh 2/2 Running 0 72s
...
可以选择使用 --run-namespace
选项在特定命名空间中运行 oc adm must-gather
命令。
例如:
$ oc adm must-gather --run-namespace <namespace> \
--image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel9:v4.17.3
您可以使用 oc adm must-gather
CLI 命令收集有关集群的调试信息。
您可以作为具有 cluster-admin
角色的用户访问集群。
已安装 OpenShift Container Platform 命令行界面 (oc
)。
导航到要存储 must-gather
数据的目录。
如果您的集群位于脱机环境中,则必须执行其他步骤。如果您的镜像注册表具有受信任的 CA,则必须首先将受信任的 CA 添加到集群。对于脱机环境中的所有集群,您必须将默认的
|
运行 oc adm must-gather
命令
$ oc adm must-gather
如果您处于脱机环境,请使用 |
由于此命令默认情况下会选择一个随机的控制平面节点,因此 Pod 可能被调度到处于 |
如果此命令失败(例如,如果无法在集群上调度 Pod),则使用 oc adm inspect
命令来收集特定资源的信息。
请联系 Red Hat 支持以获取建议收集的资源。 |
从刚刚在工作目录中创建的 must-gather
目录创建压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令:
$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ (1)
1 | 请务必将 must-gather-local.5421342344627712289/ 替换为实际的目录名称。 |
将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例。
下表列出了可用于 oc adm must-gather
命令的标志。
标志 | 示例命令 | 描述 |
---|---|---|
|
|
使用集群上所有标注有 |
|
|
设置本地计算机上写入收集数据的特定目录。 |
|
|
将 |
|
|
指定要运行的 |
|
|
使用包含 |
|
|
设置要使用的特定节点。如果未指定,则默认使用随机主节点。 |
|
|
设置要使用的特定节点选择器。仅当指定需要同时在集群节点集上捕获数据的命令和镜像时才相关。 |
|
|
|
|
|
仅返回比指定持续时间更新的日志。默认为所有日志。鼓励但不要求插件支持此功能。只能使用一个 |
|
|
仅返回特定日期和时间之后的日志,以 (RFC3339) 格式表示。默认为所有日志。鼓励但不要求插件支持此功能。只能使用一个 |
|
|
设置 pod 上复制收集数据的特定目录。 |
|
|
收集数据在超时之前的时间长度,以秒、分钟或小时表示,例如 3s、5m 或 2h。指定的时间必须大于零。如果未指定,则默认为 10 分钟。 |
|
|
指定可用于 |
您可以使用带有 --image
或 --image-stream
参数的 oc adm must-gather
CLI 命令收集有关特定功能的调试信息。must-gather
工具支持多个镜像,因此您可以通过运行单个命令来收集有关多个功能的数据。
镜像 | 用途 |
---|---|
|
OpenShift Virtualization 的数据收集。 |
|
OpenShift Serverless 的数据收集。 |
|
Red Hat OpenShift Service Mesh 的数据收集。 |
|
容器迁移工具包的数据收集。 |
|
Red Hat OpenShift Data Foundation 的数据收集。 |
|
日志收集。 |
|
网络可观测性操作符的数据收集。 |
|
OpenShift共享资源CSI驱动程序的数据收集。 |
|
本地存储操作符的数据收集。 |
|
用于{sandboxed-containers-first}的数据收集。 |
|
用于Red Hat工作负载可用性操作符的数据收集,包括自节点修复(SNR)操作符、栅栏代理修复(FAR)操作符、机器删除修复(MDR)操作符、节点健康检查操作符(NHC)操作符和节点维护操作符(NMO)操作符。 |
|
NUMA资源操作符(NRO)的数据收集。 |
|
PTP操作符的数据收集。 |
|
Red Hat OpenShift GitOps的数据收集。 |
|
Secrets Store CSI驱动程序操作符的数据收集。 |
|
LVM操作符的数据收集。 |
|
合规性操作符的数据收集。 |
要确定OpenShift Container Platform组件镜像的最新版本,请参阅Red Hat客户门户网站上的OpenShift操作符生命周期网页。 |
您可以作为具有 cluster-admin
角色的用户访问集群。
已安装 OpenShift Container Platform 命令行界面 (oc
)。
导航到要存储 must-gather
数据的目录。
使用一个或多个--image
或--image-stream
参数运行oc adm must-gather
命令。
|
例如,以下命令同时收集默认的集群数据和OpenShift虚拟化相关信息
$ oc adm must-gather \
--image-stream=openshift/must-gather \ (1)
--image=registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel9:v4.17.3 (2)
1 | 默认的OpenShift Container Platform must-gather 镜像 |
2 | OpenShift虚拟化的must-gather镜像 |
您可以使用must-gather
工具和附加参数来收集与集群中的OpenShift Logging和Red Hat OpenShift Logging Operator特别相关的数据。对于OpenShift Logging,请运行以下命令
$ oc adm must-gather --image=$(oc -n openshift-logging get deployment.apps/cluster-logging-operator \
-o jsonpath='{.spec.template.spec.containers[?(@.name == "cluster-logging-operator")].image}')
must-gather
示例输出├── cluster-logging
│ ├── clo
│ │ ├── cluster-logging-operator-74dd5994f-6ttgt
│ │ ├── clusterlogforwarder_cr
│ │ ├── cr
│ │ ├── csv
│ │ ├── deployment
│ │ └── logforwarding_cr
│ ├── collector
│ │ ├── fluentd-2tr64
│ ├── eo
│ │ ├── csv
│ │ ├── deployment
│ │ └── elasticsearch-operator-7dc7d97b9d-jb4r4
│ ├── es
│ │ ├── cluster-elasticsearch
│ │ │ ├── aliases
│ │ │ ├── health
│ │ │ ├── indices
│ │ │ ├── latest_documents.json
│ │ │ ├── nodes
│ │ │ ├── nodes_stats.json
│ │ │ └── thread_pool
│ │ ├── cr
│ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms
│ │ └── logs
│ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms
│ ├── install
│ │ ├── co_logs
│ │ ├── install_plan
│ │ ├── olmo_logs
│ │ └── subscription
│ └── kibana
│ ├── cr
│ ├── kibana-9d69668d4-2rkvz
├── cluster-scoped-resources
│ └── core
│ ├── nodes
│ │ ├── ip-10-0-146-180.eu-west-1.compute.internal.yaml
│ └── persistentvolumes
│ ├── pvc-0a8d65d9-54aa-4c44-9ecc-33d9381e41c1.yaml
├── event-filter.html
├── gather-debug.log
└── namespaces
├── openshift-logging
│ ├── apps
│ │ ├── daemonsets.yaml
│ │ ├── deployments.yaml
│ │ ├── replicasets.yaml
│ │ └── statefulsets.yaml
│ ├── batch
│ │ ├── cronjobs.yaml
│ │ └── jobs.yaml
│ ├── core
│ │ ├── configmaps.yaml
│ │ ├── endpoints.yaml
│ │ ├── events
│ │ │ ├── elasticsearch-im-app-1596020400-gm6nl.1626341a296c16a1.yaml
│ │ │ ├── elasticsearch-im-audit-1596020400-9l9n4.1626341a2af81bbd.yaml
│ │ │ ├── elasticsearch-im-infra-1596020400-v98tk.1626341a2d821069.yaml
│ │ │ ├── elasticsearch-im-app-1596020400-cc5vc.1626341a3019b238.yaml
│ │ │ ├── elasticsearch-im-audit-1596020400-s8d5s.1626341a31f7b315.yaml
│ │ │ ├── elasticsearch-im-infra-1596020400-7mgv8.1626341a35ea59ed.yaml
│ │ ├── events.yaml
│ │ ├── persistentvolumeclaims.yaml
│ │ ├── pods.yaml
│ │ ├── replicationcontrollers.yaml
│ │ ├── secrets.yaml
│ │ └── services.yaml
│ ├── openshift-logging.yaml
│ ├── pods
│ │ ├── cluster-logging-operator-74dd5994f-6ttgt
│ │ │ ├── cluster-logging-operator
│ │ │ │ └── cluster-logging-operator
│ │ │ │ └── logs
│ │ │ │ ├── current.log
│ │ │ │ ├── previous.insecure.log
│ │ │ │ └── previous.log
│ │ │ └── cluster-logging-operator-74dd5994f-6ttgt.yaml
│ │ ├── cluster-logging-operator-registry-6df49d7d4-mxxff
│ │ │ ├── cluster-logging-operator-registry
│ │ │ │ └── cluster-logging-operator-registry
│ │ │ │ └── logs
│ │ │ │ ├── current.log
│ │ │ │ ├── previous.insecure.log
│ │ │ │ └── previous.log
│ │ │ ├── cluster-logging-operator-registry-6df49d7d4-mxxff.yaml
│ │ │ └── mutate-csv-and-generate-sqlite-db
│ │ │ └── mutate-csv-and-generate-sqlite-db
│ │ │ └── logs
│ │ │ ├── current.log
│ │ │ ├── previous.insecure.log
│ │ │ └── previous.log
│ │ ├── elasticsearch-cdm-lp8l38m0-1-794d6dd989-4jxms
│ │ ├── elasticsearch-im-app-1596030300-bpgcx
│ │ │ ├── elasticsearch-im-app-1596030300-bpgcx.yaml
│ │ │ └── indexmanagement
│ │ │ └── indexmanagement
│ │ │ └── logs
│ │ │ ├── current.log
│ │ │ ├── previous.insecure.log
│ │ │ └── previous.log
│ │ ├── fluentd-2tr64
│ │ │ ├── fluentd
│ │ │ │ └── fluentd
│ │ │ │ └── logs
│ │ │ │ ├── current.log
│ │ │ │ ├── previous.insecure.log
│ │ │ │ └── previous.log
│ │ │ ├── fluentd-2tr64.yaml
│ │ │ └── fluentd-init
│ │ │ └── fluentd-init
│ │ │ └── logs
│ │ │ ├── current.log
│ │ │ ├── previous.insecure.log
│ │ │ └── previous.log
│ │ ├── kibana-9d69668d4-2rkvz
│ │ │ ├── kibana
│ │ │ │ └── kibana
│ │ │ │ └── logs
│ │ │ │ ├── current.log
│ │ │ │ ├── previous.insecure.log
│ │ │ │ └── previous.log
│ │ │ ├── kibana-9d69668d4-2rkvz.yaml
│ │ │ └── kibana-proxy
│ │ │ └── kibana-proxy
│ │ │ └── logs
│ │ │ ├── current.log
│ │ │ ├── previous.insecure.log
│ │ │ └── previous.log
│ └── route.openshift.io
│ └── routes.yaml
└── openshift-operators-redhat
├── ...
使用一个或多个--image
或--image-stream
参数运行oc adm must-gather
命令。例如,以下命令同时收集默认的集群数据和KubeVirt相关信息
$ oc adm must-gather \
--image-stream=openshift/must-gather \ (1)
--image=quay.io/kubevirt/must-gather (2)
1 | 默认的OpenShift Container Platform must-gather 镜像 |
2 | KubeVirt的must-gather镜像 |
从刚刚在工作目录中创建的 must-gather
目录创建压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令:
$ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ (1)
1 | 请务必将 must-gather-local.5421342344627712289/ 替换为实际的目录名称。 |
将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例。
收集调试数据用于自定义指标自动缩放器。
您可以收集集群中所有节点上的网络日志。
使用--gather_network_logs
运行oc adm must-gather
命令。
$ oc adm must-gather -- gather_network_logs
默认情况下, |
从刚刚在工作目录中创建的 must-gather
目录创建压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令:
$ tar cvaf must-gather.tar.gz must-gather.local.472290403699006248 (1)
1 | 将must-gather-local.472290403699006248 替换为实际的目录名称。 |
将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例。
使用oc adm must-gather
命令收集数据时,信息的默认最大存储空间为容器存储容量的30%。达到30%的限制后,容器将被终止,收集过程停止。已收集的信息将下载到您的本地存储。要再次运行must-gather命令,您需要一个具有更多存储容量的容器或调整最大卷百分比。
如果容器达到存储限制,则会生成类似于以下示例的错误消息。
Disk usage exceeds the volume percentage of 30% for mounted directory. Exiting...
您可以作为具有 cluster-admin
角色的用户访问集群。
已安装OpenShift CLI (oc
)。
使用volume-percentage
标志运行oc adm must-gather
命令。新值不能超过100。
$ oc adm must-gather --volume-percentage <storage_percentage>
向Red Hat支持提供信息时,提供集群的唯一标识符非常有用。您可以使用OpenShift Container Platform Web控制台自动填充集群ID。您也可以使用Web控制台或OpenShift CLI (oc
)手动获取集群ID。
您可以作为具有 cluster-admin
角色的用户访问集群。
您可以访问Web控制台或已安装OpenShift CLI (oc
)。
要打开支持案例并使用Web控制台自动填充集群ID
从工具栏导航到(?) 帮助,然后从列表中选择共享反馈。
从告诉我们您的体验窗口中点击打开支持案例。
要使用Web控制台手动获取集群ID
导航到主页→概述。
该值可在详细信息部分的集群ID字段中找到。
要使用OpenShift CLI (oc
)获取集群ID,请运行以下命令
$ oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}'
sosreport
是一个收集Red Hat Enterprise Linux (RHEL)和Red Hat Enterprise Linux CoreOS (RHCOS)系统的配置详细信息、系统信息和诊断数据的工具。sosreport
提供了一种标准化的方式来收集与节点相关的诊断信息,然后可以将其提供给Red Hat支持进行问题诊断。
在某些支持交互中,Red Hat支持可能会要求您为特定的OpenShift Container Platform节点收集sosreport
存档。例如,有时可能需要查看系统日志或oc adm must-gather
输出中未包含的其他节点特定数据。
为OpenShift Container Platform 4.17集群节点生成sosreport
的推荐方法是通过调试Pod。
您可以作为具有 cluster-admin
角色的用户访问集群。
您可以SSH访问您的主机。
您已安装OpenShift CLI (oc
)。
您拥有Red Hat标准或高级订阅。
您拥有Red Hat客户门户帐户。
您有现有的Red Hat支持案例ID。
获取集群节点列表
$ oc get nodes
进入目标节点的调试会话。此步骤会实例化一个名为<node_name>-debug
的调试Pod。
$ oc debug node/my-cluster-node
要进入带有NoExecute
效应的标记目标节点的调试会话,请向虚拟命名空间添加容忍度,并在虚拟命名空间中启动调试Pod。
$ oc new-project dummy
$ oc patch namespace dummy --type=merge -p '{"metadata": {"annotations": { "scheduler.alpha.kubernetes.io/defaultTolerations": "[{\"operator\": \"Exists\"}]"}}}'
$ oc debug node/my-cluster-node
将/host
设置为调试shell中的根目录。调试Pod在Pod中的/host
中挂载主机的根文件系统。通过将根目录更改为/host
,您可以运行包含在主机可执行路径中的二进制文件。
# chroot /host
运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Container Platform 4.17 集群节点是不可变的,并依赖于 Operators 来应用集群更改。不建议使用 SSH 访问集群节点。但是,如果 OpenShift Container Platform API 不可用,或者目标节点上的 kubelet 运行不正常,则 |
启动一个 toolbox
容器,其中包含运行 sosreport
所需的二进制文件和插件。
# toolbox
如果已存在正在运行的 |
收集一个 sosreport
归档文件。
运行 sosreport
命令以收集 crio
和 podman
的必要故障排除数据。
# sos report -k crio.all=on -k crio.logs=on -k podman.all=on -k podman.logs=on (1)
1 | -k 允许您定义 sosreport 插件参数,使其超出默认值。 |
可选:要在报告中包含节点上 OVN-Kubernetes 网络配置的信息,请运行以下命令:
# sos report --all-logs
出现提示时按Enter键继续。
提供 Red Hat 支持案例 ID。sosreport
会将 ID 添加到归档文件的名称中。
sosreport
输出提供了归档文件的路径和校验和。以下示例输出引用支持案例 ID 01234567
Your sosreport has been generated and saved in:
/host/var/tmp/sosreport-my-cluster-node-01234567-2020-05-28-eyjknxt.tar.xz (1)
The checksum is: 382ffc167510fd71b4f12a4f40b97a4e
1 | sosreport 归档文件的路径位于 chroot 环境之外,因为 toolbox 容器将主机的根目录挂载到 /host 。 |
使用以下方法之一,将 sosreport
归档文件提供给 Red Hat 支持部门进行分析。
直接从 OpenShift Container Platform 集群将文件上传到现有的 Red Hat 支持案例。
在 toolbox 容器内,运行 redhat-support-tool
将归档文件直接附加到现有的 Red Hat 支持案例。此示例使用支持案例 ID 01234567
# redhat-support-tool addattachment -c 01234567 /host/var/tmp/my-sosreport.tar.xz (1)
1 | toolbox 容器将主机的根目录挂载到 /host 。使用 redhat-support-tool 命令指定要上传的文件时,请参考从 toolbox 容器根目录开始的绝对路径,包括 /host/ 。 |
将文件上传到现有的 Red Hat 支持案例。
通过运行 oc debug node/<node_name>
命令并将输出重定向到文件来连接 sosreport
归档文件。此命令假设您已退出之前的 oc debug
会话。
$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/sosreport-my-cluster-node-01234567-2020-05-28-eyjknxt.tar.xz' > /tmp/sosreport-my-cluster-node-01234567-2020-05-28-eyjknxt.tar.xz (1)
1 | 调试容器将主机的根目录挂载到 /host 。指定要连接的目标文件时,请参考从调试容器根目录开始的绝对路径,包括 /host 。 |
运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Container Platform 4.17 集群节点是不可变的,并依赖于 Operators 来应用集群更改。不建议使用 |
在 Red Hat 客户门户的客户支持页面中导航到现有的支持案例。
选择附加文件,然后按照提示上传文件。
如果遇到与引导相关的問題,您可以从引导节点收集 bootkube.service
journald
单元日志和容器日志。
您可以访问引导节点的 SSH。
您拥有引导节点的完全限定域名。
在 OpenShift Container Platform 安装期间,从引导节点查询 bootkube.service
journald
单元日志。将 <bootstrap_fqdn>
替换为引导节点的完全限定域名。
$ ssh core@<bootstrap_fqdn> journalctl -b -f -u bootkube.service
引导节点上的 |
使用引导节点上的 podman
收集引导节点容器的日志。将 <bootstrap_fqdn>
替换为引导节点的完全限定域名。
$ ssh core@<bootstrap_fqdn> 'for pod in $(sudo podman ps -a -q); do sudo podman logs $pod; done'
您可以收集各个集群节点上 journald
单元日志和 /var/log
中的其他日志。
您可以作为具有 cluster-admin
角色的用户访问集群。
您已安装OpenShift CLI (oc
)。
您的 API 服务仍在运行。
您可以SSH访问您的主机。
查询 OpenShift Container Platform 集群节点上的 kubelet
journald
单元日志。以下示例仅查询控制平面节点。
$ oc adm node-logs --role=master -u kubelet (1)
1 | 根据需要替换 kubelet 以查询其他单元日志。 |
收集集群节点上 /var/log/
下特定子目录中的日志。
检索 /var/log/
子目录中包含的日志列表。以下示例列出所有控制平面节点上 /var/log/openshift-apiserver/
中的文件。
$ oc adm node-logs --role=master --path=openshift-apiserver
检查 /var/log/
子目录中的特定日志。以下示例输出所有控制平面节点上的 /var/log/openshift-apiserver/audit.log
内容。
$ oc adm node-logs --role=master --path=openshift-apiserver/audit.log
如果 API 无法运行,请改用 SSH 检查每个节点上的日志。以下示例尾随 /var/log/openshift-apiserver/audit.log
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo tail -f /var/log/openshift-apiserver/audit.log
运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Container Platform 4.17 集群节点是不可变的,并依赖于 Operators 来应用集群更改。不建议使用 SSH 访问集群节点。在尝试通过 SSH 收集诊断数据之前,请检查运行 |
收集网络跟踪(以数据包捕获记录的形式)可以帮助 Red Hat 支持部门排除网络问题。
OpenShift Container Platform 支持两种执行网络跟踪的方法。查看下表并选择满足您需求的方法。
方法 | 优点和功能 |
---|---|
收集主机网络跟踪 |
您可以同时在一个或多个节点上执行指定持续时间的网络数据包捕获。达到指定的持续时间后,网络数据包捕获文件将从节点传输到客户端计算机。 您可以排查为什么特定操作会触发网络通信问题。运行数据包捕获,执行触发问题的操作,并使用日志来诊断问题。 |
从 OpenShift Container Platform 节点或容器收集网络跟踪 |
您可以在一个节点或一个容器上执行数据包捕获。您可以交互式地运行 您可以手动启动数据包捕获,触发网络通信问题,然后手动停止数据包捕获。 此方法使用 |
有时,通过跟踪网络通信并在多个节点上同时捕获数据包可以简化网络相关问题的故障排除。
您可以结合使用oc adm must-gather
命令和registry.redhat.io/openshift4/network-tools-rhel8
容器镜像从节点收集数据包捕获。分析数据包捕获可以帮助您排除网络通信问题。
oc adm must-gather
命令用于在特定节点上的Pod中运行tcpdump
命令。tcpdump
命令记录Pod中的数据包捕获。当tcpdump
命令退出时,oc adm must-gather
命令将包含数据包捕获的文件从Pod传输到您的客户端机器。
以下步骤中的示例命令演示了如何使用 |
您已以具有cluster-admin
角色的用户身份登录到OpenShift Container Platform。
您已安装OpenShift CLI (oc
)。
通过运行以下命令,从某些节点的主机网络运行数据包捕获
$ oc adm must-gather \
--dest-dir /tmp/captures \ (1)
--source-dir '/tmp/tcpdump/' \ (2)
--image registry.redhat.io/openshift4/network-tools-rhel8:latest \ (3)
--node-selector 'node-role.kubernetes.io/worker' \ (4)
--host-network=true \ (5)
--timeout 30s \ (6)
-- \
tcpdump -i any \ (7)
-w /tmp/tcpdump/%Y-%m-%dT%H:%M:%S.pcap -W 1 -G 300
1 | --dest-dir 参数指定oc adm must-gather 将数据包捕获存储在客户端机器上相对于/tmp/captures 的目录中。您可以指定任何可写入的目录。 |
2 | 当在oc adm must-gather 启动的调试Pod中运行tcpdump 时,--source-dir 参数指定数据包捕获临时存储在Pod上的/tmp/tcpdump 目录中。 |
3 | --image 参数指定包含tcpdump 命令的容器镜像。 |
4 | --node-selector 参数和示例值指定在工作节点上执行数据包捕获。或者,您可以改为指定--node-name 参数以在单个节点上运行数据包捕获。如果您同时省略--node-selector 和--node-name 参数,则将在所有节点上执行数据包捕获。 |
5 | --host-network=true 参数是必需的,以便在节点的网络接口上执行数据包捕获。 |
6 | --timeout 参数和值指定调试Pod运行30秒。如果您没有指定--timeout 参数和持续时间,则调试Pod将运行10分钟。 |
7 | tcpdump 命令的-i any 参数指定在所有网络接口上捕获数据包。或者,您可以指定网络接口名称。 |
执行操作(例如访问 Web 应用程序),该操作会在网络跟踪捕获数据包时触发网络通信问题。
查看oc adm must-gather
从Pod传输到客户端机器的数据包捕获文件
tmp/captures
├── event-filter.html
├── ip-10-0-192-217-ec2-internal (1)
│ └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
│ └── 2022-01-13T19:31:31.pcap
├── ip-10-0-201-178-ec2-internal (1)
│ └── registry-redhat-io-openshift4-network-tools-rhel8-sha256-bca...
│ └── 2022-01-13T19:31:30.pcap
├── ip-...
└── timestamp
1 | 数据包捕获存储在标识主机名、容器和文件名的目录中。如果您没有指定--node-selector 参数,则主机名的目录级别不存在。 |
在调查潜在的与网络相关的OpenShift Container Platform问题时,Red Hat支持可能需要来自特定OpenShift Container Platform集群节点或特定容器的网络数据包跟踪。在OpenShift Container Platform中捕获网络跟踪的推荐方法是通过调试Pod。
您可以作为具有 cluster-admin
角色的用户访问集群。
您已安装OpenShift CLI (oc
)。
您有现有的Red Hat支持案例ID。
您拥有Red Hat标准或高级订阅。
您拥有Red Hat客户门户帐户。
您可以SSH访问您的主机。
获取集群节点列表
$ oc get nodes
进入目标节点的调试会话。此步骤会实例化一个名为<node_name>-debug
的调试Pod。
$ oc debug node/my-cluster-node
将/host
设置为调试shell中的根目录。调试Pod在Pod中的/host
中挂载主机的根文件系统。通过将根目录更改为/host
,您可以运行包含在主机可执行路径中的二进制文件。
# chroot /host
运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Container Platform 4.17 集群节点是不可变的,并依赖于 Operators 来应用集群更改。不建议使用 SSH 访问集群节点。但是,如果 OpenShift Container Platform API 不可用,或者目标节点上的 kubelet 运行不正常,则 |
在chroot
环境控制台中,获取节点的接口名称
# ip ad
启动一个 toolbox
容器,其中包含运行 sosreport
所需的二进制文件和插件。
# toolbox
如果已经运行了现有的 |
在集群节点上启动tcpdump
会话并将输出重定向到捕获文件。此示例使用ens5
作为接口名称
$ tcpdump -nn -s 0 -i ens5 -w /host/var/tmp/my-cluster-node_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap (1)
1 | tcpdump 捕获文件的路径位于chroot 环境之外,因为toolbox容器在/host 处挂载主机的根目录。 |
如果需要针对节点上的特定容器进行tcpdump
捕获,请按照以下步骤操作。
确定目标容器ID。此步骤中chroot host
命令位于crictl
命令之前,因为toolbox容器在/host
处挂载主机的根目录
# chroot /host crictl ps
确定容器的进程ID。在此示例中,容器ID为a7fe32346b120
# chroot /host crictl inspect --output yaml a7fe32346b120 | grep 'pid' | awk '{print $2}'
在容器上启动tcpdump
会话并将输出重定向到捕获文件。此示例使用49628
作为容器的进程ID,并使用ens5
作为接口名称。nsenter
命令进入目标进程的命名空间并在其命名空间中运行命令。因为此示例中的目标进程是容器的进程ID,所以tcpdump
命令是从主机在容器的命名空间中运行的
# nsenter -n -t 49628 -- tcpdump -nn -i ens5 -w /host/var/tmp/my-cluster-node-my-container_$(date +%d_%m_%Y-%H_%M_%S-%Z).pcap (1)
1 | tcpdump 捕获文件的路径位于chroot 环境之外,因为toolbox容器在/host 处挂载主机的根目录。 |
使用以下方法之一,向Red Hat支持提供tcpdump
捕获文件以进行分析。
直接从 OpenShift Container Platform 集群将文件上传到现有的 Red Hat 支持案例。
在toolbox容器中,运行redhat-support-tool
以将文件直接附加到现有的Red Hat支持案例。此示例使用支持案例ID01234567
# redhat-support-tool addattachment -c 01234567 /host/var/tmp/my-tcpdump-capture-file.pcap (1)
1 | toolbox 容器将主机的根目录挂载到 /host 。使用 redhat-support-tool 命令指定要上传的文件时,请参考从 toolbox 容器根目录开始的绝对路径,包括 /host/ 。 |
将文件上传到现有的 Red Hat 支持案例。
通过运行 oc debug node/<node_name>
命令并将输出重定向到文件来连接 sosreport
归档文件。此命令假设您已退出之前的 oc debug
会话。
$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-tcpdump-capture-file.pcap' > /tmp/my-tcpdump-capture-file.pcap (1)
1 | 调试容器将主机的根目录挂载到 /host 。指定要连接的目标文件时,请参考从调试容器根目录开始的绝对路径,包括 /host 。 |
运行Red Hat Enterprise Linux CoreOS (RHCOS) 的OpenShift Container Platform 4.17集群节点是不可变的,并且依赖于Operators来应用集群更改。不建议使用 |
在 Red Hat 客户门户的客户支持页面中导航到现有的支持案例。
选择附加文件,然后按照提示上传文件。
在调查OpenShift Container Platform问题时,Red Hat支持可能会要求您将诊断数据上传到支持案例。可以通过Red Hat客户门户或直接使用redhat-support-tool
命令从OpenShift Container Platform集群将文件上传到支持案例。
您可以作为具有 cluster-admin
角色的用户访问集群。
您已安装OpenShift CLI (oc
)。
您可以SSH访问您的主机。
您拥有Red Hat标准或高级订阅。
您拥有Red Hat客户门户帐户。
您有现有的Red Hat支持案例ID。
通过Red Hat客户门户将诊断数据上传到现有的Red Hat支持案例。
使用oc debug node/<node_name>
命令连接OpenShift Container Platform节点上包含的诊断文件,并将输出重定向到文件。以下示例将/host/var/tmp/my-diagnostic-data.tar.gz
从调试容器复制到/var/tmp/my-diagnostic-data.tar.gz
$ oc debug node/my-cluster-node -- bash -c 'cat /host/var/tmp/my-diagnostic-data.tar.gz' > /var/tmp/my-diagnostic-data.tar.gz (1)
1 | 调试容器将主机的根目录挂载到 /host 。指定要连接的目标文件时,请参考从调试容器根目录开始的绝对路径,包括 /host 。 |
运行Red Hat Enterprise Linux CoreOS (RHCOS) 的OpenShift Container Platform 4.17集群节点是不可变的,并且依赖于Operators来应用集群更改。不建议使用 |
在 Red Hat 客户门户的客户支持页面中导航到现有的支持案例。
选择附加文件,然后按照提示上传文件。
toolbox
toolbox
是一个在Red Hat Enterprise Linux CoreOS (RHCOS)系统上启动容器的工具。该工具主要用于启动包含运行sosreport
和redhat-support-tool
等命令所需的二进制文件和插件的容器。
toolbox
容器的主要目的是收集诊断信息并将其提供给Red Hat支持。但是,如果需要其他诊断工具,您可以添加RPM包或运行作为标准支持工具镜像的替代方案的镜像。
toolbox
容器默认情况下,运行toolbox
命令会启动一个使用registry.redhat.io/rhel9/support-tools:latest
镜像的容器。此镜像包含最常用的支持工具。如果您需要收集需要镜像中不包含的支持工具的节点特定数据,则可以安装其他软件包。
您已使用oc debug node/
命令访问了一个节点。
您可以以具有 root 权限的用户身份访问您的系统。
将/host
设置为调试shell中的根目录。调试Pod在Pod中的/host
中挂载主机的根文件系统。通过将根目录更改为/host
,您可以运行包含在主机可执行路径中的二进制文件。
# chroot /host
启动 toolbox 容器
# toolbox
安装附加软件包,例如wget
# dnf install -y <package_name>
toolbox
启动替代镜像默认情况下,运行toolbox
命令会启动一个使用registry.redhat.io/rhel9/support-tools:latest
镜像的容器。
您可以通过创建一个 |
您已使用oc debug node/
命令访问了一个节点。
您可以以具有 root 权限的用户身份访问您的系统。
将/host
设置为调试shell中的根目录。调试Pod在Pod中的/host
中挂载主机的根文件系统。通过将根目录更改为/host
,您可以运行包含在主机可执行路径中的二进制文件。
# chroot /host
可选:如果您需要使用替代镜像而不是默认镜像,请在 root 用户 ID 的主目录中创建一个.toolboxrc
文件,并指定镜像元数据。
REGISTRY=quay.io (1)
IMAGE=fedora/fedora:latest (2)
TOOLBOX_NAME=toolbox-fedora-latest (3)
1 | 可选:指定替代容器注册表。 |
2 | 指定要启动的替代镜像。 |
3 | 可选:为 toolbox 容器指定替代名称。 |
输入以下命令启动 toolbox 容器
# toolbox
如果已存在运行中的 |