マルチクラスター Contrail の管理
概要 マルチクラスターのインストールに固有のライフ サイクル管理タスクを実行する方法について説明します。
このセクションでは、マルチクラスターインストールに固有のタスクについて説明します。マルチクラスター・インストール内の特定のクラスター内の管理タスク (クラスター内のノードの追加と削除、クラスターのアップグレードなど) を実行する場合は、「 単一クラスター Contrail の管理」を参照してください。
ワークロード クラスターのアタッチ
- リリース 22.1 でカーネル モード データ プレーンを実行しているワークロード クラスターをアタッチする
- リリース 22.2 以降でカーネル モード データ プレーンを実行しているワークロード クラスターをアタッチする
リリース 22.1 でカーネル モード データ プレーンを実行しているワークロード クラスターをアタッチする
リリース 22.1 で分散ワークロード クラスター (カーネル モード データ プレーンを実行) を作成し、中央クラスターにアタッチするには、次の手順を実行します。DPDK データ プレーンを実行する場合は、このドキュメントの DPDK の例から推定します。
この例の手順で使用するマニフェストは、 multi-cluster/dist-kernel/distributed_cluster_deployer.yaml と multi-cluster/dist-kernel/deployer_ha_kernel.yaml です。手順では、これらのマニフェストを マニフェスト ディレクトリに 配置したことを前提としています。
- 「インストールする前に」の説明に従って、分散ワークロード クラスターを準備します。
- 分散ワークロード クラスターを作成します。
新しいクラスタを作成します。 「Kubernetes クラスターの作成 」の手順に従うことも、独自の方法でクラスターを作成することもできます。クラスターには、以下の特性が必要です。
- クラスターにCNIプラグインはありません。
- ノードローカルDNSを無効にします。
- マルチクラスター設定では、各クラスターで異なるポッドとサービスサブネットを設定する必要があります。これらのサブネットは、マルチクラスター内で一意にする必要があります。
- マルチクラスタ設定では、各クラスタのノードに異なるノード名を設定する必要があります。ノード名は、マルチクラスター全体で一意である必要があります。
- 分散ワークロード クラスターに Contrail コンポーネントをインストールします。
- ワークロード クラスターで、Contrail-deploy 名前空間を作成します。
user@workload:~/contrail$ kubectl create ns contrail-deploy
- ワークロード クラスターで、中央クラスターから kubeconfig をコピーします。ここでは、この central-cluster-kubeconfig と呼びます。
user@workload:~/contrail$ scp user@central:~/.kube/config central-cluster-kubeconfig
- ワークロード クラスターで、中央クラスターから Kubernetes シークレットを kubeconfig に作成し、そのシークレットに名前を付けますcentral-kubeconfig。
メモ:
シークレット central-kubeconfigには名前を付けなければなりません。
user@workload:~/contrail$ kubectl create secret generic central-kubeconfig -n contrail-deploy --from-file=kubeconfig=/root/contrail/central-cluster-kubeconfig
メモ:central-cluster-kubeconfig ファイルへの絶対パスを指定する必要があります。
- ワークロード クラスターで、デプロイ者マニフェストを適用します。導入者は Contrail コンポーネントのライフサイクル管理を提供します。
このマニフェストには、前のサブステップで作成した central-kubeconfig シークレットへの参照が含まれています。
user@workload:~/contrail$ kubectl apply -f manifests/distributed_cluster_deployer.yaml
- Contrail-deployer が起動したことを確認します。数分かかる場合があります。
user@workload:~/contrail# kubectl get pods -n contrail-deploy NAME READY STATUS RESTARTS AGE contrail-k8s-deployer-6458859585-xhwx6 1/1 Running 0 6m
- ワークロード クラスターで、Contrail-deploy 名前空間を作成します。
- 中央クラスターで、新しいワークロード クラスター用の kubemanager を作成して、新しいワークロード クラスターをアタッチします。
- 中央クラスターで、分散ワークロード・クラスターから kubeconfig をコピーします。ここではワークロードクラスター-kubeconfigと呼びます
user@central:~/contrail$ scp user@workload:~/.kube/config workload-cluster-kubeconfig
- 中央クラスターで、分散ワークロード クラスター kubeconfig から Kubernetes シークレットを作成し、そのシークレットのわかりやすい名前(などworkload-kubeconfig)を選択します。
user@central:~/contrail$ kubectl create secret generic workload-kubeconfig -n contrail --from-file=kubeconfig=/root/contrail/workload-cluster-kubeconfig
- 次の内容を含む kubemanager マニフェストを作成します。マニフェストのわかりやすい名前( kubemanager-cluster1.yaml など)を選択します。
apiVersion: configplane.juniper.net/v1alpha1 kind: Kubemanager metadata: name: <CR name> namespace: contrail spec: common: containers: - image: <contrail-image-repository> name: contrail-k8s-kubemanager nodeSelector: node-role.kubernetes.io/master: "" podV4Subnet: <pod-v4-subnet-of-remote-cluster> serviceV4Subnet: <service-v4-subnet-of-remote-cluster> podV6Subnet: <pod-v6-subnet-of-remote-cluster> serviceV6Subnet: <service-v6-subnet-of-remote-cluster> clusterName: <worker-cluster-name> kubeconfigSecretName: <secret-name> enableNad: <true/false> listenerPort: <listener-port> constantRouteTargetNumber: <rt-number>
表 1:Kubemanager CRD パラメータ の意味 例 名前 カスタム リソースの名前。 kubemanager-cluster1 イメージ 画像をプルするリポジトリ hub.juniper.net/cn2/contrail-k8s-kubemanager:22.1.0.93 podV4Subnet 先ほど分散ワークロードクラスターに設定したIPv4ポッドサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
10.234.64.0 serviceV4Subnet 先ほど分散ワークロード クラスター用に設定した IPv4 サービスサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
10.234.0.0/18 podV6Subnet 先ほど分散ワークロードクラスター用に設定したIPv6ポッドサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
fd85:ee78:d8a6:8608:::1:0000/112 serviceV6Subnet 先ほど分散ワークロード クラスター用に設定した IPv6 サービスサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
fd85:ee78:d8a6:8608::1000/116 クラスタ名 ワークロード クラスターの名前。 ワークロードクラスター kubeconfigSecretName ワークロード クラスター kubeconfig トークンを含むシークレットの名前。 workload-kubeconfig EnableNad True または false(ネットワーク アドレス定義を有効にする、または有効にしない場合) True リスナーポート Contrail コントローラーがこのワークロード クラスターとの通信をリッスンするポート。 最初のワークロード・クラスターのポートを 19446 に設定し、後続のワークロード・クラスターごとに 1 ずつ増分します。
19446 定数RouteTargetNumber このワークロード クラスターのルート ターゲット。 最初のワークロード・クラスターのルート・ターゲットを 7699 に設定し、後続のワークロード・クラスターごとに 100 ずつ増分します。
7699 - 中央のクラスターで、作成した kubemanager マニフェストを適用します。
user@central:~/contrail$ kubectl apply -f manifests/kubemanager-cluster1.yaml
- 中央クラスターで、ワークロード クラスターの名前空間が表示されていることを確認します。
kubectl get ns
名前空間の形式は次のとおりです
<kubemanager-name>-<workload-cluster-name>-<namespace>
。例えば:kubemanager-workload1-workload-cluster-contrail
- 中央クラスターで、分散ワークロード・クラスターから kubeconfig をコピーします。ここではワークロードクラスター-kubeconfigと呼びます
- ワークロード クラスターで、必要に応じて deployer_ha_kernel.yaml マニフェストを変更します。deployer_ha_kernel.yaml マニフェストは、セットアップに合わせて調整する必要があるサンプルです。
提供される deployer_ha_kernel.yaml ファイルは、さまざまなクラスター ノードに対して、サンプル クラスターとは異なる異なるネットワークを指定します。クラスタ内のクラスタノードはすべて同じデータネットワークに接続します。 deployer_ha_kernel.yaml を変更して、追加のネットワークと追加のノード構成を削除する必要があります。
- 追加のネットワークを削除します。
deployer_ha_kernel.yaml を編集して、ConfigMap を定義する次の行を
contrail-network-config
削除します。--- apiVersion: v1 kind: ConfigMap metadata: name: contrail-network-config namespace: contrail data: networkConfig: | controlDataNetworks: - subnet: 5.5.6.0/24 gateway: 5.5.6.254 - subnet: 5.5.7.0/24 gateway: 5.5.7.254 - subnet: 5.5.8.0/24 gateway: 5.5.8.254 - subnet: 5.5.14.0/24 gateway: 5.5.14.254
- vRouter を定義する以下の行を
contrail-vrouter-nodes-7
削除します。--- apiVersion: dataplane.juniper.net/v1alpha1 kind: Vrouter metadata: name: contrail-vrouter-nodes-7 namespace: contrail spec: clusterName: distributed-cluster common: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: chassis operator: In values: - "5d10s3-node3" imagePullSecrets: - name: registrypullsecret containers: - image: hub.juniper.net/cn2/contrail-vrouter-agent:22.1.0.93 name: contrail-vrouter-agent - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-watcher - image: hub.juniper.net/cn2/contrail-telemetry-exporter:22.1.0.93 name: contrail-vrouter-telemetry-exporter initContainers: - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-init - image: hub.juniper.net/cn2/contrail-cni-init:22.1.0.93 name: contrail-cni-init maxUnavailablePercentage: 100%
- 同様に セクションを完全に削除します
contrail-vrouter-nodes-8
- 同様に セクションを完全に削除します
contrail-vrouter-nodes-14
- 最後に以下
contrail-vrouter-nodes
のセクションを追加します。--- apiVersion: dataplane.juniper.net/v1alpha1 kind: Vrouter metadata: name: contrail-vrouter-nodes namespace: contrail spec: clusterName: distributed-cluster common: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: NotIn values: - "" imagePullSecrets: - name: registrypullsecret containers: - image: hub.juniper.net/cn2/contrail-vrouter-agent:22.1.0.93 name: contrail-vrouter-agent - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-watcher - image: hub.juniper.net/cn2/contrail-telemetry-exporter:22.1.0.93 name: contrail-vrouter-telemetry-exporter initContainers: - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-init - image: hub.juniper.net/cn2/contrail-cni-init:22.1.0.93 name: contrail-cni-init maxUnavailablePercentage: 100%
- 追加のネットワークを削除します。
- 最後に、ワークロード クラスターに vRouter をインストールします。
user@workload:~/contrail$ kubectl apply -f manifests/deployer_ha_kernel.yaml
数分後、すべてのポッドが稼働していることを確認します。
user@workload:~# kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS contrail-deploy contrail-k8s-deployer-6c88f6798f-jjx96 1/1 Running 3 contrail contrail-vrouter-masters-phttx 3/3 Running 0 contrail contrail-vrouter-nodes-xkkk8 3/3 Running 0 kube-system coredns-657959df74-26jrk 1/1 Running 0 kube-system dns-autoscaler-b5c786945-m4vtz 1/1 Running 0 kube-system kube-apiserver-k8s-cp0 1/1 Running 0 kube-system kube-controller-manager-k8s-cp0 1/1 Running 0 kube-system kube-proxy-5rbp4 1/1 Running 0 kube-system kube-proxy-kr95n 1/1 Running 0 kube-system kube-scheduler-k8s-cp0 1/1 Running 0 kube-system nginx-proxy-k8s-worker0 1/1 Running 0
リリース 22.2 以降でカーネル モード データ プレーンを実行しているワークロード クラスターをアタッチする
リリース 22.2 以降の中央クラスターに、分散ワークロード クラスター (カーネル モード のデータ プレーンを実行) を作成してアタッチするには、次の手順を実行します。DPDK データ プレーンを実行する場合は、このドキュメントの DPDK の例から推定します。
この例の手順で使用するマニフェストは、 マルチクラスター/distributed_cluster_deployer_example.yaml と multi-cluster/distributed_cluster_vrouter_example.yaml です。手順では、これらのマニフェストを マニフェスト ディレクトリに 配置したことを前提としています。
- 「インストールする前に」の説明に従って、分散ワークロード クラスターを準備します。
- 分散ワークロード クラスターを作成します。
新しいクラスタを作成します。 「Kubernetes クラスターの作成 」の手順に従うことも、独自の方法でクラスターを作成することもできます。クラスターには、以下の特性が必要です。
- クラスターにCNIプラグインはありません。
- ノードローカルDNSを無効にします。
- マルチクラスター設定では、各クラスターで異なるポッドとサービスサブネットを設定する必要があります。これらのサブネットは、マルチクラスター内で一意にする必要があります。
- マルチクラスタ設定では、各クラスタのノードに異なるノード名を設定する必要があります。ノード名は、マルチクラスター全体で一意である必要があります。
- 分散ワークロード クラスターに Contrail コンポーネントをインストールします。
- ワークロード クラスターで、中央クラスターから kubeconfig をコピーします。ここでは、この central-cluster-kubeconfig と呼びます。
user@workload:~/contrail$ scp user@central:~/.kube/config central-cluster-kubeconfig
- ワークロード クラスターで、中央クラスターから Kubernetes シークレットを kubeconfig に作成し、そのシークレットに名前を付けますcentral-kubeconfig。
メモ:
シークレット central-kubeconfigには名前を付けなければなりません。
user@workload:~/contrail$ kubectl create secret generic central-kubeconfig -n contrail-deploy --from-file=kubeconfig=/root/contrail/central-cluster-kubeconfig
メモ:central-cluster-kubeconfig ファイルへの絶対パスを指定する必要があります。
- ワークロード クラスターで、デプロイ者マニフェストを適用します。導入者は Contrail コンポーネントのライフサイクル管理を提供します。
このマニフェストには、前のサブステップで作成した central-kubeconfig シークレットへの参照が含まれています。
user@workload:~/contrail$ kubectl apply -f manifests/distributed_cluster_deployer_example.yaml
- Contrail-deployer が起動したことを確認します。数分かかる場合があります。
user@workload:~/contrail# kubectl get pods -n contrail-deploy NAME READY STATUS RESTARTS AGE contrail-k8s-deployer-6458859585-xhwx6 1/1 Running 0 6m
- ワークロード クラスターで、中央クラスターから kubeconfig をコピーします。ここでは、この central-cluster-kubeconfig と呼びます。
- 中央クラスターで、新しいワークロード クラスター用の kubemanager を作成して、新しいワークロード クラスターをアタッチします。
- 中央クラスターで、分散ワークロード・クラスターから kubeconfig をコピーします。ここではワークロードクラスター-kubeconfigと呼びます
user@central:~/contrail$ scp user@workload:~/.kube/config workload-cluster-kubeconfig
- 中央クラスターで、分散ワークロード クラスター kubeconfig から Kubernetes シークレットを作成し、そのシークレットのわかりやすい名前(などworkload-kubeconfig)を選択します。
user@central:~/contrail$ kubectl create secret generic workload-kubeconfig -n contrail --from-file=kubeconfig=/root/contrail/workload-cluster-kubeconfig
- 次の内容を含む kubemanager マニフェストを作成します。マニフェストのわかりやすい名前( kubemanager-cluster1.yaml など)を選択します。
apiVersion: configplane.juniper.net/v1alpha1 kind: Kubemanager metadata: name: <CR name> namespace: contrail spec: common: containers: - image: <contrail-image-repository> name: contrail-k8s-kubemanager nodeSelector: node-role.kubernetes.io/master: "" podV4Subnet: <pod-v4-subnet-of-remote-cluster> serviceV4Subnet: <service-v4-subnet-of-remote-cluster> podV6Subnet: <pod-v6-subnet-of-remote-cluster> serviceV6Subnet: <service-v6-subnet-of-remote-cluster> clusterName: <worker-cluster-name> kubeconfigSecretName: <secret-name> enableNad: <true/false> listenerPort: <listener-port> constantRouteTargetNumber: <rt-number>
表 2:Kubemanager CRD パラメータ の意味 例 名前 カスタム リソースの名前。 kubemanager-cluster1 イメージ 画像をプルするリポジトリ hub.juniper.net/cn2/contrail-k8s-kubemanager:22.1.0.93
enterprise-hub.juniper.net/contrail-container-prod/contrail-k8s-kubemanager:22.3.0.71
podV4Subnet 先ほど分散ワークロードクラスターに設定したIPv4ポッドサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
10.234.64.0 serviceV4Subnet 先ほど分散ワークロード クラスター用に設定した IPv4 サービスサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
10.234.0.0/18 podV6Subnet 先ほど分散ワークロードクラスター用に設定したIPv6ポッドサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
fd85:ee78:d8a6:8608:::1:0000/112 serviceV6Subnet 先ほど分散ワークロード クラスター用に設定した IPv6 サービスサブネット。 このサブネットは、マルチクラスター内で一意にする必要があります。
fd85:ee78:d8a6:8608::1000/116 クラスタ名 ワークロード クラスターの名前。 ワークロードクラスター kubeconfigSecretName ワークロード クラスター kubeconfig トークンを含むシークレットの名前。 workload-kubeconfig EnableNad True または false(ネットワーク アドレス定義を有効にする、または有効にしない場合) True リスナーポート Contrail コントローラーがこのワークロード クラスターとの通信をリッスンするポート。 最初のワークロード・クラスターのポートを 19446 に設定し、後続のワークロード・クラスターごとに 1 ずつ増分します。
19446 定数RouteTargetNumber このワークロード クラスターのルート ターゲット。 最初のワークロード・クラスターのルート・ターゲットを 7699 に設定し、後続のワークロード・クラスターごとに 100 ずつ増分します。
7699 - 中央のクラスターで、作成した kubemanager マニフェストを適用します。
user@central:~/contrail$ kubectl apply -f manifests/kubemanager-cluster1.yaml
- 中央クラスターで、ワークロード クラスターの名前空間が表示されていることを確認します。
kubectl get ns
名前空間の形式は次のとおりです
<kubemanager-name>-<workload-cluster-name>-<namespace>
。例えば:kubemanager-workload1-workload-cluster-contrail
- 中央クラスターで、分散ワークロード・クラスターから kubeconfig をコピーします。ここではワークロードクラスター-kubeconfigと呼びます
- 最後に、ワークロード クラスターに vRouter をインストールします。
user@workload:~/contrail$ kubectl apply -f manifests/distributed_cluster_vrouter_example.yaml
数分後、すべてのポッドが稼働していることを確認します。
user@workload:~# kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS contrail-deploy contrail-k8s-deployer-6c88f6798f-jjx96 1/1 Running 3 contrail contrail-vrouter-masters-phttx 3/3 Running 0 contrail contrail-vrouter-nodes-xkkk8 3/3 Running 0 kube-system coredns-657959df74-26jrk 1/1 Running 0 kube-system dns-autoscaler-b5c786945-m4vtz 1/1 Running 0 kube-system kube-apiserver-k8s-cp0 1/1 Running 0 kube-system kube-controller-manager-k8s-cp0 1/1 Running 0 kube-system kube-proxy-5rbp4 1/1 Running 0 kube-system kube-proxy-kr95n 1/1 Running 0 kube-system kube-scheduler-k8s-cp0 1/1 Running 0 kube-system nginx-proxy-k8s-worker0 1/1 Running 0
ワークロード クラスターの分離
- 中央クラスタで、関連する kubemanager を削除します。
user@central:~/contrail$ kubectl delete kubemanager -n contrail <kubemanager-name>
- 削除する分散ワークロード クラスターで、vRouter を削除します。
user@workload:~/contrail$kubectl delete vrouter -n contrail contrail-vrouter-masters
user@workload:~/contrail$ kubectl delete vrouter -n contrail contrail-vrouter-nodes
- 中央クラスターで、分散ワークロード・クラスターのネーム・スペースを削除します。
名前空間をリストし、分散ワークロード クラスターに関連付けられているすべての名前空間を削除します。
user@central:~/contrail$ kubectl get ns
user@central:~/contrail$ kubectl delete ns <kubemanager-name>-<workload-cluster-name>-<namespace>
- 中央クラスターで、分離するワークロード クラスターに関連付けられているシークレットを削除します。
kubectl delete secret <secret-name> -n contrail
Contrailのアンインストール
- 「ワークロード クラスターの分離」の手順に従って、削除するワークロード クラスターを分離します。
- ワークロード クラスター内の Contrail をアンインストールします。
- 「Contrail のアンインストール」の手順に従って、ワークロード クラスター内の Contrail をアンインストールします。
これらのリソースは既に削除されているため、NotFound エラーは無視します。
- ワークロードクラスターで、分散ワークロードクラスターのデフォルトのポッドネットワーク名前空間に関連するすべてのリソースが削除されていることを確認し、Contrail名前空間に関連するすべてのリソースが削除されていることを確認します。
user@workload:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <default pod network namespace>
user@workload:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail
ワークロードクラスターからContrailをアンインストールすれば完了です中央クラスタからContrailをアンインストールする場合は、次の手順に進みます。
- 「Contrail のアンインストール」の手順に従って、ワークロード クラスター内の Contrail をアンインストールします。
- 中央クラスタの Contrail をアンインストールします。
- 「Contrail のアンインストール」の手順に従って、中央クラスターで Contrail をアンインストールします。
これらのリソースは既に削除されているため、NotFound エラーは無視します。
- 中央クラスターで、contrail、contrail-system、contrail-deploy 名前空間に関連するすべてのリソースが削除されていることを確認します。
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail-system
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail-deploy
- 「Contrail のアンインストール」の手順に従って、中央クラスターで Contrail をアンインストールします。