×

关于 must-gather 工具

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

收集有关您的集群的信息以供 Red Hat 支持使用

您可以使用 `oc adm must-gather` CLI 命令收集有关您的集群的调试信息。

先决条件
  • 您可以作为具有 `cluster-admin` 角色的用户访问集群。

  • 已安装 OpenShift CLI (oc)。

步骤
  1. 导航到要存储 `must-gather` 数据的目录。

  2. 运行 `oc adm must-gather` 命令

    $ oc adm must-gather

    因为此命令默认选择一个随机的控制平面节点,所以 Pod 可能会调度到处于 `NotReady` 和 `SchedulingDisabled` 状态的控制平面节点。

    1. 如果此命令失败(例如,如果无法在集群上调度 Pod),请使用 `oc adm inspect` 命令来收集特定资源的信息。

      请联系 Red Hat 支持以获取建议收集的资源。

  3. 从刚刚在工作目录中创建的 `must-gather` 目录创建一个压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令

    $ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ (1)
    1 请务必将 `must-gather-local.5421342344627712289/` 替换为实际的目录名称。
  4. 将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例中。

Must-gather 标志

下表列出了可与 `oc adm must-gather` 命令一起使用的标志。

表 1. Red Hat OpenShift Service on AWS 的 `oc adm must-gather` 标志
标志 示例命令 描述

--all-images

oc adm must-gather --all-images=false

使用默认镜像为集群上所有用 `operators.openshift.io/must-gather-image` 注释的 Operator 收集 `must-gather` 数据。

--dest-dir

oc adm must-gather --dest-dir='<directory_name>'

设置本地计算机上用于写入收集数据的特定目录。

--host-network

oc adm must-gather --host-network=false

must-gather pod 作为 hostNetwork: true 运行。如果特定命令和镜像需要捕获主机级数据,则相关。

--image

oc adm must-gather --image=[<plugin_image>]

指定要运行的must-gather 插件镜像。如果未指定,则使用 Red Hat OpenShift Service on AWS 的默认 must-gather 镜像。

--image-stream

oc adm must-gather --image-stream=[<image_stream>]

使用包含要运行的must-gather 插件镜像的命名空间或 name:tag 值来指定<image_stream>

--node-name

oc adm must-gather --node-name='<node>'

设置要使用的特定节点。如果未指定,则默认使用随机主节点。

--node-selector

oc adm must-gather --node-selector='<node_selector_name>'

设置要使用的特定节点选择器。仅当指定需要同时捕获一组集群节点上数据的命令和镜像时才相关。

--run-namespace

oc adm must-gather --run-namespace='<namespace>'

must-gather pod 应运行的现有特权命名空间。如果未指定,则会生成一个临时命名空间。

--since

oc adm must-gather --since=<time>

仅返回比指定持续时间新的日志。默认为所有日志。鼓励但不要求插件支持此功能。只能使用一个since-timesince

--since-time

oc adm must-gather --since-time='<date_and_time>'

仅返回特定日期和时间(以 (RFC3339) 格式表示)之后的日志。默认为所有日志。鼓励但不要求插件支持此功能。只能使用一个since-timesince

--source-dir

oc adm must-gather --source-dir='/<directory_name>/'

设置 pod 上用于复制收集数据的特定目录。

--timeout

oc adm must-gather --timeout='<time>'

收集数据并在超时前的时间长度,以秒、分钟或小时表示,例如 3s、5m 或 2h。指定的时间必须大于零。如果未指定,则默认为 10 分钟。

--volume-percentage

oc adm must-gather --volume-percentage=<percent>

指定可用于must-gather 的 pod 已分配卷的最大百分比。如果超过此限制,must-gather 将停止收集,但仍会复制收集的数据。如果未指定,则默认为 30%。

收集有关特定功能的数据

您可以使用带有--image--image-stream 参数的oc adm must-gather CLI 命令来收集有关特定功能的调试信息。must-gather 工具支持多个镜像,因此您可以通过运行单个命令来收集有关多个功能的数据。

表 2. 支持的 must-gather 镜像
镜像 用途

registry.redhat.io/container-native-virtualization/cnv-must-gather-rhel9:v4.17.3

OpenShift Virtualization 的数据收集。

registry.redhat.io/openshift-serverless-1/svls-must-gather-rhel8

OpenShift Serverless 的数据收集。

registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8:<installed_version_service_mesh>

Red Hat OpenShift Service Mesh 的数据收集。

registry.redhat.io/rhmtc/openshift-migration-must-gather-rhel8:v<installed_version_migration_toolkit>

容器迁移工具包的数据收集。

registry.redhat.io/openshift-logging/cluster-logging-rhel9-operator:v<installed_version_logging>

日志记录的数据收集。

quay.io/netobserv/must-gather

网络可观测性操作符的数据收集。

registry.redhat.io/openshift4/ose-csi-driver-shared-resource-mustgather-rhel8

OpenShift 共享资源 CSI 驱动程序的数据收集。

registry.redhat.io/openshift-gitops-1/must-gather-rhel8:v<installed_version_GitOps>

Red Hat OpenShift GitOps 的数据收集。

registry.redhat.io/openshift4/ose-secrets-store-csi-mustgather-rhel8:v<installed_version_secret_store>

Secrets Store CSI 驱动程序操作符的数据收集。

要确定 Red Hat OpenShift Service on AWS 组件镜像的最新版本,请参阅 Red Hat 客户门户网站上的 OpenShift 运算符生命周期 网页。

先决条件
  • 您可以作为具有 `cluster-admin` 角色的用户访问集群。

  • 已安装 OpenShift CLI (oc)。

步骤
  1. 导航到要存储 `must-gather` 数据的目录。

  2. 使用一个或多个--image--image-stream 参数运行oc adm must-gather 命令。

    • 要除了特定功能数据之外还收集默认的must-gather 数据,请添加--image-stream=openshift/must-gather 参数。

    例如,以下命令同时收集默认的集群数据和与 OpenShift Virtualization 相关的特定信息

    $ 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 Red Hat OpenShift Service on AWS 的默认 must-gather 镜像
    2 OpenShift Virtualization 的 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}')
    OpenShift Logging 的示例 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
          ├── ...
  3. 使用一个或多个--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 Red Hat OpenShift Service on AWS 的默认 must-gather 镜像
    2 KubeVirt 的 must-gather 镜像
  4. 从刚刚在工作目录中创建的 `must-gather` 目录创建一个压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令

    $ tar cvaf must-gather.tar.gz must-gather.local.5421342344627712289/ (1)
    1 请务必将 `must-gather-local.5421342344627712289/` 替换为实际的目录名称。
  5. 将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例中。

其他资源

收集网络日志

您可以收集集群中所有节点上的网络日志。

步骤
  1. 使用--gather_network_logs 运行oc adm must-gather 命令

    $ oc adm must-gather -- gather_network_logs

    默认情况下,must-gather 工具会从集群中的所有节点收集 OVN nbdbsbdb 数据库。添加--gather_network_logs 选项以包含包含 OVN nbdb 数据库的 OVN-Kubernetes 事务的其他日志。

  2. 从刚刚在工作目录中创建的 `must-gather` 目录创建一个压缩文件。例如,在使用 Linux 操作系统的计算机上,运行以下命令

    $ tar cvaf must-gather.tar.gz must-gather.local.472290403699006248 (1)
    1 must-gather-local.472290403699006248 替换为实际的目录名。
  3. 将压缩文件附加到 Red Hat 客户门户网站的 客户支持页面 上的支持案例中。

更改 must-gather 存储限制

使用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>

获取您的集群 ID

向 Red Hat 支持团队提供信息时,提供集群的唯一标识符非常有用。您可以使用 AWS Web 控制台上的 Red Hat OpenShift 服务自动填充集群 ID。您也可以使用 Web 控制台或 OpenShift CLI(oc)手动获取集群 ID。

先决条件
  • 您可以作为具有 dedicated-admin 角色的用户访问集群。

  • 您可以访问 Web 控制台或已安装 OpenShift CLI(oc)。

步骤
  • 要使用OpenShift 集群管理器手动获取您的集群 ID

    1. 导航到**集群列表**。

    2. 点击您需要为其打开支持案例的集群名称。

    3. 在**概述**选项卡的**详细信息**部分的**集群 ID**字段中查找该值。

  • 要使用 Web 控制台打开支持案例并自动填充集群 ID

    1. 从工具栏导航到(?) 帮助,然后从列表中选择分享反馈

    2. 告诉我们您的体验窗口中点击打开支持案例

  • 要使用 Web 控制台手动获取您的集群 ID

    1. 导航到主页概述

    2. 该值可在**详细信息**部分的**集群 ID**字段中找到。

  • 要使用 OpenShift CLI(oc)获取您的集群 ID,请运行以下命令

    $ oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}'

查询集群节点日志

您可以收集单个集群节点上的 journald 单元日志以及 /var/log 中的其他日志。

先决条件
  • 您可以作为具有 `cluster-admin` 角色的用户访问集群。

  • 您已安装 OpenShift CLI(oc)。

步骤
  1. 查询 AWS 集群节点上 Red Hat OpenShift 服务的 kubelet journald 单元日志。以下示例仅查询控制平面节点

    $ oc adm node-logs --role=master -u kubelet  (1)
    1 根据需要替换 kubelet 以查询其他单元日志。
  2. 从集群节点上的 /var/log/ 下的特定子目录收集日志。

    1. 检索 /var/log/ 子目录中包含的日志列表。以下示例列出所有控制平面节点上的 /var/log/openshift-apiserver/ 中的文件

      $ oc adm node-logs --role=master --path=openshift-apiserver
    2. 检查 /var/log/ 子目录中的特定日志。以下示例输出所有控制平面节点上的 /var/log/openshift-apiserver/audit.log 内容

      $ oc adm node-logs --role=master --path=openshift-apiserver/audit.log

网络跟踪方法

收集网络跟踪(以数据包捕获记录的形式)可以帮助 Red Hat 支持团队排查网络问题。

AWS 上的 Red Hat OpenShift 服务支持两种执行网络跟踪的方法。查看下表并选择满足您需求的方法。

表 3. 支持的网络跟踪收集方法
方法 优势和功能

收集主机网络跟踪

您可以在一个或多个节点上同时执行您指定持续时间的包捕获。当满足指定的持续时间时,包捕获文件将从节点传输到客户端机器。

您可以排查为什么特定操作会触发网络通信问题。运行包捕获,执行触发问题的操作,然后使用日志诊断问题。

从 AWS 节点或容器上的 Red Hat OpenShift 服务收集网络跟踪

您在一个节点或一个容器上执行包捕获。您以交互方式运行 tcpdump 命令,因此您可以控制包捕获的持续时间。

您可以手动启动包捕获,触发网络通信问题,然后手动停止包捕获。

此方法使用 cat 命令和 shell 重定向将包捕获数据从节点或容器复制到客户端机器。

收集主机网络跟踪

有时,通过跟踪网络通信并在多个节点上同时捕获数据包来简化网络相关问题的排查。

您可以结合使用 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 传输到您的客户端机器。

以下步骤中的示例命令演示了使用 tcpdump 命令执行数据包捕获。但是,您可以在 --image 参数中指定的容器镜像中运行任何命令,以同时从多个节点收集故障排除信息。

先决条件
  • 您已以具有 cluster-admin 角色的用户身份登录到 AWS 上的 Red Hat OpenShift 服务。

  • 您已安装 OpenShift CLI(oc)。

步骤
  1. 通过运行以下命令,从某些节点的主机网络运行数据包捕获

    $ 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 参数指定在所有网络接口上捕获数据包。或者,您可以指定网络接口名称。
  2. 执行触发网络通信问题的操作(例如访问 Web 应用程序),同时网络跟踪捕获数据包。

  3. 查看 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 参数,则主机名的目录级别不存在。

从 AWS 节点或容器中收集 Red Hat OpenShift Service on AWS 的网络跟踪

在调查 Red Hat OpenShift Service on AWS 的潜在网络问题时,Red Hat 支持团队可能会要求您提供来自特定 Red Hat OpenShift Service on AWS 集群节点或特定容器的网络数据包跟踪。在 Red Hat OpenShift Service on AWS 中捕获网络跟踪的推荐方法是通过调试 Pod。

先决条件
  • 您可以作为具有 `cluster-admin` 角色的用户访问集群。

  • 您已安装 OpenShift CLI(oc)。

  • 您已拥有现有的 Red Hat 支持案例 ID。

步骤
  1. 获取集群节点列表

    $ oc get nodes
  2. 进入目标节点的调试会话。此步骤会实例化一个名为 <node_name>-debug 的调试 Pod。

    $ oc debug node/my-cluster-node
  3. /host 设置为调试 shell 中的根目录。调试 Pod 将主机的根文件系统挂载到 Pod 内的 /host。通过将根目录更改为 /host,您可以运行主机可执行路径中包含的二进制文件。

    # chroot /host
  4. chroot 环境控制台中,获取节点的接口名称。

    # ip ad
  5. 启动一个 toolbox 容器,其中包含运行 sosreport 所需的二进制文件和插件。

    # toolbox

    如果已存在运行的 toolbox Pod,则 toolbox 命令会输出 'toolbox-' already exists. Trying to start…​。为避免 tcpdump 问题,请使用 podman rm toolbox- 删除正在运行的 toolbox 容器,并启动一个新的 toolbox 容器。

  6. 在集群节点上启动 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
  7. 如果需要针对节点上的特定容器进行 tcpdump 捕获,请按照以下步骤操作。

    1. 确定目标容器 ID。由于 toolbox 容器将主机的根目录挂载到 /host,因此此步骤中 chroot host 命令位于 crictl 命令之前。

      # chroot /host crictl ps
    2. 确定容器的进程 ID。在此示例中,容器 ID 为 a7fe32346b120

      # chroot /host crictl inspect --output yaml a7fe32346b120 | grep 'pid' | awk '{print $2}'
    3. 在容器上启动 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
  8. 使用以下方法之一,将 tcpdump 捕获文件提供给 Red Hat 支持团队进行分析。

    • 直接从 Red Hat OpenShift Service on AWS 集群将文件上传到现有的 Red Hat 支持案例。

      1. 在 toolbox 容器内,运行 redhat-support-tool 将文件直接附加到现有的 Red Hat 支持案例。此示例使用支持案例 ID 01234567

        # 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 支持案例。

      1. 通过运行 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
      2. 在 Red Hat 客户门户的 客户支持页面中导航到现有的支持案例。

      3. 选择附加文件,然后按照提示上传文件。

向 Red Hat 支持团队提供诊断数据

在调查 Red Hat OpenShift Service on AWS 问题时,Red Hat 支持团队可能会要求您将诊断数据上传到支持案例。可以通过 Red Hat 客户门户或直接使用 redhat-support-tool 命令从 Red Hat OpenShift Service on AWS 集群将文件上传到支持案例。

先决条件
  • 您可以作为具有 `cluster-admin` 角色的用户访问集群。

  • 您已安装 OpenShift CLI(oc)。

  • 您已拥有现有的 Red Hat 支持案例 ID。

步骤
  • 通过 Red Hat 客户门户将诊断数据上传到现有的 Red Hat 支持案例。

    1. 使用 oc debug node/<node_name> 命令连接 Red Hat OpenShift Service on AWS 节点上的诊断文件并将输出重定向到文件。以下示例将 /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
    2. 在 Red Hat 客户门户的 客户支持页面中导航到现有的支持案例。

    3. 选择附加文件,然后按照提示上传文件。

关于 toolbox

toolbox 是一种在 Red Hat Enterprise Linux CoreOS (RHCOS) 系统上启动容器的工具。该工具主要用于启动包含运行 sosreportredhat-support-tool 等命令所需二进制文件和插件的容器。

toolbox 容器的主要目的是收集诊断信息并将其提供给 Red Hat 支持团队。但是,如果需要其他诊断工具,您可以添加 RPM 包或运行作为标准支持工具映像的替代方案的映像。

将软件包安装到 toolbox 容器

默认情况下,运行 toolbox 命令会使用 registry.redhat.io/rhel9/support-tools:latest 映像启动容器。此映像包含最常用的支持工具。如果您需要收集需要支持工具(该工具不属于映像的一部分)的节点特定数据,则可以安装其他软件包。

先决条件
  • 您已使用 oc debug node/<node_name> 命令访问节点。

  • 您可以以具有 root 权限的用户身份访问您的系统。

步骤
  1. /host 设置为调试 shell 中的根目录。调试 Pod 将主机的根文件系统挂载到 Pod 内的 /host。通过将根目录更改为 /host,您可以运行主机可执行路径中包含的二进制文件。

    # chroot /host
  2. 启动 toolbox 容器

    # toolbox
  3. 安装附加软件包,例如 wget

    # dnf install -y <package_name>

使用 toolbox 启动替代映像

默认情况下,运行 toolbox 命令会使用 registry.redhat.io/rhel9/support-tools:latest 映像启动容器。

您可以通过创建 .toolboxrc 文件并指定要运行的映像来启动替代映像。但是,在 Red Hat OpenShift Service on AWS 上不支持运行旧版本的 support-tools 映像,例如 registry.redhat.io/rhel8/support-tools:latest

先决条件
  • 您已使用 oc debug node/<node_name> 命令访问节点。

  • 您可以以具有 root 权限的用户身份访问您的系统。

步骤
  1. /host 设置为调试 shell 中的根目录。调试 Pod 将主机的根文件系统挂载到 Pod 内的 /host。通过将根目录更改为 /host,您可以运行主机可执行路径中包含的二进制文件。

    # chroot /host
  2. 可选:如果您需要使用替代映像而不是默认映像,请在 root 用户 ID 的主目录中创建一个 .toolboxrc 文件,并指定映像元数据。

    REGISTRY=quay.io             (1)
    IMAGE=fedora/fedora:latest   (2)
    TOOLBOX_NAME=toolbox-fedora-latest  (3)
    1 可选:指定替代容器注册表。
    2 指定一个替代启动图像。
    3 可选:为工具箱容器指定一个替代名称。
  3. 输入以下命令启动工具箱容器:

    # toolbox

    如果已存在正在运行的toolbox pod,则toolbox命令会输出'toolbox-' already exists. Trying to start…​。为避免sosreport插件出现问题,请使用podman rm toolbox-移除正在运行的工具箱容器,然后启动一个新的工具箱容器。