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-api
namespace に以下のインフラストラクチャーリソースをプロビジョニングします。- 3 つのコントロールプレーンマシンを管理する 1 つのコントロールプレーンマシンセット。
- 3 台のコンピュートマシンを管理する 1 つ以上のコンピュートマシンセット。
- スポットインスタンスを管理する 1 つのマシンヘルスチェック。
- コンピュートマシンセットの仕様に従って作成されたコンピュートマシン。
Machine API リソースから Cluster API リソースへの移行をサポートするクラスターでは、双方向同期コントローラーが
openshift-cluster-api
namespace に次の Cluster API リソースを作成します。- 1 つのクラスターリソース。
- 1 つのプロバイダー固有のインフラストラクチャークラスターリソース。
- コンピュートマシンセットに対応する 1 つ以上のマシンテンプレート。
- 3 台のコンピュートマシンを管理する 1 つ以上のコンピュートマシンセット。
- マシンテンプレートとコンピュートマシンセットの仕様に従って作成されたコンピュートマシン。
- コンピュートマシンに対応するインフラストラクチャーマシン。
これらの Cluster API リソースの名前は、
openshift-machine-api
namespace 内の対応するリソースの名前と同じです。- 結果
-
この動作により、リソースをリスト表示する
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 バージョンはハードコードされており、渡されるユーザーデータシークレットと一致しない可能性があります。