24.3. OVN-Kubernetes 문제 해결
OVN-Kubernetes에는 기본 제공 상태 점검 및 로그 소스가 많이 있습니다.
24.3.1. 준비 상태 프로브를 사용하여 OVN-Kubernetes 상태 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
ovnkube-master
및 ovnkube-node
Pod에는 준비 프로브로 구성된 컨테이너가 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스합니다. -
cluster-admin
권한이 있는 클러스터에 액세스할 수 있습니다. -
jq
를 설치했습니다.
프로세스
다음 명령을 실행하여
ovnkube-master
readiness 프로브의 세부 사항을 검토합니다.oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
$ oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-master
Pod의 northbound 및 southbound 데이터베이스 컨테이너의 준비 상태 프로브는 데이터베이스를 호스팅하는 Raft 클러스터의 상태를 확인합니다.다음 명령을 실행하여
ovnkube-node
readiness 프로브의 세부 사항을 검토합니다.oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
$ oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-node
Pod의ovnkube-node
컨테이너에는 ovn-kubernetes CNI 구성 파일의 존재를 확인할 준비 프로브가 있으며, Pod가 실행되고 있지 않거나 Pod를 구성하기 위한 요청을 수락할 준비가 되지 않았음을 나타냅니다.다음 명령을 사용하여 네임스페이스에 대한 프로브 오류를 포함한 모든 이벤트를 표시합니다.
oc get events -n openshift-ovn-kubernetes
$ oc get events -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 Pod의 이벤트만 표시합니다.
oc describe pod ovnkube-master-tp2z8 -n openshift-ovn-kubernetes
$ oc describe pod ovnkube-master-tp2z8 -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터 네트워크 Operator의 메시지와 상태를 표시합니다.
oc get co/network -o json | jq '.status.conditions[]'
$ oc get co/network -o json | jq '.status.conditions[]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 스크립트를 실행하여
ovnkube-master
Pod의 각 컨테이너의준비
상태를 표시합니다.for p in $(oc get pods --selector app=ovnkube-master -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
$ for p in $(oc get pods --selector app=ovnkube-master -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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고예상되는 모든 컨테이너 상태는
true
로 보고하고 있습니다. 준비 상태 프로브의 실패로 상태를false
로 설정합니다.
24.3.2. 콘솔에서 OVN-Kubernetes 경고 보기 링크 복사링크가 클립보드에 복사되었습니다!
경고 UI는 경고 및 관리 경고 규칙과 음소거에 대한 자세한 정보를 제공합니다.
사전 요구 사항
- 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
프로세스(UI)
-
관리자 관점에서 Observe
Alerting 을 선택합니다. 이 관점에서 경고 UI의 세 가지 주요 페이지는 경고, 음소거 및 경고 규칙 페이지입니다. -
Observe
Alerting Alerting rules를 선택하여 OVN-Kubernetes 경고에 대한 규칙을 확인합니다.
24.3.3. CLI에서 OVN-Kubernetes 경고 보기 링크 복사링크가 클립보드에 복사되었습니다!
명령줄에서 경고 및 관리 경고 규칙 및 음소거에 대한 정보를 가져올 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스합니다. -
OpenShift CLI(
oc
)가 설치되어 있어야 합니다. -
jq
를 설치했습니다.
프로세스
다음 명령을 실행하여 활성 또는 실행 경고를 확인합니다.
다음 명령을 실행하여 경고 관리자 경로 환경 변수를 설정합니다.
ALERT_MANAGER=$(oc get route alertmanager-main -n openshift-monitoring \ -o jsonpath='{@.spec.host}')
$ ALERT_MANAGER=$(oc get route alertmanager-main -n openshift-monitoring \ -o jsonpath='{@.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 특정 필드를 요청하는 올바른 권한 부여 세부 정보를 사용하여 경고 관리자 경로 API에
curl
요청을 실행합니다.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)"'
$ 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)"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
다음 명령을 실행하여 경고 규칙을 확인합니다.
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")'
$ 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")'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3.4. CLI를 사용하여 OVN-Kubernetes 로그 보기 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift CLI(oc
)를 사용하여 ovnkube-master
및 ovnkube-node
Pod의 각 Pod 로그를 볼 수 있습니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스합니다. -
OpenShift CLI(
oc
)에 액세스합니다. -
jq
를 설치했습니다.
프로세스
특정 Pod의 로그를 확인합니다.
oc logs -f <pod_name> -c <container_name> -n <namespace>
$ oc logs -f <pod_name> -c <container_name> -n <namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음과 같습니다.
-f
- 선택 사항: 출력에서 로그에 기록되는 내용을 따르도록 지정합니다.
<pod_name>
- pod 이름을 지정합니다.
<container_name>
- 선택 사항: 컨테이너의 이름을 지정합니다. Pod에 여러 컨테이너가 있는 경우 컨테이너 이름을 지정해야 합니다.
<namespace>
- Pod가 실행 중인 네임스페이스를 지정합니다.
예를 들면 다음과 같습니다.
oc logs ovnkube-master-7h4q7 -n openshift-ovn-kubernetes
$ oc logs ovnkube-master-7h4q7 -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f ovnkube-master-7h4q7 -n openshift-ovn-kubernetes -c ovn-dbchecker
$ oc logs -f ovnkube-master-7h4q7 -n openshift-ovn-kubernetes -c ovn-dbchecker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로그 파일의 내용이 출력됩니다.
ovnkube-master
Pod의 모든 컨테이너에서 최신 항목을 검사합니다.for p in $(oc get pods --selector app=ovnkube-master -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
$ for p in $(oc get pods --selector app=ovnkube-master -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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여
ovnkube-master
Pod의 모든 컨테이너에서 마지막 5행을 확인합니다.oc logs -l app=ovnkube-master -n openshift-ovn-kubernetes --all-containers --tail 5
$ oc logs -l app=ovnkube-master -n openshift-ovn-kubernetes --all-containers --tail 5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3.5. 웹 콘솔을 사용하여 OVN-Kubernetes 로그 보기 링크 복사링크가 클립보드에 복사되었습니다!
웹 콘솔에서 ovnkube-master
및 ovnkube-node
Pod의 각 Pod 로그를 볼 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스합니다.
프로세스
-
OpenShift Container Platform 콘솔에서 워크로드
Pod 로 이동하거나 조사하려는 리소스를 통해 Pod로 이동합니다. -
드롭다운 메뉴에서
openshift-ovn-kubernetes
프로젝트를 선택합니다. - 조사할 Pod 이름을 클릭합니다.
-
로그를 클릭합니다. 기본적으로
ovnkube-master
의 경우northd
컨테이너와 연결된 로그가 표시됩니다. - 아래로 메뉴를 사용하여 각 컨테이너의 로그를 차례로 선택합니다.
24.3.5.1. OVN-Kubernetes 로그 수준 변경 링크 복사링크가 클립보드에 복사되었습니다!
OVN-Kubernetes의 기본 로그 수준은 2입니다. OVN-Kubernetes를 디버그하려면 로그 수준을 5로 설정합니다. 문제를 디버깅하는 데 도움이 되도록 OVN-Kubernetes의 로그 수준을 늘리려면 다음 절차를 따르십시오.
사전 요구 사항
-
cluster-admin
권한이 있는 클러스터에 액세스할 수 있습니다. - OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
프로세스
다음 명령을 실행하여 OVN-Kubernetes 프로젝트의 모든 Pod에 대한 자세한 정보를 가져옵니다.
oc get po -o wide -n openshift-ovn-kubernetes
$ oc get po -o wide -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 예제와 유사한
ConfigMap
파일을 생성하고env-overrides.yaml
과 같은 파일 이름을 사용합니다.ConfigMap
파일 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여
ConfigMap
파일을 적용합니다.oc create configmap env-overrides.yaml -n openshift-ovn-kubernetes
$ oc create configmap env-overrides.yaml -n openshift-ovn-kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
configmap/env-overrides.yaml created
configmap/env-overrides.yaml created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여
ovnkube
Pod를 다시 시작하여 새 로그 수준을 적용합니다.oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ip-10-0-217-114.ec2.internal -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ip-10-0-217-114.ec2.internal -l app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ip-10-0-209-180.ec2.internal -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes \ --field-selector spec.nodeName=ip-10-0-209-180.ec2.internal -l app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-master
$ oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-master
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.3.6. OVN-Kubernetes Pod 네트워크 연결 확인 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 4.10 이상에서 연결 확인 컨트롤러는 클러스터의 연결 확인 검사를 오케스트레이션합니다. 여기에는 Kubernetes API, OpenShift API 및 개별 노드가 포함됩니다. 연결 테스트의 결과는 openshift-network-diagnostics
네임스페이스의 PodNetworkConnectivity
오브젝트에 저장됩니다. 연결 테스트는 병렬로 1분마다 수행됩니다.
사전 요구 사항
-
OpenShift CLI(
oc
)에 액세스합니다. -
cluster-admin
역할의 사용자로 클러스터에 액세스합니다. -
jq
를 설치했습니다.
프로세스
현재
PodNetworkConnectivityCheck
오브젝트를 나열하려면 다음 명령을 입력합니다.oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 각 연결 오브젝트의 최근 성공 상태를 확인합니다.
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.successes[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.successes[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 각 연결 오브젝트의 최근 오류를 확인합니다.
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.failures[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.failures[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 사용하여 각 연결 오브젝트의 최근 중단을 확인합니다.
oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또한 연결 확인 컨트롤러는 이러한 검사의 지표를 Prometheus에 기록합니다.
다음 명령을 실행하여 모든 메트릭을 확인합니다.
oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지난 5분 동안 소스 Pod와 openshift api 서비스 간의 대기 시간을 확인합니다.
oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow