トラブルシューティング
一般的な問題のトラブルシューティング
概要
第1章 インストールされているバージョンの確認
トラブルシューティングを開始するには、インストールされている Red Hat build of MicroShift のバージョンを確認します。
1.1. コマンドラインインターフェイスを使用したバージョンの確認
トラブルシューティングを開始するには、MicroShift のバージョンを知っている必要があります。この情報を取得する方法として、CLI を使用する方法があります。
手順
次のコマンドを実行して、バージョン情報を確認します。
$ microshift version
出力例
Red Hat build of MicroShift Version: 4.15-0.microshift-e6980e25 Base OCP Version: 4.15
1.2. API を使用した MicroShift バージョンの確認
トラブルシューティングを開始するには、MicroShift のバージョンを知っている必要があります。この情報を取得する方法として、API を使用する方法があります。
手順
OpenShift CLI (
oc
) を使用してバージョン番号を取得するには、次のコマンドを実行してkube-public/microshift-version
設定マップを表示します。$ oc get configmap -n kube-public microshift-version -o yaml
出力例
apiVersion: v1 data: major: "4" minor: "13" version: 4.13.8-0.microshift-fa441af87431 kind: ConfigMap metadata: creationTimestamp: "2023-08-03T21:06:11Z" name: microshift-version namespace: kube-public
1.3. etcd のバージョンの確認
MicroShift に含まれる etcd データベースのバージョン情報を取得できます。
手順
ベースデータベースのバージョン情報を表示するには、次のコマンドを実行します。
$ microshift-etcd version
出力例
microshift-etcd Version: 4.15.1 Base etcd Version: 3.5.10
データベースの完全なバージョン情報を表示するには、次のコマンドを実行します。
$ microshift-etcd version -o json
出力例
{ "major": "4", "minor": "15", "gitVersion": "4.15.1", "gitCommit": "2e182312718cc9d267ec71f37dc2fbe2eed01ee2", "gitTreeState": "clean", "buildDate": "2024-01-09T06:51:40Z", "goVersion": "go1.20.10", "compiler": "gc", "platform": "linux/amd64", "patch": "", "etcdVersion": "3.5.10" }
第2章 データのバックアップと復元のトラブルシューティング
データのバックアップと復元に失敗した場合のトラブルシューティングを行うには、まずデータパス、ストレージ設定、ストレージ容量などの基本事項を確認します。
2.1. データバックアップの失敗
rpm-ostree
システムではデータのバックアップが自動的に行われます。rpm-ostree
システムを使用せずに手動バックアップを作成しようとした場合、次の理由によりバックアップが失敗する可能性があります。
- システムの起動後、数分間待たずに MicroShift を正常に停止したため。バックアップを正常に実行するには、システムがヘルスチェックとその他のバックグラウンドプロセスを完了する必要があります。
MicroShift がエラーのために実行を停止した場合、データのバックアップを実行することはできません。
- システムが健全な状態であることを確認してください。
- バックアップを試みる前に、健全な状態で停止してください。
- データ用の十分なストレージがない場合、バックアップは失敗します。MicroShift データ用に十分なストレージがあることを確認してください。
- 十分な権限がない場合、バックアップが失敗する可能性があります。バックアップの作成および必要な設定を実行するための正しいユーザー権限があることを確認してください。
2.2. バックアップログ
- 手動バックアップ中にログがコンソールに出力されます。
rpm-ostree
システムの自動バックアップのログは、MicroShift ジャーナルログの一部として自動的に生成されます。次のコマンドを実行してログを確認できます。$ sudo journalctl -u microshift
2.3. データ復元の失敗
データの復元は、ストレージや権限の問題など、さまざまな理由で失敗する可能性があります。データのバージョンが一致しないと、MicroShift の再起動時に障害が発生する可能性があります。
2.3.1. RPM-OSTree ベースのシステムデータ復元の失敗
データの復元は rpm-ostree
システムでは自動的に行われますが、次のように失敗する可能性があります。
rpm-ostree
システムで復元されるバックアップは、現在のデプロイメントまたはロールバックデプロイメントからのバックアップのみです。異常なシステムではバックアップは作成されません。- 対応するデプロイメントがある最新のバックアップのみが保持されます。対応するデプロイメントがない古いバックアップは自動的に削除されます。
- 通常、データが後のバージョンの MicroShift から復元されることはありません。
- 復元するデータが更新パスと同じバージョン管理パターンに従っていることを確認してください。たとえば、復元先の MicroShift のバージョンが、現在使用している MicroShift データのバージョンよりも古いバージョンである場合、復元が失敗する可能性があります。
2.3.2. RPM ベースの手動データ復元の失敗
rpm-ostree
ではない RPM システムを使用しており、手動バックアップを復元しようとした場合、次の理由により復元が失敗する可能性があります。
MicroShift がエラーのために実行を停止した場合、データを復元することはできません。
- システムが健全な状態であることを確認してください。
- データの復元を試みる前に、健全な状態で起動してください。
受信するデータ用に十分なストレージ領域が割り当てられていない場合、復元は失敗します。
- 現在のシステムストレージが復元されたデータを受け入れるように設定されていることを確認してください。
後のバージョンの MicroShift からデータを復元しようとしたため。
- 復元するデータが更新パスと同じバージョン管理パターンに従っていることを確認してください。たとえば、復元先の MicroShift のバージョンが、使用しようとしている MicroShift データのバージョンよりも古いバージョンである場合、復元が失敗する可能性があります。
2.4. ストレージ移行の失敗
通常、ストレージ移行の失敗は、ある MicroShift から次の MicroShift へのカスタムリソース (CR) の大幅な変更によって発生します。ストレージ移行が失敗した場合は、通常、バージョン間に解決できない不一致があり、手動での確認が必要になります。
第3章 クラスターのトラブルシューティング
Red Hat build of MicroShift クラスターのトラブルシューティングを開始するには、まずクラスターのステータスにアクセスします。
3.1. クラスターのステータスの確認
簡単なコマンドを実行することで、MicroShift クラスターのステータスを確認したり、アクティブな Pod を確認したりできます。次の手順では、クラスターのステータスを確認するために使用できる 3 つのコマンドを示します。必要に応じて 1 つ、2 つ、またはすべてのコマンドを実行し、クラスターのトラブルシューティングに必要な情報を取得できます。
手順
次のコマンドを実行すると、クラスターのステータスが返され、システムのステータスを確認できます。
$ sudo systemctl status microshift
MicroShift の起動に失敗した場合、このコマンドは前回の実行時のログを返します。
オプション: 次のコマンドを実行してログを表示できます。
$ sudo journalctl -u microshift
systemd
ジャーナルサービスのデフォルト設定では、データは揮発性ディレクトリーに保存されます。システムの再起動後もシステムログを保持するには、ログの保持を有効にし、最大ジャーナルデータサイズの制限を設定します。
オプション: MicroShift が実行中の場合は、次のコマンドを入力してアクティブな Pod を表示できます。
$ oc get pods -A
第4章 更新のトラブルシューティング
MicroShift 更新のトラブルシューティングを行うには、次のガイドを使用してください。
MicroShift は、マイナーバージョンから次のマイナーバージョンに順番に更新する必要があります。たとえば、4.14 を 4.15 に更新する必要があります。
4.1. MicroShift の更新のトラブルシューティング
場合によっては、MicroShift の更新に失敗することがあります。そのような場合に備えて、障害の種類とそのトラブルシューティング方法を理解しておくと役立ちます。
4.1.1. MicroShift バージョンの更新順序が原因で更新パスを使用できない
MicroShift は順番に更新する必要があります。マイナーバージョンを 1 つ飛ばして MicroShift を更新しようとすると失敗します。
-
たとえば、現在のバージョンが
4.14.5
で、そのバージョンから4.16.0
に更新しようとすると、executable (4.16.0) is too recent compared to existing data (4.14.5): version difference is 2, maximum allowed difference is 1
と表示され、MicroShift が起動に失敗します。
この例では、まず 4.14.5
を 4.15
のいずれかのバージョンに更新する必要があります。その後、4.16.0
にアップグレードできます。
4.1.2. バージョンの互換性がなく更新パスを使用できない
MicroShift の更新と、Red Hat Enterprise Linux for Edge (RHEL for Edge) または Red Hat Enterprise Linux (RHEL) のバージョンとの間で互換性がない場合、RPM 依存関係エラーが発生します。
次の互換性に関する表を確認してください。
Red Hat Device Edge リリースの互換性に関する表
Red Hat Device Edge の 2 つの製品は、デバイスエッジコンピューティングのための単一のソリューションとして連携して動作します。製品を正しく組み合わせるには、次の表に示すように、それぞれの検証済みリリースを一緒に使用してください。
RHEL for Edge Version(s) | MicroShift バージョン | MicroShift のリリースステータス | MicroShift のサポート対象の更新 |
9.2、9.3 | 4.15 | 一般提供 | 4.15.0 → 4.15.z および 4.15→ 今後のマイナーバージョン |
9.2、9.3 | 4.14 | 一般提供 | 4.14.0 → 4.14.z および 4.14 → 4.15 |
9.2 | 4.13 | テクノロジープレビュー | なし |
8.7 | 4.12 | 開発者プレビュー | なし |
次の更新パスを確認してください。
Red Hat build of MicroShift の更新パス
- RHEL for Edge 9.2 の場合、一般提供バージョン 4.14.0 から 4.14.z
- RHEL 9.2 の場合、一般提供バージョン 4.14.0 から 4.14.z
4.1.3. OSTree 更新の失敗
OSTree システムで更新した場合、Greenboot ヘルスチェックが自動的にログを記録し、システムの健全性に基づいて動作します。Greenboot によるシステムのロールバックにより、障害の発生が判明する場合があります。更新が失敗しても、Greenboot がシステムのロールバックを完了しなかった場合は、後述の「関連情報」セクションにある RHEL for Edge ドキュメントへのリンクを使用してトラブルシューティングを行うことができます。
- Greenboot ログの手動確認
次のコマンドを実行して、Greenboot ログを手動でチェックしてシステムの健全性を確認します。
$ sudo systemctl restart --no-block greenboot-healthcheck && sudo journalctl -fu greenboot-healthcheck
4.1.4. RPM 手動更新の失敗
非 OSTree システムで RPM を使用して更新した場合、Greenboot によって更新の失敗が判明することがあります。ただし、ヘルスチェックは情報を提供するだけです。RPM 手動更新の失敗をトラブルシューティングする際には、次のステップとして、システムログを確認します。Greenboot と sos report
を使用して、MicroShift 更新とホストシステムの両方を確認できます。
4.2. 更新後のジャーナルログの確認
場合によっては、MicroShift の更新に失敗することがあります。そのような場合に備えて、障害の種類とそのトラブルシューティング方法を理解しておくと役立ちます。ジャーナルログは、更新の失敗の診断に役立ちます。
systemd
ジャーナルサービスのデフォルト設定では、データは揮発性ディレクトリーに保存されます。システムの再起動後もシステムログを保持するには、ログの保持を有効にし、最大ジャーナルデータサイズの制限を設定します。
手順
次のコマンドを実行して、MicroShift ジャーナルログを確認します。
$ sudo journalctl -u microshift
次のコマンドを実行して、Greenboot ジャーナルログを確認します。
$ sudo journalctl -u greenboot-healthcheck
次のコマンドを実行して、特定のサービスの起動に関するジャーナルログを確認します。
$ sudo journalctl --boot <boot> -u <service-name>
特定のブートの詳しいログを調べるには、次の 2 つのステップを使用します。まずブートをリストし、取得したリストから必要なものを選択します。
次のコマンドを実行して、ジャーナルログに存在するブートをリスト表示します。
$ sudo journalctl --list-boots
次のコマンドを実行して、必要なブートのジャーナルログを確認します。
$ sudo journalctl --boot <-my-boot-number>
4.3. greenboot ヘルスチェックのステータスの確認
システムに変更を加える前、またはトラブルシューティング中に、greenboot ヘルスチェックのステータスを確認します。次のコマンドのいずれかを使用すると、greenboot スクリプトの実行が完了したことを確認できます。
手順
ヘルスチェックステータスのレポートを表示するには、次のコマンドを使用します。
$ systemctl show --property=SubState --value greenboot-healthcheck.service
-
start
が出力される場合、greenboot チェックがまだ実行中であることを意味します。 -
exited
が出力される場合、チェックが合格し、greenboot が終了したことを意味します。Greenboot は、システムが正常な状態の場合、green.d
ディレクトリー内のスクリプトを実行します。 -
failed
の出力は、チェックが合格しなかったことを意味します。システムがこの状態にある場合、Greenboot はred.d
ディレクトリー内のスクリプトを実行し、システムを再起動する可能性があります。
-
サービスの数値終了コードを示すレポートを表示するには、次のコマンドを使用します。
0
は成功を、0 以外の値は失敗を意味します。$ systemctl show --property=ExecMainStatus --value greenboot-healthcheck.service
Boot Status is GREEN - Health Check SUCCESS
など、ブートステータスに関するメッセージを表示するレポートを表示するには、次のコマンドを使用します。$ cat /run/motd.d/boot-status
第5章 監査ログの確認
監査ログを使用すると、Pod のセキュリティー違反を特定できます。
5.1. 監査ログによる Pod のセキュリティー違反の特定
サーバー監査ログを表示することで、ワークロード上の Pod セキュリティーアドミッション違反を特定できます。次の手順では、監査ログにアクセスして解析し、ワークロードの Pod セキュリティーアドミッション違反を見つける方法を示します。
前提条件
-
jq
がインストールされている。 -
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。
手順
ノード名を取得するために、次のコマンドを実行します。
$ <node_name>=$(oc get node -ojsonpath='{.items[0].metadata.name}')
監査ログを表示するために、次のコマンドを実行します。
$ oc adm node-logs <node_name> --path=kube-apiserver/
出力例
rhel-92.lab.local audit-2023-08-18T18-25-41.663.log rhel-92.lab.local audit-2023-08-19T11-21-29.225.log rhel-92.lab.local audit-2023-08-20T04-16-09.622.log rhel-92.lab.local audit-2023-08-20T21-11-41.163.log rhel-92.lab.local audit-2023-08-21T14-06-10.402.log rhel-92.lab.local audit-2023-08-22T06-35-10.392.log rhel-92.lab.local audit-2023-08-22T23-26-27.667.log rhel-92.lab.local audit-2023-08-23T16-52-15.456.log rhel-92.lab.local audit-2023-08-24T07-31-55.238.log
該当する監査ログを解析するために、次のコマンドを入力します。
$ oc adm node-logs <node_name> --path=kube-apiserver/audit.log \ | jq -r 'select((.annotations["pod-security.kubernetes.io/audit-violations"] != null) and (.objectRef.resource=="pods")) | .objectRef.namespace + " " + .objectRef.name + " " + .objectRef.resource' \ | sort | uniq -c
第6章 応答型の再起動およびセキュリティー証明書
MicroShift はシステム設定の変更に対応し、IP アドレスの変更、クロックの調整、セキュリティー証明書の有効期限などの変更が検出されると再起動します。
6.1. IP アドレスの変更またはクロックの調整
MicroShift は、デバイスの IP アドレスとシステム全体のクロック設定に依存して、ランタイム時に一貫性を保ちます。ただし、これらの設定は、DHCP やネットワークタイムプロトコル (NTP) の更新など、エッジデバイスで変更されることがあります。
このような変更が発生すると、一部の MicroShift コンポーネントが正しく機能しなくなる可能性があります。この状況を軽減するために、MicroShift は IP アドレスとシステム時間を監視し、設定の変更が検出された場合に再起動します。
時計の変更のしきい値は、いずれかの方向で時間の調整が 10 秒以上になった場合に適用されます。ネットワークタイムプロトコル (NTP) サービスによって実行される定期的な時刻調整の誤差が小さいと、再起動が行われません。
6.2. セキュリティー証明書の有効期間
MicroShift 証明書は、次の 2 つの基本グループに分けられます。
- 証明書の有効期間が 1 年間の短期証明書。
- 証明書の有効期間が 10 年間の長期証明書。
ほとんどのサーバーまたはリーフ証明書の有効期限は短くなっています。
有効期間の長い証明書の例は、system:admin user
認証用のクライアント証明書、または kube-apiserver
外部提供証明書の署名者の証明書です。
6.2.1. 証明書のローテーション
有効期限が切れている、または有効期限が近づいている証明書は、継続的な MicroShift 操作を確保するためにローテーションする必要があります。MicroShift が何らかの理由で再起動すると、有効期限が近づいている証明書がローテーションされます。まもなく期限切れになるように設定されている証明書、または期限切れになっている証明書は、MicroShift の自動再起動によってローテーションを実行する可能性があります。
ローテーションされた証明書が認証局である場合は、署名されたすべての証明書がローテーションされます。
6.2.1.1. 短期証明書
以下の状況は、短期間の証明書の有効期間中の MicroShift のアクションを説明します。
回転なし:
- 短期証明書が 5 か月経過していると、ローテーションは発生しません。
再起動時のローテーション:
- 短期証明書が 5 ~ 8 か月経過すると、MicroShift の起動または再起動時にローテーションされます。
ローテーションの自動再起動:
- 短期証明書が 8 か月以上経過している場合、MicroShift は自動的に再起動して新しい証明書をローテーションおよび適用できます。
6.2.1.2. 長期証明書
以下の状況は、証明書の長期有効期間中の MicroShift のアクションを示しています。
回転なし:
- 長期証明書が 8.5 年より短いと、ローテーションは発生しません。
再起動時のローテーション:
- 長期証明書が 8.5 ~ 9 年経過すると、MicroShift の起動または再起動時にローテーションされます。
ローテーションの自動再起動:
- 長期証明書が 9 年以上経過している場合、MicroShift は自動的に再起動して新しい証明書をローテーションおよび適用できます。