20.3. OVN-Kubernetes 문제 해결


OVN-Kubernetes에는 기본 제공 상태 점검 및 로그 소스가 많이 있습니다. 다음 섹션의 지침에 따라 클러스터를 검사합니다. 지원 케이스가 필요한 경우 지원 가이드에 따라 must-gather 를 통해 추가 정보를 수집합니다. 지원에서 지시한 경우에만 -- gather_network_logs 를 사용하십시오.

20.3.1. 준비 상태 프로브를 사용하여 OVN-Kubernetes 상태 모니터링

ovnkube-control-planeovnkube-node Pod에는 컨테이너가 준비 프로브로 구성되어 있습니다.

사전 요구 사항

  • OpenShift CLI(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의 northbound 및 southbound 데이터베이스 컨테이너에 대한 준비 상태 프로브는 데이터베이스 및 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. 클러스터 네트워크 Operator의 메시지 및 상태를 표시합니다.

    $ oc get co/network -o json | jq '.status.conditions[]'
  5. 다음 스크립트를 실행하여 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 ===;  \
    oc get pods -n openshift-ovn-kubernetes $p -o json | jq '.status.containerStatuses[] | .name, .ready'; \
    done
    참고

    모든 컨테이너 상태가 true 로 보고될 것으로 예상합니다. 준비 상태 프로브가 실패하면 상태가 false 로 설정됩니다.

20.3.2. 콘솔에서 OVN-Kubernetes 경고 보기

경고 UI는 경고 및 관리 경고 규칙과 음소거에 대한 자세한 정보를 제공합니다.

사전 요구 사항

  • 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.

프로세스(UI)

  1. 관리자 화면에서 모니터링 경고를 선택합니다. 이 관점에서 경고 UI의 세 가지 주요 페이지는 경고, 음소거경고 규칙 페이지입니다.
  2. 모니터링 경고 경고 규칙을 선택하여 OVN -Kubernetes 경고 규칙을 확인합니다.

20.3.3. 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_MANAGERAlertmanager 인스턴스의 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 'http://localhost: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")'

20.3.4. CLI를 사용하여 OVN-Kubernetes 로그 보기

OpenShift CLI(oc)를 사용하여 ovnkube-masterovnkube-node Pod에서 각 Pod의 로그를 볼 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(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

20.3.5. 웹 콘솔을 사용하여 OVN-Kubernetes 로그 보기

웹 콘솔에서 ovnkube-masterovnkube-node Pod에서 각 Pod의 로그를 볼 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)에 액세스합니다.

프로세스

  1. OpenShift Container Platform 콘솔에서 워크로드 Pod로 이동하거나 조사하려는 리소스를 통해 Pod로 이동합니다.
  2. 드롭다운 메뉴에서 openshift-ovn-kubernetes 프로젝트를 선택합니다.
  3. 조사할 Pod 이름을 클릭합니다.
  4. 로그를 클릭합니다. 기본적으로 ovnkube-master 의 경우 northd 컨테이너와 연결된 로그가 표시됩니다.
  5. 아래쪽 메뉴를 사용하여 각 컨테이너의 로그를 차례로 선택합니다.

20.3.5.1. OVN-Kubernetes 로그 수준 변경

OVN-Kubernetes의 기본 로그 수준은 4입니다. OVN-Kubernetes를 디버깅하려면 로그 수준을 5로 설정합니다. 문제를 디버깅하는 데 도움이 되도록 OVN-Kubernetes의 로그 수준을 높이려면 다음 절차를 따르십시오.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.

프로세스

  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
    ovnkube-master 구성 요소의 로그 수준을 설정하려면 _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

20.3.6. OVN-Kubernetes Pod 네트워크 연결 확인

OpenShift Container Platform 4.10 이상에서 연결 확인 컨트롤러는 클러스터의 연결 확인 검사를 오케스트레이션합니다. 여기에는 Kubernetes API, OpenShift API 및 개별 노드가 포함됩니다. 연결 테스트의 결과는 openshift-network-diagnosticsPodNetworkConnectivity 오브젝트에 저장됩니다. 연결 테스트는 병렬로 1분마다 수행됩니다.

사전 요구 사항

  • OpenShift CLI(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  http://localhost:9090 \
    '{component="openshift-network-diagnostics"}'
  6. 지난 5분 동안 소스 Pod와 openshift api 서비스 간의 대기 시간을 확인합니다.

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

20.3.7. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.