15.3. 使用 Node Observability Operator 请求 CRI-O 和 Kubelet 分析数据
创建 Node Observability 自定义资源来收集 CRI-O 和 Kubelet 分析数据。
15.3.1. 创建 Node Observability 自定义资源
在运行性能分析查询前,您必须创建并运行 NodeObservability
自定义资源 (CR)。运行 NodeObservability
CR 时,它会创建所需的机器配置和机器配置池 CR,以便在与 nodeSelector
匹配的 worker 节点上启用 CRI-O 分析。
如果 worker 节点上没有启用 CRI-O 分析,则会创建 NodeObservabilityMachineConfig
资源。与 NodeObservability
CR 中指定的 nodeSelector
匹配的 worker 节点。这可能需要 10 分钟或更长时间来完成。
kubelet 分析被默认启用。
节点的 CRI-O unix 套接字挂载在代理 pod 上,允许代理与 CRI-O 通信来运行 pprof 请求。同样,kubelet-serving-ca
证书链被挂载到代理 pod 上,允许在代理和节点的 kubelet 端点之间进行安全通信。
先决条件
- 已安装 Node Observability Operator。
- 已安装 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
运行
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 运行已完成。
15.3.2. 运行性能分析查询
要运行性能分析查询,您必须创建一个 NodeObservabilityRun
资源。分析查询是一个阻止操作,用于在 30 秒内获取 CRI-O 和 Kubelet 分析数据。分析查询完成后,您必须检索容器文件系统 /run/node-observability
目录中的性能分析数据。数据生命周期通过 emptyDir
卷绑定到代理 pod,因此您可以在代理 pod 处于 running
状态时访问性能分析数据。
您可以在任何时间点上请求一个性能分析查询。
先决条件
- 已安装 Node Observability Operator。
-
您已创建了
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