第 8 章 metering 故障排除与调试

重要

Metering 是一个已弃用的功能。弃用的功能仍然包含在 OpenShift Container Platform 中,并将继续被支持。但是,这个功能会在以后的发行版本中被删除,且不建议在新的部署中使用。

有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行注记中已弃用和删除的功能部分。

参考以下部分来协助排除和调试与 metering 相关的问题。

除本部分所述信息外,还需查看以下主题:

8.1. metering 故障排除

metering 常会遇到 pod 无法启动的问题。Pod 可能会因为缺少资源或其所依赖的资源(如 StorageClassSecret 资源)不存在而无法启动。

8.1.1. 计算资源不足

安装或运行 metering 时常会遇到计算资源不足的问题。随着集群增长并创建更多报告,Reporting Operator pod 需要更多内存。如果内存用量达到 pod 限制,集群会认为 pod 内存不足(OOM),并以 OOMKilled 状态终止它。确保向 metering 分配的资源满足安装先决条件中描述的最低资源要求。

注意

Metering Operator 不根据集群中的负载自动扩展 Reporting Operator。因此,Reporting Operator pod 的 CPU 使用量不会随着集群增长而增加。

要确定资源或调度方面是否存在问题,请按照 Kubernetes 文档Managing Compute Resources for Containers 中的故障排除说明操作。

要排除由于缺少计算资源而出现的问题,请在 openshift-metering 命名空间中检查以下内容。

先决条件

  • 目前处于 openshift-metering 命名空间中。运行以下命令来进入 openshift-metering 命名空间:

    $ oc project openshift-metering

流程

  1. 检查未完成的、显示 ReportingPeriodUnmetDependencies 状态的 metering Report 资源:

    $ oc get reports

    输出示例

    NAME                                  QUERY                          SCHEDULE   RUNNING                            FAILED   LAST REPORT TIME       AGE
    namespace-cpu-utilization-adhoc-10    namespace-cpu-utilization                 Finished                                    2020-10-31T00:00:00Z   2m38s
    namespace-cpu-utilization-adhoc-11    namespace-cpu-utilization                 ReportingPeriodUnmetDependencies                                   2m23s
    namespace-memory-utilization-202010   namespace-memory-utilization              ReportingPeriodUnmetDependencies                                   26s
    namespace-memory-utilization-202011   namespace-memory-utilization              ReportingPeriodUnmetDependencies                                   14s

  2. 检查 NEWEST METRIC 小于报告结束日期的 ReportDataSource 资源:

    $ oc get reportdatasource

    输出示例

    NAME                                         EARLIEST METRIC        NEWEST METRIC          IMPORT START           IMPORT END             LAST IMPORT TIME       AGE
    ...
    node-allocatable-cpu-cores                   2020-04-23T09:14:00Z   2020-08-31T10:07:00Z   2020-04-23T09:14:00Z   2020-10-15T17:13:00Z   2020-12-09T12:45:10Z   230d
    node-allocatable-memory-bytes                2020-04-23T09:14:00Z   2020-08-30T05:19:00Z   2020-04-23T09:14:00Z   2020-10-14T08:01:00Z   2020-12-09T12:45:12Z   230d
    ...
    pod-usage-memory-bytes                       2020-04-23T09:14:00Z   2020-08-24T20:25:00Z   2020-04-23T09:14:00Z   2020-10-09T23:31:00Z   2020-12-09T12:45:12Z   230d

  3. 检查 reporting-operator Pod 资源的健康状态,以检查大量 pod 重启:

    $ oc get pods -l app=reporting-operator

    输出示例

    NAME                                  READY   STATUS    RESTARTS   AGE
    reporting-operator-84f7c9b7b6-fr697   2/2     Running   542        8d 1

    1
    Reporting Operator pod 以更高的率重启。
  4. 检查 reporting-operator Pod 资源是否有 OOMKilled 终止:

    $ oc describe pod/reporting-operator-84f7c9b7b6-fr697

    输出示例

    Name:         reporting-operator-84f7c9b7b6-fr697
    Namespace:    openshift-metering
    Priority:     0
    Node:         ip-10-xx-xx-xx.ap-southeast-1.compute.internal/10.xx.xx.xx
    ...
       Ports:          8080/TCP, 6060/TCP, 8082/TCP
       Host Ports:     0/TCP, 0/TCP, 0/TCP
       State:          Running
         Started:      Thu, 03 Dec 2020 20:59:45 +1000
       Last State:     Terminated
         Reason:       OOMKilled 1
         Exit Code:    137
         Started:      Thu, 03 Dec 2020 20:38:05 +1000
         Finished:     Thu, 03 Dec 2020 20:59:43 +1000

    1
    Reporting Operator pod 因 OOM 终止而终止。
增加 reporting-operator pod 内存限制

如果您增加 pod 重启和 OOM 终止事件,您可以检查 Reporting Operator pod 的当前内存限值。增加内存限值可让 Reporting Operator Pod 更新报告数据源。如有必要,将 MeteringConfig 资源中的内存限值增加到 25% - 50%。

流程

  1. 检查 reporting-operator Pod 资源的当前内存限值:

    $ oc describe pod reporting-operator-67d6f57c56-79mrt

    输出示例

    Name:         reporting-operator-67d6f57c56-79mrt
    Namespace:    openshift-metering
    Priority:     0
    ...
       Ports:          8080/TCP, 6060/TCP, 8082/TCP
       Host Ports:     0/TCP, 0/TCP, 0/TCP
       State:          Running
         Started:      Tue, 08 Dec 2020 14:26:21 +1000
       Ready:          True
       Restart Count:  0
       Limits:
         cpu:     1
         memory:  500Mi 1
       Requests:
         cpu:     500m
         memory:  250Mi
       Environment:
    ...

    1
    Reporting Operator pod 的当前内存限值。
  2. 编辑 MeteringConfig 资源以更新内存限制:

    $ oc edit meteringconfig/operator-metering

    MeteringConfig 资源示例

    kind: MeteringConfig
    metadata:
      name: operator-metering
      namespace: openshift-metering
    spec:
      reporting-operator:
      spec:
        resources: 1
          limits:
            cpu: 1
            memory: 750Mi
          requests:
            cpu: 500m
            memory: 500Mi
    ...

    1
    MeteringConfig 资源的 resources 字段中添加或增加内存限值。
    注意

    如果在增加内存限制后仍然有大量 OOM 终止事件,这可能代表报告处于待处理状态。

8.1.2. 未配置 StorageClass 资源

Metering 要求为动态置备配置默认 StorageClass 资源。

有关如何检查是否为集群配置了 StorageClass 资源、如何设置默认值以及如何配置 metering 以使用默认存储类的信息,请参阅有关配置 metering 的文档。

8.1.3. 未正确配置 secret

metering 常会遇到在配置持久性存储时所提供的 secret 不正确的问题。请务必查看示例配置文件并根据您的存储提供程序指南创建 secret。