マルチクラスタ設定の問題のトラブルシューティング
このドキュメントでは、マルチクラスタVerrazzanoの使用時に発生する可能性がある一般的な問題とそのトラブルシューティング方法について説明します。
管理クラスタにマルチクラスタ・リソースを作成し、管理対象クラスタにplacement
値を指定した場合、それらのリソースはその管理対象クラスタに作成されます。管理対象クラスタに作成されない場合は、次のステップを使用してトラブルシューティングします:
- 管理対象クラスタが正しく登録され、管理クラスタに接続できることを確認します。
- リソースのネームスペースのVerrazzanoProjectも、その管理対象クラスタに
placement
があることを確認します。 - 管理クラスタのマルチクラスタ・リソースのステータス・フィールドを確認して、ターゲットとなる各管理対象クラスタでのそのリソースのステータスを確認します。
管理クラスタのDNSを更新したときに、管理対象クラスタのステータスをRancherコンソールで確認できず、管理対象クラスタのcattle-cluster-agent
(Rancherエージェント)ログにエラーx509: certificate is valid for <rancher new url>, not <rancher old url>
があることに気づいた場合は、こちらの説明に従って管理対象クラスタを再登録します。
管理対象クラスタの登録および接続の検証
管理クラスタ上の対応するVerrazzanoManagedCluster (VMC)リソースを表示することで、管理対象クラスタが管理クラスタに正常に登録されたことを確認できます。たとえば、managed1
という名前の管理対象クラスタが正常に登録されたことを確認するには:
# on the admin cluster
$ kubectl get verrazzanomanagedcluster managed1 \
-n verrazzano-mc \
-o yaml
前述のコマンドの部分的なサンプル出力
status:
conditions:
- lastTransitionTime: "2021-06-22T21:03:27Z"
message: Ready
status: "True"
type: Ready
lastAgentConnectTime: "2021-06-22T21:06:04Z"
... other fields ...
VMCリソースのステータスでlastAgentConnectTime
を確認します。これは、管理対象クラスタが管理クラスタに最後に接続した時間です。この値が存在しないか、最近(過去3分以内)のものでない場合は、managed1
という名前の管理対象クラスタが管理クラスタに正常に接続できません。これにはいくつかの理由が考えられます:
-
管理対象クラスタに登録YAMLを適用する管理対象クラスタ登録プロセス・ステップが完了しませんでした。完全な設定手順は、こちらを参照してください。
-
管理対象クラスタには、管理クラスタへのネットワーク接続がありません。管理対象クラスタは、管理クラスタへの接続を定期的に試行し、エラーは管理対象クラスタの
verrazzano-application-operator
ポッドのログに報告されます。次のコマンドを使用して、ログを表示します:# on the managed cluster $ kubectl logs \ -n verrazzano-system \ -l app=verrazzano-application-operator
これらのログで接続に問題があることが明らかになった場合、管理クラスタにRancherを含むインストールでは、Verrazzanoのプッシュ登録の詳細または管理対象クラスタへの更新で問題が発生している可能性があります。次に示すように、登録マニフェストをエクスポートし、管理対象クラスタに適用してみます:
# on the admin cluster
kubectl get secret \
-n verrazzano-mc verrazzano-cluster-managed1-manifest \
-o jsonpath={.data.yaml} | base64 --decode > register.yaml
# on the managed cluster
kubectl apply -f register.yaml
ノート: インストールで管理クラスタ上のRancherを無効にした場合は、登録時に指定した管理クラスタのKubernetesサーバー・アドレスをチェックして正しいことを確認し、管理対象クラスタから到達可能であることを確認してください。正しくない場合は、ここの設定手順で説明されている管理対象クラスタ登録プロセスを繰り返す必要があります。
VerrazzanoProjectの配置の検証
Verrazzanoが管理対象クラスタにアプリケーション・ネームスペースを作成するには、そのネームスペースを次のようなVerrazzanoProjectの一部にする必要があります:
- そのネームスペースを含みます。
- その管理対象クラスタを含む
placement
値があります。
アプリケーションのネームスペースに対応するプロジェクトの詳細を表示します。次のコマンド例では、プロジェクト名をmyproject
と仮定します。すべてのプロジェクトは、verrazzano-mc
ネームスペースで作成されるものとします。
# on the admin cluster
$ kubectl get verrazzanoproject myproject \
-n verrazzano-mc \
-o yaml
次の部分的なサンプル出力は、ネームスペースmynamespace
が管理対象クラスタmanaged1
に作成されるプロジェクトのものです。
spec:
placement:
clusters:
- name: managed1
template:
namespaces:
- metadata:
name: mynamespace
....other fields....
マルチクラスタ・リソース・ステータスの確認
管理クラスタでは、各マルチクラスタ・リソースのステータス・フィールドが、配置されている各管理対象クラスタの基礎となるリソースのステータスで更新されます。
次のコマンド例では、ネームスペースmynamespace
にある、管理対象クラスタmanaged1
を含むplacement
値を持つmyapp
という名前のMultiClusterApplicationConfigurationのステータスを表示する方法を示します
$ kubectl get multiclusterapplicationconfiguration myapp \
-n mynamespace \
-o yaml
placementに指定された各クラスタ内の基礎となるリソースのステータスが、次の部分的なサンプル出力に表示されています
status:
clusters:
- lastUpdateTime: "2021-06-22T21:05:04Z"
message: OAM Application Configuration created
name: managed1
state: Succeeded
conditions:
- lastTransitionTime: "2021-06-22T21:03:58Z"
message: OAM Application Configuration created
status: "True"
type: DeployComplete
state: Succeeded
ステータス・メッセージには、操作の成功または失敗に関する追加情報が含まれます。
管理対象クラスタの再登録
次のステップを実行して、管理クラスタに管理対象クラスタを再登録します:コマンドを実行するクラスタは、各コード・ブロックに示されます。
-
管理クラスタで、管理対象クラスタを再登録するために、管理クラスタに新しく作成された登録YAMLファイルをエクスポートします。
# On the admin cluster $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \ get secret verrazzano-cluster-managed1-manifest \ -n verrazzano-mc \ -o jsonpath={.data.yaml} | base64 --decode > register_new.yaml
-
管理対象クラスタで、前のステップでエクスポートした登録ファイルを適用します。
# On the managed cluster $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \ apply -f register_new.yaml # After the command succeeds, you may delete the register_new.yaml file $ rm register_new.yaml
-
管理クラスタで、
kubectl patch clusters.management.cattle.io
を実行して、管理対象クラスタでのRancherエージェントの再デプロイメントをトリガーします。# On the admin cluster $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \ get clusters.management.cattle.io # Sample output NAME AGE c-mzb2h 4h48m local 4h56m $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \ patch clusters.management.cattle.io <the managed cluster name from the above output> \ -p '{"status":{"agentImage":"dummy"}}' --type merge # Sample output cluster.management.cattle.io/c-mzb2h patched