Gérer Contrail multi-cluster
RÉSUMÉ Découvrez comment effectuer des tâches de gestion du cycle de vie spécifiques à une installation multi-cluster.
Cette section couvre les tâches spécifiques à une installation multi-cluster. Si vous souhaitez effectuer des tâches de gestion dans un cluster spécifique (telles que l’ajout et la suppression de nœuds dans un cluster et la mise à niveau d’un cluster) au sein de l’installation multi-cluster, reportez-vous à la section Gérer un seul cluster Contrail.
Connexion d’un cluster de charges de travail
- Assurez-vous d’avoir préparé le cluster de charges de travail distribué comme décrit dans avant l’installation.
- Créez le cluster de charges de travail distribué.
Créez un nouveau cluster. Vous pouvez suivre la procédure dans Créer un cluster Kubernetes ou utiliser vos propres méthodes pour créer un cluster. Le cluster doit avoir les caractéristiques suivantes :
- Le cluster n’a pas de plug-in CNI.
- Désactiver le DNS local de nœud.
- Si vous exécutez DPDK, activez la version 0.3.1 de multus.
- Dans une configuration multi-cluster, vous devez configurer différents pods et sous-réseaux de services sur chaque cluster. Ces sous-réseaux doivent être uniques au sein de l’ensemble du multi-cluster.
- Dans une configuration multi-cluster, vous devez configurer différents noms de nœud pour les nœuds de chaque cluster. Les noms de nœud doivent être uniques sur l’ensemble du multi-cluster.
- Installez les composants Contrail sur le cluster de charges de travail distribué.
- Sur le cluster de charges de travail, créez l’espace de noms Contrail-Deploy.
user@workload:~/contrail$ kubectl create ns contrail-deploy
- Sur le cluster de charges de travail, copiez le kubeconfig à partir du cluster central. C’est ce que l’on appelle central-cluster-kubeconfig.
user@workload:~/contrail$ scp user@central:~/.kube/config central-cluster-kubeconfig
- Sur le cluster de charges de travail, créez un secret Kubernetes à partir du cluster central kubeconfig et nommez le secret central-kubeconfig.
Note:
Vous devez nommer le secret central-kubeconfig.
user@workload:~/contrail$ kubectl create secret generic central-kubeconfig -n contrail-deploy --from-file=kubeconfig=/root/contrail/central-cluster-kubeconfig
Note:Vous devez spécifier le chemin absolu vers le fichier central-cluster-kubeconfig .
- Sur le cluster de charges de travail, appliquez le manifeste du déployeur. Le déployeur assure la gestion du cycle de vie des composants Contrail.
Ce manifeste inclut une référence au central-kubeconfig secret que vous avez créé dans le sous-étape précédent.
user@workload:~/contrail$ kubectl apply -f manifests/distributed_cluster_deployer.yaml
- Vérifiez que contrail-deployer est bien arrivé. Cela peut prendre quelques minutes.
user@workload:~/contrail# kubectl get pods -n contrail-deploy NAME READY STATUS RESTARTS AGE contrail-k8s-deployer-6458859585-xhwx6 1/1 Running 0 6m
- Sur le cluster de charges de travail, créez l’espace de noms Contrail-Deploy.
- Sur le cluster central, connectez le nouveau cluster de charges de travail en créant un kubemanager pour le nouveau cluster de charges de travail.
- Sur le cluster central, copiez le kubeconfig à partir du cluster de charges de travail distribué. C’est ce que nous appellerons workload-cluster-kubeconfig.
user@central:~/contrail$ scp user@workload:~/.kube/config workload-cluster-kubeconfig
- Sur le cluster central, créez un secret Kubernetes à partir du cluster de charges de travail distribué kubeconfig et choisissez un nom significatif pour le secret (par exemple, workload-kubeconfig).
user@central:~/contrail$ kubectl create secret generic workload-kubeconfig -n contrail --from-file=kubeconfig=/root/contrail/workload-cluster-kubeconfig
- Créez le manifeste kubemanager avec le contenu suivant. Choisissez un nom significatif pour le manifeste (par exemple, 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>
Tableau 1 : Kubemanager CRD Exemple de paramètre signifiant Nom Nom de la ressource personnalisée. kubemanager-cluster1 Image Référentiel où vous extrayez des images hub.juniper.net/cn2/contrail-k8s-kubemanager:22.1.0.93 podV4Subnet Le sous-réseau pod IPv4 que vous avez configuré précédemment pour le cluster de charges de travail distribué. Ce sous-réseau doit être unique au sein de l’ensemble du multi-cluster.
10.234.64.0 serviceV4Subnet Le sous-réseau de service IPv4 que vous avez configuré précédemment pour le cluster de charges de travail distribuées. Ce sous-réseau doit être unique au sein de l’ensemble du multi-cluster.
10.234.0.0/18 podV6Subnet Sous-réseau pod IPv6 que vous avez configuré précédemment pour le cluster de charges de travail distribuées. Ce sous-réseau doit être unique au sein de l’ensemble du multi-cluster.
fd85:ee78:d8a6:8608::1:0000/112 serviceV6Subnet Sous-réseau de service IPv6 que vous avez configuré précédemment pour le cluster de charges de travail distribuées. Ce sous-réseau doit être unique au sein de l’ensemble du multi-cluster.
fd85:ee78:d8a6:8608::1000/116 clusterName Nom du cluster de charges de travail. cluster de charge de travail kubeconfigSecretName Nom du secret contenant le jeton kubeconfig du cluster de charges de travail. workload-kubeconfig enableNad Vrai ou faux (pour permettre la définition d’adresse réseau ou non) Vrai port d’écoute Port que le contrôleur Contrail écoute pour les communications avec ce cluster de charges de travail. Définissez le port du premier cluster de charges de travail sur 19446 et incrémentez 1 pour chaque cluster de charges de travail suivant.
19446 constantRouteTargetNumber Cible de routage pour ce cluster de charges de travail. Définissez la cible de routage pour le premier cluster de charges de travail à 7699 et incrémentez de 100 pour chaque cluster de charges de travail suivant.
7699 - Sur le cluster central, appliquez le manifeste kubemanager que vous venez de créer.
user@central:~/contrail$ kubectl apply -f manifests/kubemanager-cluster1.yaml
- Sur le cluster central, vérifiez que vous pouvez voir les espaces de noms du cluster de charge de travail.
kubectl get ns
Les espaces de noms sont au format suivant :
<kubemanager-name>-<workload-cluster-name>-<namespace>
. Par exemple :kubemanager-workload1-workload-cluster-contrail
- Sur le cluster central, copiez le kubeconfig à partir du cluster de charges de travail distribué. C’est ce que nous appellerons workload-cluster-kubeconfig.
- Sur le cluster de charges de travail, modifiez le manifeste deployer_ha_kernel.yaml si nécessaire. Le manifeste deployer_ha_kernel.yaml que nous fournissons est un exemple que vous devrez peut-être adapter à votre configuration.
Le fichier deployer_ha_kernel.yaml fourni spécifie différents réseaux pour les différents nœuds du cluster, ce qui est différent de notre exemple de cluster. Dans notre cluster, les nœuds du cluster se connectent tous au même réseau de données. Nous devrez modifier deployer_ha_kernel.yaml pour supprimer les réseaux supplémentaires et la configuration de nœud supplémentaire.
- Supprimez les réseaux supplémentaires.
Modifiez deployer_ha_kernel.yaml pour supprimer les lignes suivantes qui définissent le
contrail-network-config
ConfigMap :--- 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
- Supprimez les lignes suivantes qui définissent le
contrail-vrouter-nodes-7
vRouter :--- 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%
- De même, supprimer complètement la
contrail-vrouter-nodes-8
section - De même, supprimer complètement la
contrail-vrouter-nodes-14
section - Ajoutez la section suivante
contrail-vrouter-nodes
à la fin :--- 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%
- Supprimez les réseaux supplémentaires.
- Enfin, sur le cluster de charges de travail, installez le vRouter.
user@workload:~/contrail$ kubectl apply -f manifests/deployer_ha_kernel.yaml
Après quelques minutes, vérifiez que tous les pods sont en place :
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
Détacher un cluster de charges de travail
- Sur le cluster central, supprimez le kubemanager associé.
user@central:~/contrail$ kubectl delete kubemanager -n contrail <kubemanager-name>
- Sur le cluster de charges de travail distribué que vous supprimez, supprimez les vRouters.
user@workload:~/contrail$kubectl delete vrouter -n contrail contrail-vrouter-masters
user@workload:~/contrail$ kubectl delete vrouter -n contrail contrail-vrouter-nodes
- Sur le cluster central, supprimez les espaces de noms du cluster de charges de travail distribué.
Listez les espaces de noms et supprimez tous les espaces de noms associés au cluster de charges de travail distribuées.
user@central:~/contrail$ kubectl get ns
user@central:~/contrail$ kubectl delete ns <kubemanager-name>-<workload-cluster-name>-<namespace>
- Sur le cluster central, supprimez le secret associé au cluster de charges de travail que vous détachez.
kubectl delete secret <secret-name> -n contrail
Désinstaller Contrail
- Suivez les étapes de détacher un cluster de charges de travail pour détacher le cluster de charges de travail que vous souhaitez supprimer.
- Désinstallez Contrail dans le cluster de charges de travail.
- Suivez les étapes de Désinstaller Contrail pour désinstaller Contrail dans le cluster de charges de travail.
Ignorez les erreurs notFound car ces ressources ont déjà été supprimées.
- Sur le cluster de charges de travail, vérifiez que toutes les ressources associées à l’espace de noms de réseau pod par défaut du cluster de charges de travail distribué ont disparu, et vérifiez que toutes les ressources associées à l’espace de noms Contrail ont disparu.
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
Si tout ce que vous voulez faire est de désinstaller Contrail du cluster de charges de travail, alors vous avez terminé. Si vous souhaitez également désinstaller Contrail du cluster central, passez à l’étape suivante.
- Suivez les étapes de Désinstaller Contrail pour désinstaller Contrail dans le cluster de charges de travail.
- Désinstallez Contrail dans le cluster central.
- Suivez les étapes de Désinstaller Contrail pour désinstaller Contrail dans le cluster central.
Ignorez les erreurs notFound car ces ressources ont déjà été supprimées.
- Sur le cluster central, vérifiez que toutes les ressources associées aux espaces de noms Contrail, Contrail-System et Contrail-deploy sont supprimées.
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
- Suivez les étapes de Désinstaller Contrail pour désinstaller Contrail dans le cluster central.