×

节点可观察性操作符从计算节点的脚本中收集和存储 CRI-O 和 Kubelet 分析数据或指标。

使用节点可观察性操作符,您可以查询分析数据,从而可以分析 CRI-O 和 Kubelet 中的性能趋势。它支持调试与性能相关的问题,并通过使用自定义资源定义中的run字段使用嵌入式脚本执行网络指标。要启用 CRI-O 和 Kubelet 分析或脚本编写,您可以配置自定义资源定义中的type字段。

节点可观察性操作符仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见技术预览功能支持范围

节点可观察性操作符的工作流程

以下工作流程概述了如何使用节点可观察性操作符查询分析数据

  1. 在 OpenShift Container Platform 集群中安装节点可观察性操作符。

  2. 创建一个 NodeObservability 自定义资源以在您选择的 worker 节点上启用 CRI-O 分析。

  3. 运行分析查询以生成分析数据。

安装节点可观察性操作符

默认情况下,OpenShift Container Platform 中未安装节点可观察性操作符。您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装节点可观察性操作符。

使用 CLI 安装节点可观察性操作符

您可以使用 OpenShift CLI (oc) 安装节点可观察性操作符。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您可以使用cluster-admin权限访问集群。

步骤
  1. 通过运行以下命令确认节点可观察性操作符可用

    $ oc get packagemanifests -n openshift-marketplace node-observability-operator
    示例输出
    NAME                            CATALOG                AGE
    node-observability-operator     Red Hat Operators      9h
  2. 通过运行以下命令创建node-observability-operator命名空间

    $ oc new-project node-observability-operator
  3. 创建一个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
  4. 创建一个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
验证
  1. 通过运行以下命令查看安装计划名称

    $ oc -n node-observability-operator get sub node-observability-operator -o yaml | yq '.status.installplan.name'
    示例输出
    install-dt54w
  2. 通过运行以下命令验证安装计划状态

    $ oc -n node-observability-operator get ip <install_plan_name> -o yaml | yq '.status.phase'

    <install_plan_name>是您从先前命令的输出中获得的安装计划名称。

    示例输出
    COMPLETE
  3. 验证节点可观察性操作符是否已启动并运行

    $ oc get deploy -n node-observability-operator
    示例输出
    NAME                                            READY   UP-TO-DATE  AVAILABLE   AGE
    node-observability-operator-controller-manager  1/1     1           1           40h

使用Web控制台安装节点可观测性操作符

您可以从OpenShift Container Platform Web控制台安装节点可观测性操作符。

先决条件
  • 您可以使用cluster-admin权限访问集群。

  • 您可以访问OpenShift Container Platform Web控制台。

步骤
  1. 登录OpenShift Container Platform Web控制台。

  2. 在管理员导航面板中,展开**操作符** → **OperatorHub**。

  3. 在**所有项目**字段中,输入**Node Observability Operator**并选择**Node Observability Operator**磁贴。

  4. 点击**安装**。

  5. 在**安装操作符**页面上,配置以下设置

    1. 在**更新通道**区域,点击**alpha**。

    2. 在**安装模式**区域,点击**集群上的特定命名空间**。

    3. 从**已安装命名空间**列表中,选择**node-observability-operator**。

    4. 在**更新批准**区域,选择**自动**。

    5. 点击**安装**。

验证
  1. 在管理员导航面板中,展开**操作符** → **已安装操作符**。

  2. 验证节点可观测性操作符是否列在操作符列表中。

使用节点可观测性操作符请求CRI-O和Kubelet性能分析数据

创建节点可观测性自定义资源以收集CRI-O和Kubelet性能分析数据。

创建节点可观测性自定义资源

在运行性能分析查询之前,必须创建并运行NodeObservability自定义资源(CR)。运行NodeObservability CR时,它会创建必要的机器配置和机器配置池CR,以在与nodeSelector匹配的工作节点上启用CRI-O性能分析。

如果工作节点上未启用CRI-O性能分析,则会创建NodeObservabilityMachineConfig资源。与NodeObservability CR中指定的nodeSelector匹配的工作节点将重新启动。这可能需要10分钟或更长时间才能完成。

Kubelet性能分析默认启用。

节点的CRI-O Unix套接字挂载到agent pod上,允许agent与CRI-O通信以运行pprof请求。同样,kubelet-serving-ca证书链也挂载到agent pod上,允许agent与节点的kubelet端点之间进行安全通信。

先决条件
  • 您已安装节点可观测性操作符。

  • 您已安装 OpenShift CLI (oc)。

  • 您可以使用cluster-admin权限访问集群。

步骤
  1. 通过运行以下命令登录到OpenShift Container Platform CLI

    $ oc login -u kubeadmin https://<HOSTNAME>:6443
  2. 通过运行以下命令切换回node-observability-operator命名空间

    $ oc project node-observability-operator
  3. 创建一个名为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的节点。
  4. 运行NodeObservability CR

    oc apply -f nodeobservability.yaml
    示例输出
    nodeobservability.olm.openshift.io/cluster created
  5. 通过运行以下命令查看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权限访问集群。

步骤
  1. 创建一个名为nodeobservabilityrun.yamlNodeObservabilityRun资源文件,其中包含以下文本

    apiVersion: nodeobservability.olm.openshift.io/v1alpha2
    kind: NodeObservabilityRun
    metadata:
      name: nodeobservabilityrun
    spec:
      nodeObservabilityRef:
        name: cluster
  2. 通过运行NodeObservabilityRun资源来触发性能分析查询

    $ oc apply -f nodeobservabilityrun.yaml
  3. 通过运行以下命令查看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,性能分析查询就完成了。

  4. 通过运行以下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权限访问集群。

步骤
  1. 通过运行以下命令登录到OpenShift Container Platform集群

    $ oc login -u kubeadmin https://<host_name>:6443
  2. 通过运行以下命令切换到node-observability-operator命名空间

    $ oc project node-observability-operator
  3. 创建一个名为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
  4. 通过运行以下命令创建NodeObservability CR

    $ oc apply -f nodeobservability.yaml
    示例输出
    nodeobservability.olm.openshift.io/cluster created
  5. 通过运行以下命令查看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

    reasonReadystatus"True"时,NodeObservability CR运行完成。

配置节点可观测性操作符脚本

先决条件
  • 您已安装节点可观测性操作符。

  • 您已创建NodeObservability自定义资源(CR)。

  • 您可以使用cluster-admin权限访问集群。

步骤
  1. 创建一个名为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

    您只能请求以下脚本

    • metrics.sh

    • network-metrics.sh(使用monitor.sh

  2. 通过使用以下命令创建NodeObservabilityRun资源来触发脚本

    $ oc apply -f nodeobservabilityrun-script.yaml
  3. 通过运行以下命令查看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

    一旦StatusTrueTypeFinished,脚本就完成了。

  4. 通过运行以下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知识库文章