×

OVN-Kubernetes 具有许多内置的运行状况检查和日志来源。请按照这些部分中的说明检查您的集群。如果需要支持案例,请按照支持指南通过must-gather收集更多信息。只有在支持人员指示的情况下才使用--gather_network_logs

使用就绪探针监控 OVN-Kubernetes 的运行状况

ovnkube-control-planeovnkube-node Pod 配置了带有就绪探针的容器。

先决条件
  • 访问 OpenShift 命令行界面 (oc)。

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

  • 您已安装jq

步骤
  1. 通过运行以下命令查看ovnkube-node就绪探针的详细信息

    $ oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node \
    -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'

    ovnkube-node Pod 中的北向和南向数据库容器的就绪探针检查数据库和ovnkube-controller容器的运行状况。

    ovnkube-node Pod 中的ovnkube-controller容器具有一个就绪探针,用于验证 OVN-Kubernetes CNI 配置文件的存在,该文件不存在表明 Pod 未运行或未准备好接受配置 Pod 的请求。

  2. 使用以下命令显示命名空间的所有事件,包括探针故障

    $ oc get events -n openshift-ovn-kubernetes
  3. 仅显示特定 Pod 的事件

    $ oc describe pod ovnkube-node-9lqfk -n openshift-ovn-kubernetes
  4. 显示集群网络操作员的消息和状态

    $ oc get co/network -o json | jq '.status.conditions[]'
  5. 运行以下脚本,显示ovnkube-node Pod 中每个容器的ready状态

    $ for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \
    -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); do echo === $p ===;  \
    oc get pods -n openshift-ovn-kubernetes $p -o json | jq '.status.containerStatuses[] | .name, .ready'; \
    done

    预期所有容器状态都显示为true。就绪探测失败会将状态设置为false

在控制台中查看OVN-Kubernetes告警

告警UI提供有关告警及其管理告警规则和静默的详细信息。

先决条件
  • 您可以作为开发人员或具有查看您正在查看其指标的项目的权限的用户访问集群。

步骤(UI)
  1. 在**管理员**视角中,选择**观察** → **告警**。此视角中告警UI中的三个主要页面是**告警**、**静默**和**告警规则**页面。

  2. 通过选择**观察** → **告警** → **告警规则**来查看OVN-Kubernetes告警的规则。

在CLI中查看OVN-Kubernetes告警

您可以从命令行获取有关告警及其管理告警规则和静默的信息。

先决条件
  • 具有cluster-admin角色的用户可以访问集群。

  • 已安装OpenShift CLI(oc)。

  • 您已安装jq

步骤
  1. 运行以下命令查看活动或正在触发的告警。

    1. 运行以下命令设置告警管理器路由环境变量

      $ ALERT_MANAGER=$(oc get route alertmanager-main -n openshift-monitoring \
      -o jsonpath='{@.spec.host}')
    2. 运行以下命令向告警管理器路由API发出curl请求,将$ALERT_MANAGER替换为您的Alertmanager实例的URL

      $ curl -s -k -H "Authorization: Bearer $(oc create token prometheus-k8s -n openshift-monitoring)" https://$ALERT_MANAGER/api/v1/alerts | jq '.data[] | "\(.labels.severity) \(.labels.alertname) \(.labels.pod) \(.labels.container) \(.labels.endpoint) \(.labels.instance)"'
  2. 运行以下命令查看告警规则

    $ oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s 'https://127.0.0.1:9090/api/v1/rules' | jq '.data.groups[].rules[] | select(((.name|contains("ovn")) or (.name|contains("OVN")) or (.name|contains("Ovn")) or (.name|contains("North")) or (.name|contains("South"))) and .type=="alerting")'

使用CLI查看OVN-Kubernetes日志

您可以使用OpenShift CLI(oc)查看ovnkube-masterovnkube-node Pod中每个Pod的日志。

先决条件
  • 具有cluster-admin角色的用户可以访问集群。

  • 访问 OpenShift 命令行界面 (oc)。

  • 您已安装jq

步骤
  1. 查看特定Pod的日志

    $ oc logs -f <pod_name> -c <container_name> -n <namespace>

    其中

    -f

    可选:指定输出跟随写入日志的内容。

    <pod_name>

    指定Pod的名称。

    <container_name>

    可选:指定容器的名称。当Pod有多个容器时,必须指定容器名称。

    <namespace>

    指定Pod运行的命名空间。

    例如

    $ oc logs ovnkube-node-5dx44 -n openshift-ovn-kubernetes
    $ oc logs -f ovnkube-node-5dx44 -c ovnkube-controller -n openshift-ovn-kubernetes

    打印出日志文件的内容。

  2. 检查ovnkube-node Pod中所有容器中最新的条目

    $ for p in $(oc get pods --selector app=ovnkube-node -n openshift-ovn-kubernetes \
    -o jsonpath='{range.items[*]}{" "}{.metadata.name}'); \
    do echo === $p ===; for container in $(oc get pods -n openshift-ovn-kubernetes $p \
    -o json | jq -r '.status.containerStatuses[] | .name');do echo ---$container---; \
    oc logs -c $container $p -n openshift-ovn-kubernetes --tail=5; done; done
  3. 使用以下命令查看ovnkube-node Pod中每个容器中每个日志的最后5行

    $ oc logs -l app=ovnkube-node -n openshift-ovn-kubernetes --all-containers --tail 5

使用Web控制台查看OVN-Kubernetes日志

您可以在Web控制台中查看ovnkube-masterovnkube-node Pod中每个Pod的日志。

先决条件
  • 访问 OpenShift 命令行界面 (oc)。

步骤
  1. 在OpenShift Container Platform控制台中,导航到**工作负载** → **Pod**,或通过您要调查的资源导航到Pod。

  2. 从下拉菜单中选择openshift-ovn-kubernetes项目。

  3. 单击您要调查的Pod的名称。

  4. 单击**日志**。默认情况下,对于ovnkube-master,将显示与northd容器关联的日志。

  5. 使用下拉菜单依次选择每个容器的日志。

更改OVN-Kubernetes日志级别

OVN-Kubernetes的默认日志级别为4。要调试OVN-Kubernetes,请将日志级别设置为5。请按照此步骤提高OVN-Kubernetes的日志级别,以帮助您调试问题。

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

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

步骤
  1. 运行以下命令获取OVN-Kubernetes项目中所有Pod的详细信息

    $ oc get po -o wide -n openshift-ovn-kubernetes
    示例输出
    NAME                                     READY   STATUS    RESTARTS       AGE    IP           NODE                                       NOMINATED NODE   READINESS GATES
    ovnkube-control-plane-65497d4548-9ptdr   2/2     Running   2 (128m ago)   147m   10.0.0.3     ci-ln-3njdr9b-72292-5nwkp-master-0         <none>           <none>
    ovnkube-control-plane-65497d4548-j6zfk   2/2     Running   0              147m   10.0.0.5     ci-ln-3njdr9b-72292-5nwkp-master-2         <none>           <none>
    ovnkube-node-5dx44                       8/8     Running   0              146m   10.0.0.3     ci-ln-3njdr9b-72292-5nwkp-master-0         <none>           <none>
    ovnkube-node-dpfn4                       8/8     Running   0              146m   10.0.0.4     ci-ln-3njdr9b-72292-5nwkp-master-1         <none>           <none>
    ovnkube-node-kwc9l                       8/8     Running   0              134m   10.0.128.2   ci-ln-3njdr9b-72292-5nwkp-worker-a-2fjcj   <none>           <none>
    ovnkube-node-mcrhl                       8/8     Running   0              134m   10.0.128.4   ci-ln-3njdr9b-72292-5nwkp-worker-c-v9x5v   <none>           <none>
    ovnkube-node-nsct4                       8/8     Running   0              146m   10.0.0.5     ci-ln-3njdr9b-72292-5nwkp-master-2         <none>           <none>
    ovnkube-node-zrj9f                       8/8     Running   0              134m   10.0.128.3   ci-ln-3njdr9b-72292-5nwkp-worker-b-v78h7   <none>           <none>
  2. 创建一个类似于以下示例的ConfigMap文件,并使用例如env-overrides.yaml之类的文件名

    示例ConfigMap文件
    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: env-overrides
      namespace: openshift-ovn-kubernetes
    data:
      ci-ln-3njdr9b-72292-5nwkp-master-0: | (1)
        # This sets the log level for the ovn-kubernetes node process:
        OVN_KUBE_LOG_LEVEL=5
        # You might also/instead want to enable debug logging for ovn-controller:
        OVN_LOG_LEVEL=dbg
      ci-ln-3njdr9b-72292-5nwkp-master-2: |
        # This sets the log level for the ovn-kubernetes node process:
        OVN_KUBE_LOG_LEVEL=5
        # You might also/instead want to enable debug logging for ovn-controller:
        OVN_LOG_LEVEL=dbg
      _master: | (2)
        # This sets the log level for the ovn-kubernetes master process as well as the ovn-dbchecker:
        OVN_KUBE_LOG_LEVEL=5
        # You might also/instead want to enable debug logging for northd, nbdb and sbdb on all masters:
        OVN_LOG_LEVEL=dbg
    1 指定要设置调试日志级别的节点的名称。
    2 指定_master以设置ovnkube-master组件的日志级别。
  3. 使用以下命令应用ConfigMap文件

    $ oc apply -n openshift-ovn-kubernetes -f env-overrides.yaml
    示例输出
    configmap/env-overrides.yaml created
  4. 使用以下命令重新启动ovnkube Pod以应用新的日志级别

    $ oc delete pod -n openshift-ovn-kubernetes \
    --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-0 -l app=ovnkube-node
    $ oc delete pod -n openshift-ovn-kubernetes \
    --field-selector spec.nodeName=ci-ln-3njdr9b-72292-5nwkp-master-2 -l app=ovnkube-node
    $ oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-node
  5. 要验证ConfigMap文件是否已应用于特定Pod的所有节点,请运行以下命令

    $ oc logs -n openshift-ovn-kubernetes --all-containers --prefix ovnkube-node-<xxxx> | grep -E -m 10 '(Logging config:|vconsole|DBG)'

    其中

    <XXXX>

    指定上一步中Pod的随机字母序列。

    示例输出
    [pod/ovnkube-node-2cpjc/sbdb] + exec /usr/share/ovn/scripts/ovn-ctl --no-monitor '--ovn-sb-log=-vconsole:info -vfile:off -vPATTERN:console:%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m' run_sb_ovsdb
    [pod/ovnkube-node-2cpjc/ovnkube-controller] I1012 14:39:59.984506   35767 config.go:2247] Logging config: {File: CNIFile:/var/log/ovn-kubernetes/ovn-k8s-cni-overlay.log LibovsdbFile:/var/log/ovnkube/libovsdb.log Level:5 LogFileMaxSize:100 LogFileMaxBackups:5 LogFileMaxAge:0 ACLLoggingRateLimit:20}
    [pod/ovnkube-node-2cpjc/northd] + exec ovn-northd --no-chdir -vconsole:info -vfile:off '-vPATTERN:console:%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m' --pidfile /var/run/ovn/ovn-northd.pid --n-threads=1
    [pod/ovnkube-node-2cpjc/nbdb] + exec /usr/share/ovn/scripts/ovn-ctl --no-monitor '--ovn-nb-log=-vconsole:info -vfile:off -vPATTERN:console:%D{%Y-%m-%dT%H:%M:%S.###Z}|%05N|%c%T|%p|%m' run_nb_ovsdb
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.552Z|00002|hmap|DBG|lib/shash.c:114: 1 bucket with 6+ nodes, including 1 bucket with 6 nodes (32 nodes total across 32 buckets)
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.553Z|00003|hmap|DBG|lib/shash.c:114: 1 bucket with 6+ nodes, including 1 bucket with 6 nodes (64 nodes total across 64 buckets)
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.553Z|00004|hmap|DBG|lib/shash.c:114: 1 bucket with 6+ nodes, including 1 bucket with 7 nodes (32 nodes total across 32 buckets)
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.553Z|00005|reconnect|DBG|unix:/var/run/openvswitch/db.sock: entering BACKOFF
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.553Z|00007|reconnect|DBG|unix:/var/run/openvswitch/db.sock: entering CONNECTING
    [pod/ovnkube-node-2cpjc/ovn-controller] 2023-10-12T14:39:54.553Z|00008|ovsdb_cs|DBG|unix:/var/run/openvswitch/db.sock: SERVER_SCHEMA_REQUESTED -> SERVER_SCHEMA_REQUESTED at lib/ovsdb-cs.c:423
  6. 可选:运行以下命令检查ConfigMap文件是否已应用

    for f in $(oc -n openshift-ovn-kubernetes get po -l 'app=ovnkube-node' --no-headers -o custom-columns=N:.metadata.name) ; do echo "---- $f ----" ; oc -n openshift-ovn-kubernetes exec -c ovnkube-controller $f --  pgrep -a -f  init-ovnkube-controller | grep -P -o '^.*loglevel\s+\d' ; done
    示例输出
    ---- ovnkube-node-2dt57 ----
    60981 /usr/bin/ovnkube --init-ovnkube-controller xpst8-worker-c-vmh5n.c.openshift-qe.internal --init-node xpst8-worker-c-vmh5n.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 4
    ---- ovnkube-node-4zznh ----
    178034 /usr/bin/ovnkube --init-ovnkube-controller xpst8-master-2.c.openshift-qe.internal --init-node xpst8-master-2.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 4
    ---- ovnkube-node-548sx ----
    77499 /usr/bin/ovnkube --init-ovnkube-controller xpst8-worker-a-fjtnb.c.openshift-qe.internal --init-node xpst8-worker-a-fjtnb.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 4
    ---- ovnkube-node-6btrf ----
    73781 /usr/bin/ovnkube --init-ovnkube-controller xpst8-worker-b-p8rww.c.openshift-qe.internal --init-node xpst8-worker-b-p8rww.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 4
    ---- ovnkube-node-fkc9r ----
    130707 /usr/bin/ovnkube --init-ovnkube-controller xpst8-master-0.c.openshift-qe.internal --init-node xpst8-master-0.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 5
    ---- ovnkube-node-tk9l4 ----
    181328 /usr/bin/ovnkube --init-ovnkube-controller xpst8-master-1.c.openshift-qe.internal --init-node xpst8-master-1.c.openshift-qe.internal --config-file=/run/ovnkube-config/ovnkube.conf --ovn-empty-lb-events --loglevel 4

检查OVN-Kubernetes Pod网络连接

在OpenShift Container Platform 4.10及更高版本中,连接检查控制器协调集群中的连接验证检查。这些包括Kubernetes API、OpenShift API和各个节点。连接测试的结果存储在openshift-network-diagnostics命名空间中的PodNetworkConnectivity对象中。连接测试每分钟并行执行。

先决条件
  • 访问 OpenShift 命令行界面 (oc)。

  • 具有cluster-admin角色的用户可以访问集群。

  • 您已安装jq

步骤
  1. 要列出当前的PodNetworkConnectivityCheck对象,请输入以下命令

    $ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
  2. 使用以下命令查看每个连接对象的最新成功记录

    $ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \
    -o json | jq '.items[]| .spec.targetEndpoint,.status.successes[0]'
  3. 使用以下命令查看每个连接对象的最新失败记录

    $ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \
    -o json | jq '.items[]| .spec.targetEndpoint,.status.failures[0]'
  4. 使用以下命令查看每个连接对象的最新中断记录

    $ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \
    -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'

    连接检查控制器还会将这些检查的指标记录到Prometheus中。

  5. 运行以下命令查看所有指标

    $ oc exec prometheus-k8s-0 -n openshift-monitoring -- \
    promtool query instant  https://127.0.0.1:9090 \
    '{component="openshift-network-diagnostics"}'
  6. 查看源Pod与openshift api服务之间过去5分钟的延迟

    $ oc exec prometheus-k8s-0 -n openshift-monitoring -- \
    promtool query instant  https://127.0.0.1:9090 \
    '{component="openshift-network-diagnostics"}'