Red HatでOpenShiftのサポートをしているid:nekopです。
OpenShiftには問題解析のための情報収集を行なうmust-gatherというコマンドおよびイメージ群が用意されています。
特にオプションを指定しないでoc adm must-gather
コマンドを実行した場合、OpenShiftのクラスタを構成するCluster Operatorの情報を取得します。
$ oc adm must-gather
OpenShiftのクラスタを構成するCluster Operatorというのは以下のコマンドで参照できます。
$ oc get co NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE authentication 4.10.15 True False False 25h baremetal 4.10.15 True False False 25h cloud-controller-manager 4.10.15 True False False 25h cloud-credential 4.10.15 True False False 25h cluster-autoscaler 4.10.15 True False False 25h config-operator 4.10.15 True False False 25h console 4.10.15 True False False 3h13m csi-snapshot-controller 4.10.15 True False False 25h dns 4.10.15 True False False 3h14m etcd 4.10.15 True False False 25h image-registry 4.10.15 True False False 25h ingress 4.10.15 True False False 3h13m insights 4.10.15 True False False 25h kube-apiserver 4.10.15 True False False 25h kube-controller-manager 4.10.15 True False False 25h kube-scheduler 4.10.15 True False False 25h kube-storage-version-migrator 4.10.15 True False False 3h14m machine-api 4.10.15 True False False 25h machine-approver 4.10.15 True False False 25h machine-config 4.10.15 True False False 25h marketplace 4.10.15 True False False 25h monitoring 4.10.15 True False False 25h network 4.10.15 True False False 25h node-tuning 4.10.15 True False False 25h openshift-apiserver 4.10.15 True False False 25h openshift-controller-manager 4.10.15 True False False 25h openshift-samples 4.10.15 True False False 25h operator-lifecycle-manager 4.10.15 True False False 25h operator-lifecycle-manager-catalog 4.10.15 True False False 25h operator-lifecycle-manager-packageserver 4.10.15 True False False 25h service-ca 4.10.15 True False False 25h storage 4.10.15 True False False 25h
オプションなしのoc adm must-gather
コマンドでは、上記Cluster Operatorに関連する全てのリソースyaml、関連namespace内のConfigMapやDeployment, Podといったコアリソースyaml、Podのログを収集します。
oc adm must-gather
コマンドはmust-gatherイメージを利用したコンテナをクラスタ上で実行して、must-gatherコンテナが実際の情報収集を行なうという実行モデルになっています。
類似のコマンドとして oc adm inspect
があります。inspectはmust-gatherとは異なり、イメージを利用せず、ocコマンドが直接情報収集を行います。must-gatherコンテナは内部でoc adm inspect
コマンドを利用して情報収集をしています。実際のスクリプトはGitHubのmust-gatherリポジトリで参照できます。
たとえば特定ネームスペースの情報を取得するには以下のようにネームスペースを指定します。
$ oc adm inspect ns/myproject
注意点として、must-gatherはCluster Operatorの情報しか取得しないため、アプリケーションのネームスペースなどの情報は基本的に含まれていません。アプリケーションが関連する問題では、must-gatherとアプリケーションのネームスペースのinspectの両方を取得する必要があります。
omcコマンド
must-gatherやinspectが収集する情報は基本的に全てyamlで保存されるため、人間がそのまま見るにはつらいフォーマットとなりますが、このyamlをoc, kubectlコマンドと同じインタフェースにしてくれるomc, OpenShift Must-Gather Clientというツールがあります。oc adm inspectで保存されるデータ形式を処理することができます。
omcコマンドではまずuseオプションで対象のmust-gatherやinspectのディレクトリを指定します。そのあとは通常のoc, kubectlコマンドと同じオプションで操作します。
$ omc use ./must-gather.local.754454620684116043/ $ omc get nodes NAME STATUS ROLES AGE VERSION ip-10-0-205-20.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb ip-10-0-209-54.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb ip-10-0-235-32.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb
クラスタの状態を確認するときのバターンとして、以下のコマンドを実行します。omc alert rules
はomcコマンドの独自拡張で、must-gather内に保存されたalertの状況を確認できるコマンドです。omc etcd
というコマンドもあります。
- omc get clusterverion
- omc get co
- omc get node
- omc get pod -A
- omc alert rules --status=firing
これらの出力に問題がある場合はcoのstatusフィールドや関連するPodのログなどを参照して、問題をブレークダウンしていきます。
$ omc get clusterversion NAME VERSION AVAILABLE PROGRESSING SINCE STATUS version 4.10.15 True False 28h Cluster version is 4.10.15 $ omc get co NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE authentication 4.10.15 True False False 26h (省略) storage 4.10.15 True False False 28h $ omc get node NAME STATUS ROLES AGE VERSION ip-10-0-205-20.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb ip-10-0-209-54.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb ip-10-0-235-32.ap-northeast-1.compute.internal Ready master,worker 28h v1.23.5+3afdacb $ omc get pod -A $ omc get pod -A | head NAMESPACE NAME READY STATUS RESTARTS AGE openshift-apiserver apiserver-6864bc57fd-92jnv 2/2 Running 1 28h (省略) openshift-service-ca-operator service-ca-operator-989b7b6b9-bcmcz 1/1 Running 2 28h $ omc alert rule --state firing RULE STATE AGE ALERTS ACTIVE SINCE UpdateAvailable firing 7s 1 24 Jun 22 01:44 UTC APIRemovedInNextEUSReleaseInUse firing 29s 3 24 Jun 22 03:10 UTC Watchdog firing 20s 1 24 Jun 22 01:43 UTC AlertmanagerReceiversNotConfigured firing 0s 1 24 Jun 22 01:43 UTC
他のmust-gatherイメージ
Cluster Operatorではない、追加したOperatorの情報を取得するため、Operator側で専用のmust-gatherイメージが提供されているものがあります。以下のようなOperatorです。
- OpenShift Logging
- OpenShift Service Mesh
- OpenShift Serverless
- OpenShift Data Foundation
- OpenShift Virtualization
基本的には各must-gatherイメージについて oc adm must-gather --image=xxx
として指定すればいいのですが、利用頻度が高めのOpenShift Loggingについては慣例としてバージョン指定のため以下の形式で実行します。
$ oc adm must-gather --image=$(oc -n openshift-logging get deployment.apps/cluster-logging-operator \ -o jsonpath='{.spec.template.spec.containers[?(@.name == "cluster-logging-operator")].image}')
各Operatorのmust-gatherイメージで収集されるデータはinspect形式ではないものも多く、それらはomcコマンドで参照することはできません。