$ oc get packagemanifests -n openshift-marketplace node-observability-operator
节点可观察性操作符从计算节点的脚本中收集和存储 CRI-O 和 Kubelet 分析数据或指标。
使用节点可观察性操作符,您可以查询分析数据,从而可以分析 CRI-O 和 Kubelet 中的性能趋势。它支持调试与性能相关的问题,并通过使用自定义资源定义中的run
字段使用嵌入式脚本执行网络指标。要启用 CRI-O 和 Kubelet 分析或脚本编写,您可以配置自定义资源定义中的type
字段。
节点可观察性操作符仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围。 |
以下工作流程概述了如何使用节点可观察性操作符查询分析数据
在 OpenShift Container Platform 集群中安装节点可观察性操作符。
创建一个 NodeObservability 自定义资源以在您选择的 worker 节点上启用 CRI-O 分析。
运行分析查询以生成分析数据。
默认情况下,OpenShift Container Platform 中未安装节点可观察性操作符。您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装节点可观察性操作符。
您可以使用 OpenShift CLI (oc) 安装节点可观察性操作符。
您已安装 OpenShift CLI (oc)。
您可以使用cluster-admin
权限访问集群。
通过运行以下命令确认节点可观察性操作符可用
$ oc get packagemanifests -n openshift-marketplace node-observability-operator
NAME CATALOG AGE
node-observability-operator Red Hat Operators 9h
通过运行以下命令创建node-observability-operator
命名空间
$ oc new-project node-observability-operator
创建一个OperatorGroup
对象 YAML 文件
cat <<EOF | oc apply -f -
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: node-observability-operator
namespace: node-observability-operator
spec:
targetNamespaces: []
EOF
创建一个Subscription
对象 YAML 文件以将命名空间订阅到操作符
cat <<EOF | oc apply -f -
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: node-observability-operator
namespace: node-observability-operator
spec:
channel: alpha
name: node-observability-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
EOF
通过运行以下命令查看安装计划名称
$ oc -n node-observability-operator get sub node-observability-operator -o yaml | yq '.status.installplan.name'
install-dt54w
通过运行以下命令验证安装计划状态
$ oc -n node-observability-operator get ip <install_plan_name> -o yaml | yq '.status.phase'
<install_plan_name>
是您从先前命令的输出中获得的安装计划名称。
COMPLETE
验证节点可观察性操作符是否已启动并运行
$ oc get deploy -n node-observability-operator
NAME READY UP-TO-DATE AVAILABLE AGE
node-observability-operator-controller-manager 1/1 1 1 40h
您可以从OpenShift Container Platform Web控制台安装节点可观测性操作符。
您可以使用cluster-admin
权限访问集群。
您可以访问OpenShift Container Platform Web控制台。
登录OpenShift Container Platform Web控制台。
在管理员导航面板中,展开**操作符** → **OperatorHub**。
在**所有项目**字段中,输入**Node Observability Operator**并选择**Node Observability Operator**磁贴。
点击**安装**。
在**安装操作符**页面上,配置以下设置
在**更新通道**区域,点击**alpha**。
在**安装模式**区域,点击**集群上的特定命名空间**。
从**已安装命名空间**列表中,选择**node-observability-operator**。
在**更新批准**区域,选择**自动**。
点击**安装**。
在管理员导航面板中,展开**操作符** → **已安装操作符**。
验证节点可观测性操作符是否列在操作符列表中。
创建节点可观测性自定义资源以收集CRI-O和Kubelet性能分析数据。
在运行性能分析查询之前,必须创建并运行NodeObservability
自定义资源(CR)。运行NodeObservability
CR时,它会创建必要的机器配置和机器配置池CR,以在与nodeSelector
匹配的工作节点上启用CRI-O性能分析。
如果工作节点上未启用CRI-O性能分析,则会创建 |
Kubelet性能分析默认启用。 |
节点的CRI-O Unix套接字挂载到agent pod上,允许agent与CRI-O通信以运行pprof请求。同样,kubelet-serving-ca
证书链也挂载到agent pod上,允许agent与节点的kubelet端点之间进行安全通信。
您已安装节点可观测性操作符。
您已安装 OpenShift CLI (oc)。
您可以使用cluster-admin
权限访问集群。
通过运行以下命令登录到OpenShift Container Platform CLI
$ oc login -u kubeadmin https://<HOSTNAME>:6443
通过运行以下命令切换回node-observability-operator
命名空间
$ oc project node-observability-operator
创建一个名为nodeobservability.yaml
的CR文件,其中包含以下文本
apiVersion: nodeobservability.olm.openshift.io/v1alpha2
kind: NodeObservability
metadata:
name: cluster (1)
spec:
nodeSelector:
kubernetes.io/hostname: <node_hostname> (2)
type: crio-kubelet
1 | 必须将名称指定为cluster ,因为每个集群只有一个NodeObservability CR。 |
2 | 指定必须在其中部署节点可观测性agent的节点。 |
运行NodeObservability
CR
oc apply -f nodeobservability.yaml
nodeobservability.olm.openshift.io/cluster created
通过运行以下命令查看NodeObservability
CR的状态
$ oc get nob/cluster -o yaml | yq '.status.conditions'
conditions:
conditions:
- lastTransitionTime: "2022-07-05T07:33:54Z"
message: 'DaemonSet node-observability-ds ready: true NodeObservabilityMachineConfig
ready: true'
reason: Ready
status: "True"
type: Ready
当原因是Ready
且状态是True
时,NodeObservability
CR运行完成。
要运行性能分析查询,必须创建一个NodeObservabilityRun
资源。性能分析查询是一个阻塞操作,它会获取CRI-O和Kubelet性能分析数据,持续时间为30秒。性能分析查询完成后,必须在容器文件系统/run/node-observability
目录中检索性能分析数据。数据的生命周期通过emptyDir
卷绑定到agent pod,因此可以在agent pod处于running
状态时访问性能分析数据。
任何时候只能请求一个性能分析查询。 |
您已安装节点可观测性操作符。
您已创建NodeObservability
自定义资源(CR)。
您可以使用cluster-admin
权限访问集群。
创建一个名为nodeobservabilityrun.yaml
的NodeObservabilityRun
资源文件,其中包含以下文本
apiVersion: nodeobservability.olm.openshift.io/v1alpha2
kind: NodeObservabilityRun
metadata:
name: nodeobservabilityrun
spec:
nodeObservabilityRef:
name: cluster
通过运行NodeObservabilityRun
资源来触发性能分析查询
$ oc apply -f nodeobservabilityrun.yaml
通过运行以下命令查看NodeObservabilityRun
的状态
$ oc get nodeobservabilityrun nodeobservabilityrun -o yaml | yq '.status.conditions'
conditions:
- lastTransitionTime: "2022-07-07T14:57:34Z"
message: Ready to start profiling
reason: Ready
status: "True"
type: Ready
- lastTransitionTime: "2022-07-07T14:58:10Z"
message: Profiling query done
reason: Finished
status: "True"
type: Finished
一旦状态为True
且类型为Finished
,性能分析查询就完成了。
通过运行以下bash脚本从容器的/run/node-observability
路径检索性能分析数据
for a in $(oc get nodeobservabilityrun nodeobservabilityrun -o yaml | yq .status.agents[].name); do
echo "agent ${a}"
mkdir -p "/tmp/${a}"
for p in $(oc exec "${a}" -c node-observability-agent -- bash -c "ls /run/node-observability/*.pprof"); do
f="$(basename ${p})"
echo "copying ${f} to /tmp/${a}/${f}"
oc exec "${a}" -c node-observability-agent -- cat "${p}" > "/tmp/${a}/${f}"
done
done
脚本允许您使用当前的节点可观测性操作符和节点可观测性agent运行预配置的bash脚本。
这些脚本监控关键指标,例如CPU负载、内存压力和工作节点问题。它们还收集sar报告和自定义性能指标。
在运行脚本之前,必须创建并运行NodeObservability
自定义资源(CR)。运行NodeObservability
CR时,它会在与nodeSelector
标签匹配的计算节点上以脚本模式启用agent。
您已安装节点可观测性操作符。
您已安装OpenShift CLI (oc
)。
您可以使用cluster-admin
权限访问集群。
通过运行以下命令登录到OpenShift Container Platform集群
$ oc login -u kubeadmin https://<host_name>:6443
通过运行以下命令切换到node-observability-operator
命名空间
$ oc project node-observability-operator
创建一个名为nodeobservability.yaml
的文件,其中包含以下内容
apiVersion: nodeobservability.olm.openshift.io/v1alpha2
kind: NodeObservability
metadata:
name: cluster (1)
spec:
nodeSelector:
kubernetes.io/hostname: <node_hostname> (2)
type: scripting (3)
1 | 必须将名称指定为cluster ,因为每个集群只有一个NodeObservability CR。 |
2 | 指定必须在其中部署节点可观测性agent的节点。 |
3 | 要以脚本模式部署agent,必须将类型设置为scripting 。 |
通过运行以下命令创建NodeObservability
CR
$ oc apply -f nodeobservability.yaml
nodeobservability.olm.openshift.io/cluster created
通过运行以下命令查看NodeObservability
CR的状态
$ oc get nob/cluster -o yaml | yq '.status.conditions'
conditions:
conditions:
- lastTransitionTime: "2022-07-05T07:33:54Z"
message: 'DaemonSet node-observability-ds ready: true NodeObservabilityScripting
ready: true'
reason: Ready
status: "True"
type: Ready
当reason
为Ready
且status
为"True"
时,NodeObservability
CR运行完成。
您已安装节点可观测性操作符。
您已创建NodeObservability
自定义资源(CR)。
您可以使用cluster-admin
权限访问集群。
创建一个名为nodeobservabilityrun-script.yaml
的文件,其中包含以下内容
apiVersion: nodeobservability.olm.openshift.io/v1alpha2
kind: NodeObservabilityRun
metadata:
name: nodeobservabilityrun-script
namespace: node-observability-operator
spec:
nodeObservabilityRef:
name: cluster
type: scripting
您只能请求以下脚本
|
通过使用以下命令创建NodeObservabilityRun
资源来触发脚本
$ oc apply -f nodeobservabilityrun-script.yaml
通过运行以下命令查看NodeObservabilityRun
脚本的状态
$ oc get nodeobservabilityrun nodeobservabilityrun-script -o yaml | yq '.status.conditions'
Status:
Agents:
Ip: 10.128.2.252
Name: node-observability-agent-n2fpm
Port: 8443
Ip: 10.131.0.186
Name: node-observability-agent-wcc8p
Port: 8443
Conditions:
Conditions:
Last Transition Time: 2023-12-19T15:10:51Z
Message: Ready to start profiling
Reason: Ready
Status: True
Type: Ready
Last Transition Time: 2023-12-19T15:11:01Z
Message: Profiling query done
Reason: Finished
Status: True
Type: Finished
Finished Timestamp: 2023-12-19T15:11:01Z
Start Timestamp: 2023-12-19T15:10:51Z
一旦Status
为True
且Type
为Finished
,脚本就完成了。
通过运行以下bash脚本从容器的根路径检索脚本数据
#!/bin/bash
RUN=$(oc get nodeobservabilityrun --no-headers | awk '{print $1}')
for a in $(oc get nodeobservabilityruns.nodeobservability.olm.openshift.io/${RUN} -o json | jq .status.agents[].name); do
echo "agent ${a}"
agent=$(echo ${a} | tr -d "\"\'\`")
base_dir=$(oc exec "${agent}" -c node-observability-agent -- bash -c "ls -t | grep node-observability-agent" | head -1)
echo "${base_dir}"
mkdir -p "/tmp/${agent}"
for p in $(oc exec "${agent}" -c node-observability-agent -- bash -c "ls ${base_dir}"); do
f="/${base_dir}/${p}"
echo "copying ${f} to /tmp/${agent}/${p}"
oc exec "${agent}" -c node-observability-agent -- cat ${f} > "/tmp/${agent}/${p}"
done
done
有关如何收集工作程序指标的更多信息,请参阅Red Hat知识库文章。