$ oc get subs -n <operator_namespace>
操作符是一种打包、部署和管理 AWS 上 Red Hat OpenShift 服务应用程序的方法。它们就像软件供应商工程团队的扩展,监控 AWS 上的 Red Hat OpenShift 服务环境,并利用其当前状态实时做出决策。操作符旨在无缝处理升级,自动响应故障,并且不走捷径,例如跳过软件备份过程以节省时间。
AWS 上的 Red Hat OpenShift 服务包含一组默认的操作符,这些操作符对于集群的正常运行是必需的。这些默认操作符由集群版本操作符 (CVO) 管理。
作为集群管理员,您可以使用 AWS 上 Red Hat OpenShift 服务的 Web 控制台或 CLI 从 OperatorHub 安装应用程序操作符。然后,您可以将操作符订阅到一个或多个命名空间,使其可供集群中的开发人员使用。应用程序操作符由操作符生命周期管理器 (OLM) 管理。
如果您遇到操作符问题,请验证操作符订阅状态。检查整个集群中的操作符 Pod 健康状况并收集操作符日志以进行诊断。
订阅可以报告以下条件类型
条件 | 描述 |
---|---|
|
一些或所有将在解析中使用的目录源都不健康。 |
|
缺少订阅的安装计划。 |
|
订阅的安装计划正在等待安装。 |
|
订阅的安装计划已失败。 |
|
订阅的依赖项解析已失败。 |
AWS 上 Red Hat OpenShift 服务的默认集群操作符由集群版本操作符 (CVO) 管理,它们没有 |
您可以使用 CLI 查看操作符订阅状态。
您可以作为具有 dedicated-admin
角色的用户访问集群。
您已安装 OpenShift CLI (oc
)。
列出操作符订阅
$ oc get subs -n <operator_namespace>
使用 oc describe
命令检查 Subscription
资源
$ oc describe sub <subscription_name> -n <operator_namespace>
在命令输出中,查找操作符订阅条件类型的状态的 Conditions
部分。在以下示例中,CatalogSourcesUnhealthy
条件类型的状态为 false
,因为所有可用的目录源都处于健康状态
Name: cluster-logging
Namespace: openshift-logging
Labels: operators.coreos.com/cluster-logging.openshift-logging=
Annotations: <none>
API Version: operators.coreos.com/v1alpha1
Kind: Subscription
# ...
Conditions:
Last Transition Time: 2019-07-29T13:42:57Z
Message: all available catalogsources are healthy
Reason: AllCatalogSourcesHealthy
Status: False
Type: CatalogSourcesUnhealthy
# ...
AWS 上 Red Hat OpenShift 服务的默认集群操作符由集群版本操作符 (CVO) 管理,它们没有 |
您可以使用 CLI 查看操作符目录源的状态。
您可以作为具有 dedicated-admin
角色的用户访问集群。
您已安装 OpenShift CLI (oc
)。
列出命名空间中的目录源。例如,您可以检查 openshift-marketplace
命名空间,该命名空间用于集群范围的目录源
$ oc get catalogsources -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
certified-operators Certified Operators grpc Red Hat 55m
community-operators Community Operators grpc Red Hat 55m
example-catalog Example Catalog grpc Example Org 2m25s
redhat-marketplace Red Hat Marketplace grpc Red Hat 55m
redhat-operators Red Hat Operators grpc Red Hat 55m
使用 oc describe
命令获取有关目录源的更多详细信息和状态
$ oc describe catalogsource example-catalog -n openshift-marketplace
Name: example-catalog
Namespace: openshift-marketplace
Labels: <none>
Annotations: operatorframework.io/managed-by: marketplace-operator
target.workload.openshift.io/management: {"effect": "PreferredDuringScheduling"}
API Version: operators.coreos.com/v1alpha1
Kind: CatalogSource
# ...
Status:
Connection State:
Address: example-catalog.openshift-marketplace.svc:50051
Last Connect: 2021-09-09T17:07:35Z
Last Observed State: TRANSIENT_FAILURE
Registry Service:
Created At: 2021-09-09T17:05:45Z
Port: 50051
Protocol: grpc
Service Name: example-catalog
Service Namespace: openshift-marketplace
# ...
在前面的示例输出中,最后观察到的状态为 TRANSIENT_FAILURE
。此状态表示在为目录源建立连接时存在问题。
列出创建目录源的命名空间中的 Pod
$ oc get pods -n openshift-marketplace
NAME READY STATUS RESTARTS AGE
certified-operators-cv9nn 1/1 Running 0 36m
community-operators-6v8lp 1/1 Running 0 36m
marketplace-operator-86bfc75f9b-jkgbc 1/1 Running 0 42m
example-catalog-bwt8z 0/1 ImagePullBackOff 0 3m55s
redhat-marketplace-57p8c 1/1 Running 0 36m
redhat-operators-smxx8 1/1 Running 0 36m
在命名空间中创建目录源时,会在该命名空间中为目录源创建一个 Pod。在前面的示例输出中,example-catalog-bwt8z
Pod 的状态为 ImagePullBackOff
。此状态表示拉取目录源的索引映像时存在问题。
使用 oc describe
命令检查 Pod 以获取更详细的信息
$ oc describe pod example-catalog-bwt8z -n openshift-marketplace
Name: example-catalog-bwt8z
Namespace: openshift-marketplace
Priority: 0
Node: ci-ln-jyryyg2-f76d1-ggdbq-worker-b-vsxjd/10.0.128.2
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 48s default-scheduler Successfully assigned openshift-marketplace/example-catalog-bwt8z to ci-ln-jyryyf2-f76d1-fgdbq-worker-b-vsxjd
Normal AddedInterface 47s multus Add eth0 [10.131.0.40/23] from openshift-sdn
Normal BackOff 20s (x2 over 46s) kubelet Back-off pulling image "quay.io/example-org/example-catalog:v1"
Warning Failed 20s (x2 over 46s) kubelet Error: ImagePullBackOff
Normal Pulling 8s (x3 over 47s) kubelet Pulling image "quay.io/example-org/example-catalog:v1"
Warning Failed 8s (x3 over 47s) kubelet Failed to pull image "quay.io/example-org/example-catalog:v1": rpc error: code = Unknown desc = reading manifest v1 in quay.io/example-org/example-catalog: unauthorized: access to the requested resource is not authorized
Warning Failed 8s (x3 over 47s) kubelet Error: ErrImagePull
在前面的示例输出中,错误消息表明目录源的索引映像由于授权问题而无法成功拉取。例如,索引映像可能存储在需要登录凭据的注册表中。
gRPC 文档:连接状态
您可以列出集群中运行的操作符 Pod 及其状态。您还可以收集详细的操作符 Pod 摘要。
您可以作为具有 dedicated-admin
角色的用户访问集群。
您的 API 服务仍在运行。
您已安装 OpenShift CLI (oc
)。
列出在集群中运行的操作符。输出包括操作符版本、可用性和正常运行时间信息
$ oc get clusteroperators
列出在操作符命名空间中运行的操作符 Pod,以及 Pod 状态、重启次数和使用时间
$ oc get pod -n <operator_namespace>
输出详细的操作符 Pod 摘要
$ oc describe pod <operator_pod_name> -n <operator_namespace>
如果您遇到操作符问题,您可以从操作符 Pod 日志收集详细的诊断信息。
您可以作为具有 dedicated-admin
角色的用户访问集群。
您的 API 服务仍在运行。
您已安装 OpenShift CLI (oc
)。
您拥有控制平面或控制平面机器的完全限定域名。
列出在操作符命名空间中运行的操作符 Pod,以及 Pod 状态、重启次数和使用时间
$ oc get pods -n <operator_namespace>
查看操作符 Pod 的日志
$ oc logs pod/<pod_name> -n <operator_namespace>
如果 Operator Pod 包含多个容器,则前面的命令将产生错误,其中包含每个容器的名称。查询单个容器的日志
$ oc logs pod/<operator_pod_name> -c <container_name> -n <operator_namespace>
如果 API 无法正常工作,请改用 SSH 在每个控制平面节点上查看 Operator Pod 和容器日志。请将<master-node>.<cluster_name>.<base_domain>
替换为适当的值。
列出每个控制平面节点上的 Pod
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl pods
对于任何状态未显示为Ready
的 Operator Pod,请详细检查 Pod 的状态。请将<operator_pod_id>
替换为前面命令输出中列出的 Operator Pod ID
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspectp <operator_pod_id>
列出与 Operator Pod 相关的容器
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl ps --pod=<operator_pod_id>
对于任何状态未显示为Ready
的 Operator 容器,请详细检查容器的状态。请将<container_id>
替换为前面命令输出中列出的容器 ID
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl inspect <container_id>
查看任何状态未显示为Ready
的 Operator 容器的日志。请将<container_id>
替换为前面命令输出中列出的容器 ID
$ ssh core@<master-node>.<cluster_name>.<base_domain> sudo crictl logs -f <container_id>
在 AWS 上运行 Red Hat Enterprise Linux CoreOS (RHCOS) 的 Red Hat OpenShift Service 集群节点是不可变的,并且依赖于 Operator 来应用集群更改。不建议使用 SSH 访问集群节点。在尝试通过 SSH 收集诊断数据之前,请先查看是否可以通过运行 |