マルチクラスタVerrazzanoのインストール
前提条件
作業を開始する前に、マルチクラスタ環境でのVerrazzanoを参照してください。
概要
マルチクラスタVerrazzano環境を設定するには、2つ以上のKubernetesクラスタが必要です。これらのクラスタの1つは管理クラスタで、その他のクラスタは管理対象クラスタになります。
この手順では、管理クラスタと単一の管理対象クラスタを想定しています。追加の管理対象クラスタごとに、管理対象クラスタの手順を繰り返します。
Verrazzanoのインストール
各KubernetesクラスタにVerrazzanoをインストールします。
- 1つのクラスタで、
dev
またはprod
プロファイルを使用してVerrazzanoをインストールします。これは管理クラスタになります。 - 他のクラスタで、
managed-cluster
プロファイルを使用してVerrazzanoをインストールします。これは管理対象クラスタになります。managed-cluster
プロファイルには、管理対象クラスタに必要なコンポーネントのみが含まれます。 - 環境変数
KUBECONFIG_ADMIN
、KUBECONTEXT_ADMIN
、KUBECONFIG_MANAGED1
およびKUBECONTEXT_MANAGED1
を作成し、それぞれ、管理クラスタおよび管理対象クラスタのkubeconfigファイルおよびコンテキストを指定します。これらの環境変数は、以降の管理対象クラスタの登録ステップで使用します。次に、これらの環境変数を設定する方法の例を示します。$ export KUBECONFIG_ADMIN=/path/to/your/adminclusterkubeconfig $ export KUBECONFIG_MANAGED1=/path/to/your/managedclusterkubeconfig # Lists the contexts in each kubeconfig file $ kubectl --kubeconfig $KUBECONFIG_ADMIN config get-contexts -o=name my-admin-cluster-context some-other-cluster-context $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 config get-contexts -o=name my-managed-cluster-context some-other-cluster2-context # Choose the right context name for your admin and managed clusters from the output shown and set the KUBECONTEXT # environment variables $ export KUBECONTEXT_ADMIN=<admin-cluster-context-name> $ export KUBECONTEXT_MANAGED1=<managed-cluster-context-name>
特定のプロファイルを使用してKubernetesクラスタにVerrazzanoをインストールしてカスタマイズする方法の詳細は、インストレーション・ガイドおよびインストール・プロファイルを参照してください。
管理クラスタへの管理対象クラスタの登録
次の項では、管理対象クラスタを管理クラスタに登録する方法を示します。示されているように、管理クラスタで実行するステップと管理対象クラスタで実行するステップがあります。示されているコマンドは、前に設定した環境変数を使用して適切なクラスタに接続します。
登録前の設定
管理対象クラスタを登録する前に、まず次の項目を設定する必要があります
- 管理対象クラスタのCA証明書を含むシークレット。管理対象クラスタで既知のCAを使用している場合にのみ、このシークレットの
cacrt
フィールドは空にできます。このCA証明書は、アプリケーションとVerrazzanoコンポーネントの両方について、管理対象クラスタからメトリックをスクレイピングするために管理クラスタによって使用されます。 - 管理クラスタの外部から到達可能なアドレスを含むConfigMap。これは、管理クラスタに接続できるように、登録中に管理対象クラスタに対して提供されます。
次の登録前設定ステップに従います
-
管理者クラスタに必要な場合は、管理対象クラスタのCA証明書を取得します。管理クラスタは、管理対象クラスタのPrometheusエンドポイントからメトリックをスクレイピングします。管理対象クラスタVerrazzanoインストールで自己署名証明書またはLetsEncryptステージング証明書を使用する場合は、
https
接続をするために、管理クラスタで管理対象クラスタのCA証明書が必要になります。-
管理対象クラスタ上のVerrazzanoインストールで自己署名証明書を使用するか、LetsEncryptステージング証明書を使用するか、既知の認証局によって署名された証明書を使用するかに応じて、適切な手順を選択します:
-
使用する証明書のタイプが不明な場合は、次の指示に従ってください。
-
verrazzano
リソースがLetsEncryptステージング証明書を使用するように構成されているかどうかを確認するには:# On the managed cluster $ kubectl --kubeconfig $KUBECONFIG_MANAGED1 --context $KUBECONTEXT_MANAGED1 \ describe verrazzano
出力に次の情報が含まれている場合は、LetsEncryptステージング証明書が使用されています。
Cert Manager: Certificate: Acme: Environment: staging Provider: letsEncrypt
-
管理対象クラスタの
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
LetsEncryptステージング証明書
管理対象クラスタの証明書がLetsEncryptステージングの場合、
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 tls-ca-additional \ -n cattle-system \ -o jsonpath="{.data.ca-additional\.pem}" | 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
-
-
-
次の手順を使用して、管理クラスタの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
コマンドを使用して、管理クラスタの内部の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>
-
管理クラスタで、前のステップで見つかった外部からアクセス可能な管理クラスタKubernetesサーバー・アドレスを含むConfigMapを作成します。
# 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つの登録ステップを管理クラスタで実行し、最後のステップを管理対象クラスタで実行します。コマンドを実行するクラスタは、各コード・ブロックに示されます。
管理クラスタで
-
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
-
VerrazzanoManagedClusterリソースが
Ready
ステータスになるまで待ちます。その時点で、登録プロセスを完了するために管理対象クラスタに適用する必要があるYAMLファイルが生成されています。# On the admin cluster $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \ wait --for=condition=Ready \ vmc managed1 -n verrazzano-mc
-
管理対象クラスタを登録するために、作成された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
ステータス・フィールド)。これは、管理クラスタの認証プロキシが、管理対象クラスタ情報の受信リクエストを管理対象クラスタの認証プロキシにルーティングするために使用されます。
管理対象クラスタの登録が完了したことの検証
管理クラスタですべての検証ステップを実行できます。
-
管理対象クラスタが管理クラスタに接続できることを確認します。管理クラスタの
VerrazzanoManagedCluster
リソースのステータスを表示し、lastAgentConnectTime
、prometheusUrl
,およびapiUrl
フィールドが移入されているかどうかを確認します。これは、登録ステップの完了後、最大で2分かかる場合があります。# On the admin cluster $ kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \ get vmc managed1 -n verrazzano-mc -o yaml # Sample output showing the status field spec: .... .... status: apiUrl: https://verrazzano.default.172.18.0.211.nip.io conditions: - lastTransitionTime: "2021-07-07T15:49:43Z" message: Ready status: "True" type: Ready lastAgentConnectTime: "2021-07-16T14:47:25Z" prometheusHost: prometheus.vmi.system.default.172.18.0.211.nip.io
-
管理対象クラスタがRancherに正常に登録されていることを確認します。登録ステップを実行すると、Verrazzanoは管理対象クラスタをRancherに登録します。管理クラスタでRancher UIを表示します。Rancherへの登録が成功した場合、クラスタはRancherのクラスタ・リストにリストされ、
Active
状態になります。Verrazzanoへのアクセスの手順に従って、クラスタのRancher UI URLを見つけることができます。
管理対象クラスタのメトリックが収集されていることの検証
管理クラスタが管理対象クラスタからメトリックを収集していることを確認します。Prometheusの出力には、Verrazzanoクラスタの名前を含むレコードが含まれます(verrazzano_cluster
とラベル付けされます)。
Verrazzanoへのアクセスの手順に従って、クラスタのPrometheus UI URLを見つけることができます。メトリック(node_disk_io_time_seconds_total
など)の問合せを実行します。
Prometheus問合せの出力例
Prometheus UIを使用する別の方法は、コマンドラインからメトリックを問い合せることです。次に示す例は、コマンドラインからPrometheusメトリックを取得する方法です。問合せの出力で、verrazzano_cluster
フィールドが管理対象クラスタの名前に設定されているレスポンスを探します。
# On the admin cluster
$ prometheusUrl=$(kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
get verrazzano -o jsonpath='{.items[0].status.instance.prometheusUrl}')
$ VZPASS=$(kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
get secret verrazzano --namespace verrazzano-system \
-o jsonpath={.data.password} | base64 --decode; echo)
$ curl -k --user verrazzano:${VZPASS} "${prometheusUrl}/api/v1/query?query=node_disk_io_time_seconds_total"
管理対象クラスタのログが収集されていることの検証
管理クラスタが管理対象クラスタからログを収集していることを確認します。出力には、cluster_name
フィールドに管理対象クラスタの名前があるレコードが含まれます。
クラスタのOpenSearchダッシュボードのURLは、「Verrazzanoへのアクセス」の手順に従って確認できます。cluster_name
が管理対象クラスタ名に設定されているログ・レコードのverrazzano-system
データ・ストリームを検索すると、管理対象クラスタのログが生成されます。
OpenSearchダッシュボード画面の出力例
OpenSearchダッシュボードを使用するには、コマンドラインからOpenSearchを問い合せる方法もあります。次に示す例は、コマンドラインからログ・レコードを取得する方法です。問合せの出力で、cluster_name
フィールドが管理対象クラスタの名前に設定されているレスポンスを探します。
# On the admin cluster
$ OS_URL=$(kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
get verrazzano -o jsonpath='{.items[0].status.instance.openSearchUrl}')
$ VZPASS=$(kubectl --kubeconfig $KUBECONFIG_ADMIN --context $KUBECONTEXT_ADMIN \
get secret verrazzano --namespace verrazzano-system \
-o jsonpath={.data.password} | base64 --decode; echo)
$ curl -k --user verrazzano:${VZPASS} -X POST -H 'kbn-xsrf: true' "${OS_URL}/verrazzano-system/_search?size=25"
マルチクラスタVerrazzanoでのアプリケーションの実行
Verrazzanoマルチクラスタ設定が完了し、マルチクラスタHello World Helidonサンプル・アプリケーションに従ってアプリケーションをデプロイできます。
管理クラスタUIの使用
管理クラスタは、管理対象クラスタへのアプリケーションの登録とデプロイを行う中心点として機能します。
管理クラスタのVerrazzano UIでは、次を表示できます:
- この管理クラスタに登録されている管理対象クラスタ。
- この管理クラスタまたはその登録済管理対象クラスタ(あるいはその両方)にあるVerrazzanoProjects。
- この管理クラスタまたはその登録済管理対象クラスタ(あるいはその両方)にあるアプリケーション。