拡張マルチクラスタ・インストール

Verrazzanoマルチクラスタ・インストールには、Rancherをお薦めします。ただし、管理クラスタでRancherが有効になっていない場合、登録ではいくつかの追加ステップを実行する必要があります。次の手順は、VerrazzanoでRancherが有効になっていない場合に管理対象クラスタを登録する方法を示しています。

前提条件

開始する前に、「マルチクラスタVerrazzanoのインストール」の説明に従って、前提条件を完了し、Verrazzanoをインストールしてください。

登録前の設定

管理対象クラスタを登録する前に、まず次の項目を設定する必要があります:

  • 管理対象クラスタのCA証明書を含むシークレット。管理対象クラスタで既知のCAを使用している場合にのみ、このシークレットのcacrtフィールドは空にできます。このCA証明書は、アプリケーションとVerrazzanoコンポーネントの両方について、管理対象クラスタからメトリックをスクレイピングするために管理クラスタによって使用されます。
  • 管理クラスタの外部から到達可能なアドレスを含むConfigMap。これは、管理クラスタに接続できるように、登録中に管理対象クラスタに対して提供されます。

次の登録前設定ステップに従います

  1. 管理クラスタに必要な場合は、管理対象クラスタのCA証明書を取得します。管理クラスタは、管理対象クラスタのPrometheusエンドポイントからメトリックをスクレイピングします。管理対象クラスタVerrazzanoインストールで自己署名証明書を使用する場合は、https接続をするために、管理クラスタで管理対象クラスタのCA証明書が必要になります。

    • 管理対象クラスタ上のVerrazzanoインストールで自己署名証明書を使用するか、既知の認証局によって署名された証明書を使用するかに応じて、適切な手順を選択します:

    • 使用する証明書のタイプが不明な場合は、次の指示に従ってください。

      • 管理対象クラスタのverrazzano-systemネームスペースでverrazzano-tlsシークレットのca.crtフィールドを確認するには:

        # On the managed cluster
        $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \
        -n verrazzano-system get secret verrazzano-tls -o jsonpath='{.data.ca\.crt}'
        
        この値が空の場合、管理対象クラスタは既知の認証局によって署名された証明書を使用しています。それ以外の場合、管理対象クラスタは自己署名証明書を使用しています。

        よく知られているCA

        この場合、追加の構成は必要ありません。

        自己署名証明書

        管理対象クラスタの証明書が自己署名の場合、cacrtフィールドの値として、管理対象クラスタのCA証明書を含むmanaged1.yamlというファイルを作成します。次のコマンドでは、管理対象クラスタのCA証明書がMGD_CA_CERTという環境変数に保存されます。次に、kubectlコマンドの--dry-runオプションを使用して、managed1.yamlファイルを生成します。

        # On the managed cluster
        $ export MGD_CA_CERT=$(kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \
           get secret verrazzano-tls \
           -n verrazzano-system \
           -o jsonpath="{.data.ca\.crt}" | base64 --decode)
        $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \
        create secret generic "ca-secret-managed1" \
        -n verrazzano-mc \
        --from-literal=cacrt="$MGD_CA_CERT" \
        --dry-run=client \
        -o yaml > managed1.yaml
        

        管理対象クラスタのCA証明書を含む管理クラスタにシークレットを作成します。このシークレットは、管理対象クラスタからのメトリックのスクレイピングに使用されます。前のステップで作成されたmanaged1.yamlファイルは、このステップへの入力を提供します。

        # On the admin cluster
        $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
           apply -f managed1.yaml
        
        # After the command succeeds, you may delete the managed1.yaml file
        $ rm managed1.yaml
        

  2. 次の手順を使用して、管理クラスタのKubernetes APIサーバー・アドレスを取得します。このアドレスは、管理対象クラスタからアクセスできる必要があります。

    ほとんどのKubernetesクラスタ

    kindクラスタを除くほとんどのタイプのKubernetesクラスタでは、管理クラスタの外部からアクセス可能なAPIサーバー・アドレスをkubeconfigファイルから見つけることができます。

    # View the information for the admin cluster in your kubeconfig file
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN config view --minify
    
    # Sample output
    apiVersion: v1
    kind: Config
    clusters:
    - cluster:
      certificate-authority-data: DATA+OMITTED
      server: https://11.22.33.44:6443
      name: my-admin-cluster
    contexts:
    ....
    ....
    

    このコマンドの出力では、serverフィールドに管理クラスタAPIサーバーのURLが見つかります。ADMIN_K8S_SERVER_ADDRESS変数の値をこのURLに設定します。
    $ export ADMIN_K8S_SERVER_ADDRESS=<the server address from the config output>
    

    kindクラスタ

    kindクラスタはDockerコンテナ内で実行されます。管理クラスタと管理対象クラスタがkindクラスタの場合、kubeconfigファイル内の管理クラスタのAPIサーバー・アドレスは、一般にホスト・マシン上のローカル・アドレスであり、管理対象クラスタからはアクセスできません。kindコマンドを使用して、管理クラスタのinternal kubeconfigを取得します。これには、同じマシン上の他のkindクラスタからアクセス可能な(つまり、同じDockerネットワークでアクセス可能な)サーバー・アドレスが含まれます。

    $ kind get kubeconfig --internal --name <your-admin-cluster-name> | grep server
    
    このコマンドの出力では、serverフィールドに管理クラスタAPIサーバーのURLが見つかります。ADMIN_K8S_SERVER_ADDRESS変数の値をこのURLに設定します。
    $ export ADMIN_K8S_SERVER_ADDRESS=<the server address from the config output>
    

  3. 管理クラスタで、前のステップで見つかった外部からアクセス可能な管理クラスタKubernetesサーバー・アドレスを含むConfigMapを作成します。Verrazzanoで検出するには、このConfigMapにverrazzano-admin-clusterという名前が付いている必要があります。

    # On the admin cluster
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
    apply -f <<EOF -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: verrazzano-admin-cluster
      namespace: verrazzano-mc
    data:
      server: "${ADMIN_K8S_SERVER_ADDRESS}"
    EOF
    

登録ステップ

最初の3つの登録ステップを管理クラスタで実行し、最後のステップを管理対象クラスタで実行します。コマンドを実行するクラスタは、各コード・ブロックに示されます。

管理クラスタで

  1. managed1という名前の管理対象クラスタの登録プロセスを開始するには、管理クラスタでVerrazzanoManagedClusterリソースを適用します。

    # On the admin cluster
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
        apply -f <<EOF -
    apiVersion: clusters.verrazzano.io/v1alpha1
    kind: VerrazzanoManagedCluster
    metadata:
      name: managed1
      namespace: verrazzano-mc
    spec:
      description: "Test VerrazzanoManagedCluster object"
      caSecret: ca-secret-managed1
    EOF
    

  2. VerrazzanoManagedClusterリソースがReadyステータスになるまで待ちます。その時点で、登録プロセスを完了するために管理対象クラスタに適用する必要があるYAMLファイルが生成されています。

    # On the admin cluster
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
        wait --for=condition=Ready \
        vmc managed1 -n verrazzano-mc
    

  3. 管理対象クラスタを登録するために、作成された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.yaml
    

管理対象クラスタで

前のステップでエクスポートした登録ファイルを管理対象クラスタに適用します。

# On the managed cluster
$ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \
    apply -f register.yaml

# After the command succeeds, you may delete the register.yaml file
$ rm register.yaml

このステップの後、管理対象クラスタは管理クラスタへの定期的な接続を開始します。管理対象クラスタが管理クラスタに接続すると、次の情報を使用して、この管理対象クラスタのVerrazzanoManagedClusterリソースのStatusフィールドが更新されます:

  • 管理対象クラスタから行われた最新接続のタイムスタンプ(lastAgentConnectTimeステータス・フィールド)。
  • 管理対象クラスタで実行されているPrometheusインスタンスのホスト・アドレス(prometheusHostステータス・フィールド)。その後これは、管理クラスタが管理対象クラスタからメトリックをスクレイピングするために使用されます。
  • 管理対象クラスタのAPIアドレス(apiUrlステータス・フィールド)。これは、管理クラスタの認証プロキシが、管理対象クラスタ情報の受信リクエストを管理対象クラスタの認証プロキシにルーティングするために使用されます。

管理対象クラスタの登録が完了したことの検証

これらのステップが完了したら、「管理対象クラスタの登録が完了したことの検証」に戻ります。

Rancherを使用しない管理対象クラスタの登録解除

ノート: 次の手順は、管理クラスタでRancherが有効になっていないVerrazzanoマルチクラスタ環境用です。Rancherが有効な場合は、「管理対象クラスタの登録解除」を参照してください。

Verrazzanoマルチクラスタ環境の一部にする必要がなくなったために管理対象クラスタを登録解除する場合は、次のステップを実行します。

管理クラスタで

  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.yaml
    

  2. 管理クラスタのVerrazzanoManagedClusterリソースを削除します。

    # On the admin cluster
    $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
        delete vmc -n verrazzano-mc managed1
    

管理対象クラスタで

管理対象クラスタで、前のステップでエクスポートした登録ファイル内のリソースを削除します。

# On the managed cluster
$ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \
    delete -f register.yaml
# After the command succeeds, you may delete the register.yaml file
$ rm register.yaml