4.9. Troubleshooting Operator 的问题
如果遇到 Operator 问题,请验证 Operator 订阅状态。检查集群中的 Operator pod 健康状况,并收集 Operator 日志以进行诊断。
4.9.1. operator 订阅状况类型 复制链接链接已复制到粘贴板!
订阅可报告以下状况类型:
状况 | 描述 |
---|---|
| 用于解析的一个或多个目录源不健康。 |
| 缺少订阅的安装计划。 |
| 订阅的安装计划正在安装中。 |
| 订阅的安装计划失败。 |
| 订阅的依赖项解析失败。 |
默认 OpenShift Dedicated 集群 Operator 由 Cluster Version Operator(CVO)管理,它们没有 Subscription
对象。应用程序 Operator 由 Operator Lifecycle Manager(OLM)管理,它们具有 Subscription
对象。
4.9.2. 使用 CLI 查看 Operator 订阅状态 复制链接链接已复制到粘贴板!
您可以使用 CLI 查看 Operator 订阅状态。
先决条件
-
您可以使用具有
dedicated-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
列出 Operator 订阅:
oc get subs -n <operator_namespace>
$ oc get subs -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc describe
命令检查Subscription
资源:oc describe sub <subscription_name> -n <operator_namespace>
$ oc describe sub <subscription_name> -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令输出中,找到 Operator 订阅状况类型的
Conditions
部分。在以下示例中,CatalogSourcesUnhealthy
条件类型具有false
状态,因为所有可用目录源都健康:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
默认 OpenShift Dedicated 集群 Operator 由 Cluster Version Operator(CVO)管理,它们没有 Subscription
对象。应用程序 Operator 由 Operator Lifecycle Manager(OLM)管理,它们具有 Subscription
对象。
4.9.3. 使用 CLI 查看 Operator 目录源状态 复制链接链接已复制到粘贴板!
您可以使用 CLI 查看 Operator 目录源的状态。
先决条件
-
您可以使用具有
dedicated-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
列出命名空间中的目录源。例如,您可以检查
openshift-marketplace
命名空间,该命名空间用于集群范围的目录源:oc get catalogsources -n openshift-marketplace
$ oc get catalogsources -n openshift-marketplace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc describe
命令获取有关目录源的详情和状态:oc describe catalogsource example-catalog -n openshift-marketplace
$ oc describe catalogsource example-catalog -n openshift-marketplace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在上例的输出中,最后观察到的状态是
TRANSIENT_FAILURE
。此状态表示目录源建立连接时出现问题。列出创建目录源的命名空间中的 pod:
oc get pods -n openshift-marketplace
$ oc get pods -n openshift-marketplace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命名空间中创建目录源时,会在该命名空间中为目录源创建一个 pod。在前面的示例中,
example-catalog-bwt8z
pod 的状态是ImagePullBackOff
。此状态表示拉取目录源的索引镜像存在问题。使用
oc describe
命令检查 pod 以获取更多详细信息:oc describe pod example-catalog-bwt8z -n openshift-marketplace
$ oc describe pod example-catalog-bwt8z -n openshift-marketplace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在前面的示例输出中,错误消息表示目录源的索引镜像因为授权问题而无法成功拉取。例如,索引镜像可能存储在需要登录凭证的 registry 中。
4.9.4. 查询 Operator pod 状态 复制链接链接已复制到粘贴板!
您可以列出集群中的 Operator pod 及其状态。您还可以收集详细的 Operator pod 概述。
先决条件
-
您可以使用具有
dedicated-admin
角色的用户访问集群。 - API 服务仍然可以正常工作。
-
已安装 OpenShift CLI(
oc
)。
流程
列出集群中运行的 Operator。输出包括 Operator 版本、可用性和运行时间信息:
oc get clusteroperators
$ oc get clusteroperators
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出在 Operator 命名空间中运行的 Operator pod,以及 pod 状态、重启和年龄:
oc get pod -n <operator_namespace>
$ oc get pod -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出详细的 Operator pod 概述:
oc describe pod <operator_pod_name> -n <operator_namespace>
$ oc describe pod <operator_pod_name> -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9.5. 收集 Operator 日志 复制链接链接已复制到粘贴板!
如果遇到 Operator 问题,您可以从 Operator pod 日志中收集详细诊断信息。
先决条件
-
您可以使用具有
dedicated-admin
角色的用户访问集群。 - API 服务仍然可以正常工作。
-
已安装 OpenShift CLI(
oc
)。 - 您有 control plane 或 control plane 机器的完全限定域名。
流程
列出在 Operator 命名空间中运行的 Operator pod,以及 pod 状态、重启和年龄:
oc get pods -n <operator_namespace>
$ oc get pods -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Operator pod 的日志:
oc logs pod/<pod_name> -n <operator_namespace>
$ oc logs pod/<pod_name> -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 Operator pod 具有多个容器,则上述命令将会产生一个错误,其中包含每个容器的名称。从独立容器查询日志:
oc logs pod/<operator_pod_name> -c <container_name> -n <operator_namespace>
$ oc logs pod/<operator_pod_name> -c <container_name> -n <operator_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 API 无法正常工作,请使用 SSH 来查看每个 control plane 节点上的 Operator pod 和容器日志。将
<master-node>.<cluster_name>.<base_domain>
替换为适当的值。列出每个 control plane 节点上的 pod:
ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl pods
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于任何未显示
Ready
状态的 Operator pod,详细检查 Pod 的状态。将<operator_pod_id>
替换为上一命令输出中列出的 Operator pod ID:ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspectp <operator_pod_id>
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspectp <operator_pod_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出与 Operator pod 相关的容器:
ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl ps --pod=<operator_pod_id>
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl ps --pod=<operator_pod_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于任何未显示
Ready
状态的 Operator 容器,请详细检查容器的状态。将<container_id>
替换为上一命令输出中列出的容器 ID:ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspect <container_id>
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspect <container_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查任何未显示
Ready
状态的 Operator 容器的日志。将<container_id>
替换为上一命令输出中列出的容器 ID:ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 OpenShift Dedicated 4 集群节点不可变,它依赖于 Operator 来应用集群更改。不建议使用 SSH 访问集群节点。在尝试通过 SSH 收集诊断数据前,请运行
oc adm must gather
和其他oc
命令看它们是否可以提供足够的数据。但是,如果 OpenShift Dedicated API 不可用,或 kubelet 在目标节点上无法正常工作,oc
操作将会受到影响。在这种情况下,可以使用ssh core@<node>.<cluster_name>.<base_domain>
来访问节点。