マルチクラスタVerrazzano

マルチクラスタ設定およびアプリケーションに関する問題のトラブルシューティング

このドキュメントでは、マルチクラスタ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を確認します。これは、管理対象クラスタが管理クラスタに最後に接続した時間です。この値が存在しない場合、managed1という名前の管理対象クラスタは管理クラスタに一度も正常に接続したことはありません。これにはいくつかの理由が考えられます:

  1. 管理対象クラスタに登録YAMLを適用する管理対象クラスタ登録プロセス・ステップが完了しませんでした。完全な設定手順は、こちらを参照してください。

  2. 管理対象クラスタには、管理クラスタへのネットワーク接続がありません。管理対象クラスタは、管理クラスタへの接続を定期的に試行し、エラーは管理対象クラスタのverrazzano-application-operatorポッドのログに報告されます。次のコマンドを使用して、ログを表示します:

# on the managed cluster
$ kubectl logs \
    -n verrazzano-system \
    -l app=verrazzano-application-operator

これらのログで接続に問題があることが判明した場合は、登録中に指定した管理クラスタのKubernetesサーバー・アドレスをチェックして正しいことを確認し、管理対象クラスタから到達可能であることを確認してください。正しくない場合は、ここの設定手順で説明されている管理対象クラスタ登録プロセスを繰り返す必要があります。

VerrazzanoProjectの配置の検証

Verrazzanoが管理対象クラスタにアプリケーション・ネームスペースを作成するには、そのネームスペースを次のようなVerrazzanoProjectの一部にする必要があります:

  1. そのネームスペースを含みます。
  2. その管理対象クラスタを含む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

ステータス・メッセージには、操作の成功または失敗に関する追加情報が含まれます。

管理対象クラスタの再登録

次のステップを実行して、管理クラスタに管理対象クラスタを再登録します:コマンドを実行するクラスタは、各コード・ブロックに示されます。

  1. 管理クラスタで、管理対象クラスタを再登録するために、管理クラスタに新しく作成された登録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
    
  2. 管理対象クラスタで、前のステップでエクスポートした登録ファイルを適用します。
    # 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
    
  3. 管理クラスタで、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