21.3. 使用 Node Observability Operator 请求 CRI-O 和 Kubelet 分析数据
创建 Node Observability 自定义资源来收集 CRI-O 和 Kubelet 分析数据。
21.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: cluster1 spec: nodeSelector: kubernetes.io/hostname: <node_hostname>2 type: crio-kubelet运行
NodeObservabilityCR:oc apply -f nodeobservability.yaml输出示例
nodeobservability.olm.openshift.io/cluster created运行以下命令,检查
NodeObservabilityCR 的状态:$ 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时,NodeObservabilityCR 运行已完成。
21.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