23.3. OVN-Kubernetes のトラブルシューティング
OVN-Kubernetes には、組み込みのヘルスチェックとログのソースが多数あります。
23.3.1. readiness プローブを使用した OVN-Kubernetes の正常性の監視
ovnkube-master
および ovnkube-node
Pod には、readiness プローブで設定されたコンテナーがあります。
前提条件
-
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'
ovnkube-master
Pod 内のノースバウンドおよびサウスバウンドデータベースコンテナーの readiness プローブは、データベースをホストする Raft クラスターの正常性をチェックします。次のコマンドを実行して、
ovnkube-node
readiness プローブの詳細を確認します。$ oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master \ -o json | jq '.items[0].spec.containers[] | .name,.readinessProbe'
ovnkube-node
Pod 内のovnkube-node
コンテナーには、ovn-kubernetes CNI 設定ファイルの存在を確認する readiness プローブがあります。この設定ファイルがない場合、Pod が実行されていないか、Pod を設定するリクエストを受け入れる準備ができていないません。次のコマンドを使用して、プローブの失敗を含む namespace のすべてのイベントを表示します。
$ oc get events -n openshift-ovn-kubernetes
この Pod だけのイベントを表示します。
$ oc describe pod ovnkube-master-tp2z8 -n openshift-ovn-kubernetes
クラスターネットワーク Operator からのメッセージとステータスを表示します。
$ oc get co/network -o json | jq '.status.conditions[]'
次のスクリプトを実行して、
ovnkube-master
Pod 内の各コンテナーのready
ステータスを表示します。$ 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
注記すべてのコンテナーのステータスが
true
として報告されることが期待されます。readiness プローブが失敗すると、ステータスがfalse
に設定されます。
23.3.2. コンソールでの OVN-Kubernetes アラートの表示
アラート UI は、アラートおよびそれらを規定するアラートルールおよびサイレンスに関する詳細情報を提供します。
前提条件
- 開発者として、またはメトリクスで表示しているプロジェクトの表示権限を持つユーザーとしてクラスターへのアクセスがある。
手順 (UI)
-
Administrator パースペクティブで、Observe
Alerting を選択します。このパースペクティブのアラート UI の主なページには、Alerts、Silences、および Alerting Rules という 3 つのページがあります。 -
Observe
Alerting Alerting Rules を選択して、OVN-Kubernetes アラートのルールを表示します。
23.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}')
次のコマンドを実行して、特定のフィールドを要求する正しい承認の詳細を指定して、アラートマネージャールート 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)"'
次のコマンドを実行して、アラートルールを表示します。
$ 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")'
23.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>
ここでは、以下のようになります。
-f
- オプション: ログに書き込まれている内容に沿って出力することを指定します。
<pod_name>
- Pod の名前を指定します。
<container_name>
- オプション: コンテナーの名前を指定します。Pod に複数のコンテナーがある場合、コンテナー名を指定する必要があります。
<namespace>
- Pod が実行されている namespace を指定します。
以下に例を示します。
$ oc logs ovnkube-master-7h4q7 -n openshift-ovn-kubernetes
$ oc logs -f ovnkube-master-7h4q7 -n openshift-ovn-kubernetes -c ovn-dbchecker
ログファイルの内容が出力されます。
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
次のコマンドを使用して、
ovnkube-master
Pod 内のすべてのコンテナーのすべてのログの最後の 5 行を表示します。$ oc logs -l app=ovnkube-master -n openshift-ovn-kubernetes --all-containers --tail 5
23.3.5. Web コンソールを使用した OVN-Kubernetes ログの表示
Web コンソールで、ovnkube-master
Pod と ovnkube-node
Pod の各 Pod のログを表示できます。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。
手順
-
OpenShift Container Platform コンソールで Workloads
Pods に移動するか、調査するリソースから Pod に移動します。 -
ドロップダウンメニューから
openshift-ovn-kubernetes
プロジェクトを選択します。 - 調査する Pod の名前をクリックします。
-
Logs をクリックします。
ovnkube-master
のデフォルトでは、northd
コンテナーに関連付けられたログが表示されます。 - ドロップダウンメニューを使用して、各コンテナーのログを順番に選択します。
23.3.5.1. OVN-Kubernetes のログレベルの変更
OVN-Kubernetes のデフォルトのログレベルは 2 です。OVN-Kubernetes をデバッグするには、ログレベルを 5 に設定します。次の手順に従って OVN-Kubernetes のログレベルを上げることで、問題のデバッグに役立てることができます。
前提条件
-
cluster-admin
権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
手順
次のコマンドを実行して、OVN-Kubernetes プロジェクト内のすべての Pod の詳細情報を取得します。
$ oc get po -o wide -n openshift-ovn-kubernetes
出力例
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ovnkube-master-84nc9 6/6 Running 0 50m 10.0.134.156 ip-10-0-134-156.ec2.internal <none> <none> ovnkube-master-gmlqv 6/6 Running 0 50m 10.0.209.180 ip-10-0-209-180.ec2.internal <none> <none> ovnkube-master-nhts2 6/6 Running 1 (48m ago) 50m 10.0.147.31 ip-10-0-147-31.ec2.internal <none> <none> ovnkube-node-2cbh8 5/5 Running 0 43m 10.0.217.114 ip-10-0-217-114.ec2.internal <none> <none> ovnkube-node-6fvzl 5/5 Running 0 50m 10.0.147.31 ip-10-0-147-31.ec2.internal <none> <none> ovnkube-node-f4lzz 5/5 Running 0 24m 10.0.146.76 ip-10-0-146-76.ec2.internal <none> <none> ovnkube-node-jf67d 5/5 Running 0 50m 10.0.209.180 ip-10-0-209-180.ec2.internal <none> <none> ovnkube-node-np9mf 5/5 Running 0 40m 10.0.165.191 ip-10-0-165-191.ec2.internal <none> <none> ovnkube-node-qjldg 5/5 Running 0 50m 10.0.134.156 ip-10-0-134-156.ec2.internal <none> <none>
次の例のような
ConfigMap
ファイルを作成し、env-overrides.yaml
などのファイル名を使用します。ConfigMap
ファイルの例kind: ConfigMap apiVersion: v1 metadata: name: env-overrides namespace: openshift-ovn-kubernetes data: ip-10-0-217-114.ec2.internal: | 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 ip-10-0-209-180.ec2.internal: | # 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
次のコマンドを使用して、
ConfigMap
ファイルを適用します。$ oc apply -n openshift-ovn-kubernetes -f env-overrides.yaml
出力例
configmap/env-overrides.yaml created
次のコマンドを使用して
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-209-180.ec2.internal -l app=ovnkube-node
$ oc delete pod -n openshift-ovn-kubernetes -l app=ovnkube-master
23.3.6. OVN-Kubernetes Pod ネットワーク接続のチェック
OpenShift Container Platform 4.10 以降の接続チェックコントローラーは、クラスター内の接続検証チェックをオーケストレーションします。これには、Kubernetes API、OpenShift API、および個々のノードが含まれます。接続テストの結果は、openshift-network-diagnostics
namespace の PodNetworkConnectivity
オブジェクトに保存されます。接続テストは、1 分ごとに並行して実行されます。
前提条件
-
OpenShift CLI (
oc
) へのアクセスがある。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
jq
がインストールされている。
手順
現在の
PodNetworkConnectivityCheck
オブジェクトをリスト表示するには、以下のコマンドを入力します。$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics
次のコマンドを使用して、各接続オブジェクトの最新の成功を表示します。
$ 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.failures[0]'
次のコマンドを使用して、各接続オブジェクトの最新の停止を表示します。
$ oc get podnetworkconnectivitychecks -n openshift-network-diagnostics \ -o json | jq '.items[]| .spec.targetEndpoint,.status.outages[0]'
接続チェックコントローラーは、これらのチェックからのメトリクスも Prometheus に記録します。
次のコマンドを実行して、すべてのメトリクスを表示します。
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'
過去 5 分間のソース Pod と openshift api サービス間のレイテンシーを表示します。
$ oc exec prometheus-k8s-0 -n openshift-monitoring -- \ promtool query instant http://localhost:9090 \ '{component="openshift-network-diagnostics"}'