11.5. Cluster API を使用するクラスターのトラブルシューティング
Cluster API を使用したマシン管理は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
このセクションの情報を使用して、発生する可能性のある問題を理解し、回復してください。通常、Cluster API に関する問題のトラブルシューティング手順は、Machine API に関する問題の手順と似ています。
Cluster CAPI Operator とそのオペランドは、openshift-cluster-api namespace でプロビジョニングされますが、Machine API は openshift-machine-api namespace を使用します。namespace を参照する oc コマンドを使用する場合は、必ず正しい namespace を参照してください。
11.5.1. CLI 使用時に目的のオブジェクトを参照する リンクのコピーリンクがクリップボードにコピーされました!
Cluster API を使用するクラスターの場合、OpenShift CLI (oc) コマンドで、Machine API オブジェクトよりも Cluster API オブジェクトが優先されます。
この動作は、Cluster API と Machine API の両方で表されるオブジェクトに対して動作する oc コマンドに影響します。この解説では、マシンを削除する oc delete machine コマンドを例として使用します。
- 原因
ocコマンドを実行すると、ocは Kube API サーバーと通信して、どのオブジェクトに対して操作を行うかを決定します。Kube API サーバーは、ocコマンドが実行されると、アルファベット順で最初に検出されたインストール済みのカスタムリソース定義 (CRD) を使用します。Cluster API オブジェクトの CRD は
cluster.x-k8s.ioグループにあり、Machine API オブジェクトの CRD はmachine.openshift.ioグループにあります。アルファベット順で文字cは文字mの前に来るため、Kube API サーバーは Cluster API オブジェクトの CRD とマッチします。そのため、ocコマンドは Cluster API オブジェクトに対して動作します。- 結果
このような動作により、Cluster API を使用するクラスターで次の予期しない結果が発生する可能性があります。
-
両方のタイプのオブジェクトを含む namespace の場合、
oc get machineなどのコマンドが Cluster API オブジェクトのみを返します。 -
Machine API オブジェクトのみを含む namespace の場合、
oc get machineなどのコマンドが結果を返しません。
-
両方のタイプのオブジェクトを含む namespace の場合、
- 回避策
-
それぞれの完全修飾名を使用することで、意図したタイプのオブジェクトに対して
ocコマンドを動作させることができます。
前提条件
-
cluster-admin権限を持つアカウントを使用してクラスターにアクセスできる。 -
OpenShift CLI (
oc) がインストールされている。
手順
Machine API マシンを削除するには、
oc delete machineコマンドを実行するときに、完全修飾名machine.machine.openshift.ioを使用します。oc delete machine.machine.openshift.io <machine_name>
$ oc delete machine.machine.openshift.io <machine_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cluster API マシンを削除するには、
oc delete machineコマンドを実行するときに、完全修飾名machine.cluster.x-k8s.ioを使用します。oc delete machine.cluster.x-k8s.io <machine_name>
$ oc delete machine.cluster.x-k8s.io <machine_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.5.2. 重複したマシンセットとマシンリソース リンクのコピーリンクがクリップボードにコピーされました!
Machine API リソースの Cluster API リソースへの移行をサポートするクラスターでは、リソースをリスト表示する OpenShift CLI (oc) コマンドの出力と OpenShift Container Platform Web コンソールで、一部のリソースのインスタンスが重複しているように見えます。
- 原因
デフォルトの設定オプションを使用する OpenShift Container Platform クラスターをインストールすると、インストールプログラムは
openshift-machine-apinamespace に以下のインフラストラクチャーリソースをプロビジョニングします。- 3 つのコントロールプレーンマシンを管理する 1 つのコントロールプレーンマシンセット。
- 3 台のコンピュートマシンを管理する 1 つ以上のコンピュートマシンセット。
- スポットインスタンスを管理する 1 つのマシンヘルスチェック。
- コンピュートマシンセットの仕様に従って作成されたコンピュートマシン。
Machine API リソースから Cluster API リソースへの移行をサポートするクラスターでは、双方向同期コントローラーが
openshift-cluster-apinamespace に次の Cluster API リソースを作成します。- 1 つのクラスターリソース。
- 1 つのプロバイダー固有のインフラストラクチャークラスターリソース。
- コンピュートマシンセットに対応する 1 つ以上のマシンテンプレート。
- 3 台のコンピュートマシンを管理する 1 つ以上のコンピュートマシンセット。
- マシンテンプレートとコンピュートマシンセットの仕様に従って作成されたコンピュートマシン。
- コンピュートマシンに対応するインフラストラクチャーマシン。
これらの Cluster API リソースの名前は、
openshift-machine-apinamespace 内の対応するリソースの名前と同じです。- 結果
-
この動作により、リソースをリスト表示する
ocコマンドの出力と OpenShift Container Platform Web コンソールに、重複していると思われるマシンセットおよびマシンリソースのインスタンスが表示されます。 - 回避策
-
リソースの名前が他の namespace 内の対応するリソースと同じであっても、現在の authoritative API を使用するリソースだけがアクティブです。同期コントローラーは、意図しないリコンシリエーションを防ぐために、現在の authoritative API を使用しない対応するリソースをプロビジョニングされていない (
Paused) 状態で作成および維持します。 - 結果
重複していると思われる各リソースのうち、一度にアクティブになるのは 1 つだけです。非アクティブな nonauthoritative リソースは機能に影響を与えません。
重要現在の authoritative API を使用する対応するリソースを削除する場合を除き、現在の authoritative API を使用しない nonauthoritative リソースは削除しないでください。
現在の authoritative API を使用していない nonauthoritative リソースを削除すると、同期コントローラーは、現在の authoritative API を使用する対応するリソースを削除します。詳細は、「予期しないリソース削除動作」を参照してください。
11.5.3. リソース移行のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
別の authoritative API を使用するようにリソースを移行すると、移行プロセス中に問題が発生する可能性があります。また、Cluster API と Machine API の違いにより、予期しない動作が発生する場合もあります。
11.5.3.1. コンピュートマシンの権威ある API タイプ リンクのコピーリンクがクリップボードにコピーされました!
コンピュートマシンの authoritative API は、それを作成する Machine API コンピュートマシンセット内の .spec.authoritativeAPI フィールドと .spec.template.spec.authoritativeAPI フィールドの値によって異なります。
|
|
|
|
|
|
|
|
|
|
|
|
|
新しいコンピュートマシンの |
|
|
|
|
.spec.authoritativeAPI 値が ClusterAPI の場合、Machine API マシンセットは authoritative ではないため、.spec.template.spec.authoritativeAPI 値は使用されません。その結果、Machine API を authoritative として持つコンピュートマシンを作成する唯一の組み合わせは、.spec.authoritativeAPI と .spec.template.spec.authoritativeAPI の値が MachineAPI である場合です。
11.5.3.2. スケーリング後の予期しないマシン数 リンクのコピーリンクがクリップボードにコピーされました!
Machine API と Cluster API 間のリソースの移行をサポートするクラスターでは、コンピュートマシンの数をスケーリングする際に予期しない動作が発生する可能性があります。authoritative API を使用しないコンピュートマシンセットの oc get コマンドの出力には、CURRENT、READY、および AVAILABLE 列に不正確な値が含まれる場合があります。
- 原因
CURRENT、READY、およびAVAILABLE列に設定される値は、コンピュートマシンセットの.statusスタンザから取得されます。authoritative API タイプ間のリソース変換を処理する双方向同期コントローラーは、現在、.statusスタンザ内の値を同期しません。DESIRED列の値は、コンピュートマシンセットの.spec.replicas値を反映します。双方向同期コントローラーは、.specスタンザ内の値を同期します。- 結果
移行されたマシンセットをスケーリングするときに、ユーザーは次の動作を確認することができます。
- 既存のマシンが存在するコンピュートマシンセットから始めます。
- 別の authoritative API を使用するようにマシンセットを移行します。
-
.spec.replicasフィールドに大きい値を設定して、現在の authoritative マシンのセットアップをスケーリングします。 - マシンセットは、要求されたレプリカの数を満たすために、現在の authoritative API を使用してマシンを作成します。
authoritative マシンセットをスケールダウンし、次のいずれかの条件により、現在の authoritative API を使用していないマシンが削除されるようにします。
- 要求されたレプリカの合計数は、現在の authoritative API を使用していないマシンの数よりも少ないです。
- マシンセットのマシン削除ポリシーでは、現在の authoritative API を使用していないマシンが選択されます。
oc getコマンドを実行して、nonauthoritative コンピュートマシンセットのステータスを確認します。-
出力の
DESIRED列の値は、.spec.replicas値を反映します。 -
CURRENT、READY、およびAVAILABLE列の値は、マシンセットをスケーリングする前に存在していたレプリカの元の数を反映します。
-
出力の
- 回避策
-
スケールダウン操作によって、現在の authoritative API を使用していないコンピュートマシンが正常に削除されたことを確認するには、nonauthoritative コンピュートマシンをリスト表示する
oc getコマンドを実行します。 - 結果
-
スケールダウン操作が成功した場合、nonauthoritative コンピュートマシンの
oc getコマンドの出力のカウントは、マシンセットの.spec.replicas値を反映します。
11.5.3.3. ラベルとアノテーションの不完全な同期 リンクのコピーリンクがクリップボードにコピーされました!
ラベルとアノテーションの同期動作は、Machine API と Cluster API で異なります。場合によっては、これらの違いにより、双方向同期コントローラーが、移行中に Cluster API マシン上のラベルを上書きすることがあります。
- 原因
Machine API では、マシンセットのラベルとアノテーションへの変更は既存のマシンとノードに伝播されません。これらの変更は、更新後にデプロイされたマシンにのみ適用されます。
Cluster API を使用すると、マシンセットのラベルとアノテーションへの変更が既存のマシンとノードに伝播されます。マシンセットの authoritative API が Machine API から Cluster API に変更されると、そのラベルは管理する Cluster API マシンに伝播されます。伝播は、Cluster API マシンが authoritative とマークされる前に行われます。
- 結果
- 双方向同期コントローラーは、伝播されたラベルとアノテーションを以前の値で上書きするため、不整合が発生します。この結果は、ラベルまたはアノテーションを削除する場合にのみ発生します。更新および追加のラベルやアノテーションによってこの不整合が発生することはありません。
- 回避策
- この問題に対する回避策はありません。詳細は、OCPBUGS-54333 を参照してください。
11.5.3.4. サポートされていない設定オプション リンクのコピーリンクがクリップボードにコピーされました!
Machine API は Cluster API のすべての設定オプションをサポートしていません。一部の Machine API 設定は、Cluster API に移行できません。追加の設定オプションは、今後のリリースでサポートされる可能性があります。
次の設定を使用しようとすると、移行が失敗したり、エラーが発生したりする可能性があります。
このリストは、すべてを網羅しているわけではありません。
一般的な制限事項
-
NodeDeletionTimeoutフィールドが Cluster API のデフォルト値10sを使用していない限り、Machine API コンピュートマシンは Cluster API に移行できません。 OpenShift Container Platform は、マシンセットの
spec.template.specスタンザまたはマシンのspecスタンザで、次の Cluster API フィールドの使用をサポートしていません。-
version -
readinessGates
-
Machine API は、次の Cluster API drain 設定オプションの使用をサポートしていません。
-
nodeDrainTimeout -
nodeVolumeDetachTimeout -
nodeDeletionTimeout
-
- Cluster API は、マシンからノードへのラベルまたは taint の伝播をサポートしていません。
Amazon Web Services (AWS) の制限
- Machine API コンピュートマシンは AWS ロードバランサーを使用できません。
Machine API は、次の Amazon EC2 Instance Metadata Service (IMDS) 設定オプションの使用をサポートしていません。
-
httpEndpoint -
httpPutResponseHopLimit -
instanceMetadataTags
IMDS 設定オプションを使用する Cluster API マシンテンプレートを Machine API コンピュートマシンセットに移行する場合は、次の動作が予想されます。
- 移行された Machine API マシンセットによって作成されるマシンには、これらのフィールドは含まれません。基盤となるインスタンスは、これらの設定を使用しません。
- 移行されたマシンセットが管理する既存のマシンでは、これらのフィールドが保持されます。基盤となるインスタンスは、引き続きこれらの設定を使用します。
-
OpenShift Container Platform では、次の AWS マシンテンプレートフィールドの使用はサポートされていません。
-
spec.ami.eksLookupType -
spec.cloudInit -
spec.ignition.proxy -
spec.ignition.tls -
spec.imageLookupBaseOS -
spec.imageLookupFormat -
spec.imageLookupOrg -
spec.networkInterfaces -
spec.privateDNSName -
spec.securityGroupOverrides -
spec.uncompressedUserData
-
- Cluster API は、基盤となる AWS EC2 インスタンスが削除された場合、ルート以外の EBS ボリュームの孤立化をサポートしません。インスタンスが終了すると、Cluster API はすべての依存ボリュームを削除します。
- Machine API リソースを Cluster API に移行する場合、Ignition バージョンはハードコードされており、渡されるユーザーデータシークレットと一致しない可能性があります。