Cette rubrique décrit comment déployer de nouveaux clusters de charge de travail Tanzu Kubernetes Grid (TKG) qui s'exécutent dans plusieurs zones de disponibilité (AZ) et comment modifier les clusters de gestion et de charge de travail existants pour qu'ils s'exécutent dans plusieurs zones de disponibilité ou différentes zones de disponibilité.
Pour utiliser l'interface du programme d'installation afin de configurer un nouveau cluster de gestion autonome qui s'exécute sur plusieurs zones de disponibilité, reportez-vous à la section Configurer les ressources vSphere du document Déployer des clusters de gestion avec l'interface du programme d'installation.
RemarqueCette rubrique s’applique à TKG avec un cluster de gestion autonome. Pour exécuter TKG avec un superviseur dans des zones de disponibilité, reportez-vous à la section Créer des zones vSphere pour un déploiement de superviseur à plusieurs zones dans la documentation de vSphere 8.0.
Objets Kubernetes : Pour activer plusieurs zones de disponibilité pour les clusters sur vSphere, le fournisseur d'API de cluster vSphere (CAPV) utilise deux définitions de ressources personnalisées (CRD) :
VSphereFailureDomain
capture les informations de balisage spécifiques à la région/zone, ainsi que la définition de topologie qui inclut les informations de centre de données, de cluster, d'hôte et de banque de données vSphere.VSphereDeploymentZone
capture l'association d'un VSphereFailureDomain
avec les informations de contrainte de placement pour le nœud Kubernetes.Association de Kubernetes à vSphere : Les définitions d'objets VSphereFailureDomain
et VSphereDeploymentZone
définissent les régions et les zones de disponibilité avec les paramètres suivants :
spec.region
spec.zone
Les balises vSphere k8s-region
et k8s-zone
associent les régions et les zones de disponibilité dans Kubernetes à leurs objets sous-jacents dans vSphere.
Étendue de la zone de disponibilité : Vous pouvez étendre des zones de disponibilité et des régions à différents niveaux dans vSphere en les associant à des objets vSphere comme suit :
Étendue de la zone de disponibilité | Zone/Zone de disponibilité | Région | Utilisation de plusieurs zones de disponibilité |
---|---|---|---|
Zones de disponibilité du cluster | Cluster vSphere | Centre de données vSphere | Répartir les nœuds sur plusieurs clusters dans un centre de données |
Zones de disponibilité du groupe d'hôtes | Groupe d'hôtes vSphere | Cluster vSphere | Répartir les nœuds sur plusieurs hôtes dans un cluster unique |
Les configurations de cette rubrique répartissent le plan de contrôle du cluster TKG et les nœuds worker entre les objets entre vSphere, à savoir les centres de données, les clusters et les hôtes vSphere, en fonction de la manière dont les objets sont balisés dans vSphere et référencés dans les définitions VSphereFailureDomain
et VSphereDeploymentZone
dans Kubernetes.
Configurations des objets du Cluster
: La spécification des objets du Cluster
configure les zones de disponibilité pour leur plan de contrôle et leurs nœuds worker de différentes manières, en faisant correspondre les différentes propriétés des objets de la VSphereDeploymentZone
qui définissent les zones de disponibilité :
Type de nœud | Propriété sous spec.topology |
Propriétés VSphereDeploymentZone à faire correspondre |
Exemple |
---|---|---|---|
Nœuds de plan de contrôle | variables.controlPlaneZoneMatchingLabels |
Liste des paires metadata.labels |
{"environment": "staging", "region": "room1"} |
Nœuds Worker | machineDeployments.MD-INDEX.failureDomain pour chaque déploiement de machine |
Liste des valeurs metadata.name |
[rack1,rack2,rack3] |
Étant donné que les nœuds de plan de contrôle sont attribués à des zones de disponibilité en fonction de la correspondance des étiquettes, vous devez créer une étiquette qui distingue chaque combinaison de zones de disponibilité que les nœuds de plan de contrôle de cluster peuvent utiliser.
Les conditions préalables au déploiement ou à la modification des clusters TKG pour qu'ils s'exécutent dans plusieurs zones de disponibilité ou différentes zones de disponibilité incluent les éléments suivants :
Vous pouvez déployer un cluster de charge de travail pour qu'il exécute son plan de contrôle ou ses nœuds worker dans plusieurs zones de disponibilité (AZ) selon trois étapes de base, comme décrit dans les sections suivantes.
FailureDomain
et Deployment Zone
dans KubernetesPour préparer vSphere à la prise en charge des régions et des zones de disponibilité dans TKG :
Identifiez ou créez les objets vSphere pour les régions et les zones de disponibilité dans lesquelles vos nœuds de cluster TKG seront hébergés.
Zones de disponibilité du groupe d'hôtes : Si vous utilisez des groupes d'hôtes vSphere en tant que zones de disponibilité, vous devez créer un groupe d'hôtes et un groupe de machines virtuelles correspondant pour chaque zone de disponibilité que vous prévoyez d'utiliser :
Créez des objets de groupe d'hôtes et de groupe de machines virtuelles de l'une des manières suivantes :
Dans vCenter, créez un groupe d'hôtes et un groupe de machines virtuelles à partir de Configurer > VM/Groupes d'hôtes > Ajouter…
Avec la CLI govc
, exécutez des commandes govc
semblables aux commandes suivantes. Par exemple, pour créer un groupe d'hôtes rack1
et un groupe de machines virtuelles rack1-vm-group
:
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1 -host esx-01a.corp.tanzu esx-02a.corp.tanzu
govc cluster.group.create -cluster=RegionA01-MGMT -name=rack1-vm-group -vm
Ajoutez des règles d'affinité entre les groupes de machines virtuelles et les groupes d'hôtes créés afin que les machines virtuelles du groupe de machines virtuelles s'exécutent sur les hôtes du groupe d'hôtes créé :
Balisez les objets vSphere comme suit, selon que vous configurez des zones de disponibilité de clusters ou de groupes d'hôtes vSphere. Ces exemples utilisent la CLI govc
, mais vous pouvez également utiliser le volet Balises et attributs personnalisés dans vCenter :
Zones de disponibilité du cluster :
Pour chaque zone de disponibilité, utilisez govc
pour créer et attacher une balise de catégorie k8s-region
au centre de données et une balise de catégorie k8s-zone
à chaque cluster vSphere. Par exemple, pour baliser le centre de données dc0
en tant que région us-west-1
et ses clusters cluster1
, etc., en tant que zones de disponibilité us-west-1a
, etc. :
govc tags.category.create -t Datacenter k8s-region
govc tags.category.create -t ClusterComputeResource k8s-zone
govc tags.create -c k8s-region us-west-1
govc tags.create -c k8s-zone us-west-1a
govc tags.create -c k8s-zone us-west-1b
govc tags.create -c k8s-zone us-west-1c
govc tags.attach -c k8s-region us-west-1 /dc0
govc tags.attach -c k8s-zone us-west-1a /dc0/host/cluster1
govc tags.attach -c k8s-zone us-west-1b /dc0/host/cluster2
govc tags.attach -c k8s-zone us-west-1c /dc0/host/cluster3
Zones de disponibilité du groupe d'hôtes :
Pour chaque zone de disponibilité, utilisez govc
pour créer et attacher une balise de catégorie k8s-region
au cluster vSphere et une balise de catégorie k8s-zone
à chaque groupe d'hôtes. Par exemple, pour baliser le cluster /dc1/host/room1-mgmt
en tant que région room1
et son groupe d'hôtes /dc1/host/room1-mgmt/esx-01a.corp.tanzu
, etc., comme zones de disponibilité rack1
, etc. :
govc tags.category.create -t ClusterComputeResource k8s-region
govc tags.category.create -t HostSystem k8s-zone
govc tags.create -c k8s-region room1
govc tags.create -c k8s-zone rack1
govc tags.create -c k8s-zone rack2
govc tags.create -c k8s-zone rack3
govc tags.attach -c k8s-region room1 /dc1/host/room1-mgmt
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01a.corp.tanzu
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01b.corp.tanzu
govc tags.attach -c k8s-zone rack1 /dc1/host/room1-mgmt/esx-01c.corp.tanzu
FailureDomain
et Deployment Zone
dans KubernetesAvant de déployer un cluster sur plusieurs zones de disponibilité, vous devez créer les objets Kubernetes FailureDomain
et Deployment Zone
qui définissent la région et les zones. Chaque paramètre sous spec.region
, spec.zone
et spec.topology
doit correspondre aux chemins d'accès et aux balises des objets configurés dans vCenter :
VSphereDeploymentZone
, la valeur spec.failuredomain
doit correspondre à l'une des valeurs metadata.name
des définitions VSphereFailureDomain
.spec.server
dans les objets VSphereDeploymentZone
doit correspondre à l'adresse de serveur vCenter (adresse IP ou nom de domaine complet) entrée pour VCENTER SERVER dans le volet Fournisseur IaaS (IaaS Provider) de l'interface du programme d'installation ou au paramètre VSPHERE_SERVER
du fichier de configuration du cluster de gestion.metadata.name
doivent toutes être en minuscules.Créez des objets FailureDomain
et Deployment Zone
comme suit, selon que vous configurez des zones de disponibilité de cluster ou de groupe d'hôtes vSphere.
Zones de disponibilité du cluster :
Comme exemple de répartition du cluster de charge de travail entre plusieurs nœuds de cluster vSphere dans un centre de données, le code suivant définit les objets nécessaires pour les trois zones de déploiement nommées us-west-1a
, us-west-1b
et us-west-1c
, chacune étant un cluster vSphere ayant ses propres paramètres réseau et de stockage :
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1a
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1a
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
datastore: ds-c1
networks:
- net1
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1b
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1b
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster2
datastore: ds-c2
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: us-west-1c
spec:
region:
name: us-west-1
type: Datacenter
tagCategory: k8s-region
zone:
name: us-west-1c
type: ComputeCluster
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster3
datastore: ds-c3
networks:
- net4
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1a
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1a
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1b
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1b
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: us-west-1c
spec:
server: VSPHERE_SERVER
failureDomain: us-west-1c
placementConstraint:
resourcePool: pool3
folder: baz
Où VSPHERE_SERVER
est l'adresse IP ou le nom de domaine complet de votre instance de vCenter Server.
Si différents clusters de vSphere disposent de pools de ressources avec des noms identiques, définissez la valeur spec.placementConstraint.resourcePool
des objets VSphereDeploymentZone
sur un chemin de ressource complet, pas seulement sur le nom.
Zones de disponibilité du groupe d'hôtes :
Comme exemple de répartition des nœuds de cluster de charge de travail sur trois groupes d'hôtes dans un cluster vSphere unique, le code suivant définit les objets nécessaires pour les trois zones de disponibilité rack1
, rack2
et rack3
, chacun d'eux représentant un rack d'hôtes dans le même cluster vSphere, défini comme region room1
:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack1
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack1
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack1-vm-group
hostGroupName: rack1
datastore: ds-r1
networks:
- net1
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack2
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack2-vm-group
hostGroupName: rack2
datastore: ds-r2
networks:
- net2
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack3
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack3
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster1
hosts:
vmGroupName: rack3-vm-group
hostGroupName: rack3
datastore: ds-c3
networks:
- net3
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack1
spec:
server: VSPHERE_SERVER
failureDomain: rack1
placementConstraint:
resourcePool: pool1
folder: foo
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: pool2
folder: bar
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack3
spec:
server: VSPHERE_SERVER
failureDomain: rack3
placementConstraint:
resourcePool: pool3
folder: baz
Où VSPHERE_SERVER
est l'adresse IP ou le nom de domaine complet de votre instance de vCenter Server.
Pour les étapes suivantes de déploiement du cluster, reportez-vous à la section Déployer un cluster de charge de travail avec des nœuds répartis entre les zones de disponibilité.
Une fois que vous avez effectué les étapes dans Préparer des régions et des zones de disponibilité dans vSphere et Créer des objets FailureDomain
et Deployment Zone
dans Kubernetes, vous pouvez déployer un cluster de charge de travail avec ses nœuds répartis sur plusieurs zones de disponibilité.
Les étapes suivantes utilisent vsphere-zones.yaml
comme fichier contenant les définitions d'objets FailureDomain
et Deployment Zone
.
Suivez vSphere avec des fichiers de configuration de cluster de gestion autonome pour créer le fichier de configuration du cluster de charge de travail que vous déployez.
Vérifiez ou modifiez votre fichier de configuration de cluster en suivant Configurer plusieurs zones de disponibilité pour définir VSPHERE_REGION
, VSPHERE_ZONE
, VSPHERE_AZ_0
et d'autres variables de configuration pour qu'elles correspondent à vos définitions d'objets de zone de disponibilité.
(Facultatif) Pour empêcher le processus de création des clusters de vérifier que les zones et régions vSphere spécifiées dans la configuration existent toutes, qu'elles sont cohérentes et qu'elles sont définies au même niveau, définissez SKIP_MULTI_AZ_VERIFY
sur "true"
dans votre environnement local :
export SKIP_MULTI_AZ_VERIFY="true"
Vous ne pouvez pas définir cette variable dans le fichier de configuration du cluster.
Exécutez la commande tanzu cluster create
pour créer le cluster de charge de travail. Pour plus d'informations, reportez-vous à la section Créer des clusters de charge de travail.
Pour créer les objets de zone de disponibilité séparément du cluster, connectez-vous au cluster de gestion avec tanzu login
, puis exécutez les éléments suivants avant d'exécuter tanzu cluster create
:
tanzu mc az set -f vsphere-zones.yaml
Vous pouvez également exécuter kubectl apply -f vsphere-zones.yaml
Pour utiliser les définitions d'objets de zone de disponibilité avec un fichier de configuration de cluster plat et créer les objets de zone de disponibilité et de cluster ensemble, transmettez le fichier vsphere-zones.yaml
à l'option --az-file
de tanzu cluster create
:
tanzu mc create --file cluster-config-file.yaml --az-file vsphere-zones.yaml
Pour combiner les définitions d'objets de zone de disponibilité dans le manifeste du cluster, créez le manifeste du cluster en suivant l'étape 1 du processus en deux étapes décrit dans la section Créer un cluster basé sur une classe, ajoutez le contenu de vsphere-zones.yaml
au manifeste, puis exécutez tanzu cluster create
, comme décrit à l'étape 2.
Pendant le processus de création du cluster, vous pouvez voir ses machines virtuelles et d'autres ressources s'afficher dans vCenter.
Vous pouvez mettre à jour un cluster de gestion ou de charge de travail déjà déployé pour exécuter son plan de contrôle ou ses nœuds worker dans plusieurs zones de disponibilité (AZ) ou modifier les zones de disponibilité dans lesquelles les nœuds s'exécutent.
Vous pouvez attribuer des zones de disponibilité au plan de contrôle ou aux nœuds worker d'un cluster globalement, ou définir des zones de disponibilité pour les déploiements de machines sous-jacents, afin de personnaliser les paramètres de la machine vSphere, ainsi que des zones de disponibilité pour le déploiement de machines défini.
Lorsque vous mettez à jour les zones de disponibilité d'un cluster de charge de travail existant, vous devez mettre à jour son interface de stockage de conteneur (CSI) et son interface de fournisseur de cloud (CPI) pour appliquer la modification, comme décrit dans la section Mettre à jour la CPI et la CSI pour les modifications des zones de disponibilité.
Les sections suivantes expliquent comment mettre à jour les configurations de zones de disponibilité de cluster existantes pour différents scénarios.
Pour développer un cluster existant dont les nœuds de plan de contrôle s'exécutent dans une zone de disponibilité unique afin que son plan de contrôle s'exécute dans plusieurs zones de disponibilité :
Préparez un fichier de configuration qui définit des objets VSphereFailureDomain
et VSphereDeploymentZone
pour chaque nouvelle zone de disponibilité. L'exemple ci-dessous, vsphere-3-zones.yaml
, définit les zones de disponibilité rack1
, rack2
et rack3
avec la région room1
:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind:VSphereFailureDomain
metadata:
name:rack
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name:rack
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName:rack-vm-group
hostGroupName:rack
datastore: ds1
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind:VSphereFailureDomain
metadata:
name:rack
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack2-vm-group
hostGroupName: rack2
datastore: ds2
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack3
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack3:
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack3-vm-group
hostGroupName: rack3
datastore: ds3
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack1
spec:
server: VSPHERE_SERVER
failureDomain: rack1
placementConstraint:
resourcePool: rp0
folder: folder0
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: rp0
folder: folder0
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack3
spec:
server: VSPHERE_SERVER
failureDomain: rack3
placementConstraint:
resourcePool: rp0
folder: folder0
Où VSPHERE_SERVER
est l'adresse IP ou le nom de domaine complet de votre instance de vCenter Server.
Remarques :
spec.placementConstraint.resourcePool
dans VSphereDeploymentZone
. S'il n'existe aucun pool de ressources créé par l'utilisateur pour le cluster, définissez la valeur sur le pool de ressources par défaut du cluster, dont le chemin d'accès est /dc0/host/cluster1/Resources
.VSphereFailureDomain
, les variables spec.region.autoConfigure
et spec.zone.autoConfigure
ne sont plus prises en charge.Créez les objets vSphereFailureDomain
et VSphereDeploymentZone
, par exemple :
tanzu mc az set -f vsphere-3-zones.yaml
Obtenez le KubeAdmControlPlane
du cluster cible. Dans notre exemple, la cible est le cluster de gestion tkg-mgmt-vc
, mais il peut également s'agir d'un cluster de charge de travail :
kubectl get kcp --selector cluster.x-k8s.io/cluster-name=tkg-mgmt-vc -n tkg-system -o=name
kubeadmcontrolplane.controlplane.cluster.x-k8s.io/tkg-mgmt-vc-cpkxj
Mettez à jour le sélecteur de zone de disponibilité du cluster, par exemple controlPlaneZoneMatchingLabels: {"environment": "staging", "region": "room1"}
:
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq '.spec.topology.variables |= map(if .name == "controlPlaneZoneMatchingLabels" then .value = {"environment": "staging", "region": "room1"} else . end)'| kubectl apply -f -
cluster.cluster.x-k8s.io/tkg-mgmt-vc replaced
Vérifiez que le domaine de pannes du cluster a été mis à jour comme prévu :
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq -r '.status.failureDomains | to_entries[].key'
Corrigez le KubeAdmControlPlane
avec rolloutAfter
pour déclencher une mise à jour des nœuds de plan de contrôle.
kubectl patch kcp tkg-mgmt-vc-cpkxj -n tkg-system --type merge -p "{\"spec\":{\"rolloutAfter\":\"$(date +'%Y-%m-%dT%TZ')\"}}"
Vérifiez que les nœuds de plan de contrôle ont été déplacés vers les nouvelles zones de disponibilité, en vérifiant l'hôte et la banque de données des nœuds dans vCenter ou en exécutant les commandes kubectl get node
ou govc vm.info
comme suit :
kubectl get node NODE-NAME -o=jsonpath='{.metadata.labels.node.cluster.x-k8s.io/esxi-host}' --context tkg-mgmt-vc-admin@tkg-mgmt-vc
govc vm.info -json NODE-NAME | jq -r '.VirtualMachines[].Config.Hardware.Device[] | select(.DeviceInfo.Label == "Hard disk 1") | .Backing.FileName'
La sélection de zones de disponibilité avec des étiquettes de sélecteur implique la spécification de VSphereDeploymentZone
par ses metadata.labels
plutôt que son metadata.name
. Cela permet de configurer les nœuds de plan de contrôle d'un cluster, par exemple, pour qu'ils s'exécutent dans toutes les zones de disponibilité d'une région et d'un environnement spécifiés sans répertorier individuellement les zones de disponibilité : "region=us-west-1,environment=staging"
. Cela signifie également que vous pouvez mettre à jour les zones de disponibilité d'un plan de contrôle d'un cluster sans avoir à modifier les noms de zone de disponibilité pour les nœuds de plan de contrôle.
Pour utiliser des étiquettes de sélecteur afin qu'elles indiquent de nouvelles zones de disponibilité pour les nœuds de plan de contrôle d'un cluster existant :
Préparez un fichier de configuration qui définit des objets VSphereFailureDomain
et VSphereDeploymentZone
pour chaque nouvelle zone de disponibilité. L'exemple ci-dessous, vsphere-labeled-zones.yaml
, définit une zone de disponibilité rack4
avec des métadonnées d'étiquettes de sélecteur :
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack4
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack4
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack4-vm-group
hostGroupName: rack4
datastore: vsanDatastore
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack4
labels:
environment: staging
region: room1
spec:
server: VSPHERE_SERVER
failureDomain: rack4
placementConstraint:
resourcePool: rp0
folder: folder0
Créez les objets VSphereFailureDomain
et VSphereDeploymentZone
, par exemple :
tanzu mc az set -f vsphere-labeled-zones.yaml
Mettez à jour le cluster avec l'étiquette du sélecteur de zone de disponibilité. L'exemple ici utilise un sélecteur de zone de disponibilité controlPlaneZoneMatchingLabels: {"environment": "staging", "region": "room1"}
pour le cluster de gestion tkg-mgmt-vc
, mais il peut également s'agir d'un cluster de charge de travail :
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | \
jq '.spec.topology.variables |= \
map(if .name == "controlPlaneZoneMatchingLabels" \
then .value = {"environment": "staging", "region": "room1"} \
else . end)'| kubectl apply -f -
cluster.cluster.x-k8s.io/tkg-mgmt-vc replaced
Vérifiez l'état du cluster pour vous assurer que le domaine de pannes a été mis à jour comme prévu :
kubectl get cluster tkg-mgmt-vc -n tkg-system -o json | jq -r '.status.failureDomains | to_entries[].key'
Corrigez le KubeAdmControlPlane
avec rolloutAfter
pour déclencher une mise à jour des nœuds de plan de contrôle.
kubectl patch kcp tkg-mgmt-vc-cpkxj -n tkg-system --type merge -p "{\"spec\":{\"rolloutAfter\":\"$(date +'%Y-%m-%dT%TZ')\"}}"
Vérifiez que les nœuds de plan de contrôle sont déplacés vers de nouvelles zones de disponibilité sélectionnées par le sélecteur dans controlPlaneZoneMatchingLabels
en vérifiant l'hôte et la banque de données des nœuds dans vCenter ou en exécutant les commandes kubectl get node
ou govc vm.info
comme suit. Dans notre exemple, la nouvelle zone de disponibilité est rack4
:
kubectl get node NODE-NAME -o=jsonpath='{.metadata.labels.node.cluster.x-k8s.io/esxi-host}' --context tkg-mgmt-vc-admin@tkg-mgmt-vc
govc vm.info -json NODE-NAME | jq -r '.VirtualMachines[].Config.Hardware.Device[] | select(.DeviceInfo.Label == "Hard disk 1") | .Backing.FileName'
Pour modifier une configuration de zone de disponibilité dans un cluster existant, corrigez les configurations MachineDeployment
sous-jacentes de ses nœuds avec la nouvelle valeur de la zone de disponibilité.
Par exemple, si le fichier de configuration de cluster définit VSPHERE_AZ_0
sur rack1
et que vous souhaitez déplacer ses nœuds worker vers rack2
:
Interrogez les zones de disponibilité actuelles utilisées pour le cluster. Cet exemple utilise un cluster de charge de travail tkg-wc
, mais il peut également s'agir d'un cluster de gestion :
kubectl get cluster tkg-wc -o json \| jq -r '.spec.topology.workers.machineDeployments\[0\].failureDomain'
Répertoriez toutes les zones de disponibilité disponibles.
kubectl get vspheredeploymentzones -o=jsonpath='{range .items[?(@.status.ready == true)]}{.metadata.name}{"\n"}{end}'
rack1
rack2
Corrigez la configuration spec.toplogy.workers.machineDeployments
du cluster tkg-wc
pour définir sa zone VSphereFailureDomain
sur rack2
. Cet exemple part du principe que tkg-wc
est un cluster de plan dev
à nœud unique. Pour un cluster de plan prod
, vous devez corriger les trois configurations d'objets MachineDeployment
dans le cluster.
kubectl patch cluster tkg-wc --type=json -p='[{"op": "replace", "path": "/spec/topology/workers/machineDeployments/0/failureDomain", "value": "rack2"}]'
cluster.cluster.x-k8s.io/tkg-wc patched
Vérifiez que le cluster est mis à jour avec VSphereFailureDomain
rack2
.
kubectl get cluster tkg-wc -o=jsonpath='{.spec.topology.workers.machineDeployments[?(@.name=="md-0")].failureDomain}'
rack2
Vérifiez que les nœuds worker sont désormais déployés dans VSphereFailureDomain
rack2
.
Pour configurer de nouvelles zones de disponibilité à utiliser par les clusters TKG, puis les utiliser dans un cluster existant :
Préparez un fichier de configuration qui définit des objets VSphereFailureDomain
et VSphereDeploymentZone
pour chaque nouvelle zone de disponibilité. Utilisez l'exemple vsphere-3-zones.yaml
de la section Ajouter des zones de disponibilité pour les nœuds de plan de contrôle ci-dessus, qui définit les zones de disponibilité rack1
, rack2
et rack3
avec la région room1
.
Créez les objets VSphereFailureDomain
et VSphereDeploymentZone
.
tanzu mc az set -f vsphere-3-zones.yaml
Vous pouvez également exécuter kubectl apply -f vsphere-3-zones.yaml
Corrigez le cluster tkg-wc
avec VSphereFailureDomain
rack1
, rack2
et rack3
. Dans cet exemple, tkg-wc
est un plan de cluster de plan prod
avec trois configurations MachineDeployment
. Avec un cluster de plan dev
, il vous suffit de mettre à jour un MachineDeployment
dans les spec.toplogy.workers.machineDeployments
du cluster.
kubectl patch cluster tkg-wc --type=json -p='[ \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/0/failureDomain", "value": "rack1"}, \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/1/failureDomain", "value": "rack2"}, \
{"op": "replace", "path": "/spec/topology/workers/machineDeployments/2/failureDomain", "value": "rack3"}]'
Vérifiez que le cluster est mis à jour avec les nouvelles zones de disponibilité.
kubectl get cluster tkg-wc -o=jsonpath='{range .spec.topology.workers.machineDeployments[*]}{"Name: "}{.name}{"\tFailure Domain: "}{.failureDomain}{"\n"}{end}'
Vérifiez que ses nœuds worker sont désormais déployés dans VSphereFailureDomain
rack1
, rack2
et rack3
.
Pour configurer les nouvelles zones de disponibilité et les nouveaux objets MachineDeployment
à utiliser par les clusters TKG, puis les utiliser dans un cluster existant :
Préparez un fichier de configuration qui définit des objets VSphereFailureDomain
et VSphereDeploymentZone
pour chaque nouvelle zone de disponibilité. L'exemple ci-dessous, vsphere-1-zone.yaml
, définit la nouvelle zone de disponibilité rack2
avec la région room1
:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereFailureDomain
metadata:
name: rack2
spec:
region:
name: room1
type: ComputeCluster
tagCategory: k8s-region
zone:
name: rack2
type: HostGroup
tagCategory: k8s-zone
topology:
datacenter: dc0
computeCluster: cluster0
hosts:
vmGroupName: rack2-vm-grou
hostGroupName: rack2
datastore: ds-r2
networks:
- "VM Network"
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereDeploymentZone
metadata:
name: rack2
spec:
server: VSPHERE_SERVER
failureDomain: rack2
placementConstraint:
resourcePool: rp0
folder: folder0
Créez les objets VSphereFailureDomain
et VSphereDeploymentZone
.
tanzu mc az set -f vsphere-zones.yaml
Vous pouvez également exécuter kubectl apply -f vsphere-1-zone.yaml
Préparez un fichier de configuration pour le nouveau déploiement de machines. L'exemple ci-dessous, md-1.yaml
, définit un nouveau déploiement de machines md-1
avec sa propriété az
définie sur rack2
:
name: md-1
replicas: 1
az: rack2
nodeMachineType: t3.large
workerClass: tkg-worker
tkrResolver: os-name=ubuntu,os-arch=amd64
Créez un pool de nœuds à l'aide de la CLI Tanzu. Cet exemple utilise le cluster de charge de travail tkg-wc
, mais il peut également s'agir d'un cluster de gestion :
tanzu cluster node-pool set wl-antrea -f md-1.yaml
Cluster update for node pool 'md-1' completed successfully
Obtenez le nom du déploiement de machines dans la valeur node-pool créée :
kubectl get machinedeployments -l
topology.cluster.x-k8s.io/deployment-name=md-1
-o=jsonpath='{.items[*].metadata.name}'
wl-antrea-md-1-pd9vj
Vérifiez que le déploiement de machines est mis à jour avec VSphereFailureDomain
rack2
:
kubectl get machinedeployments wl-antrea-md-1-pd9vj -o json | \
jq -r '.spec.template.spec.failureDomain'
rack2
Vérifiez que le nœud worker de md-1
est déployé dans rack2
.
Lorsque vous modifiez la configuration de la zone de disponibilité d'un cluster de charge de travail, comme décrit dans l'une des sections ci-dessus, vous devez mettre à jour ses configurations de modules complémentaires CPI et CSI, puis recréer ces derniers pour appliquer les modifications. Les procédures ci-dessous expliquent la marche à suivre.
Limitations :
tagCategory
dans différentes régions et zones dans VsphereFailureDomain
doivent correspondre.Pour mettre à jour la configuration du module complémentaire CPI d'un cluster afin d'appliquer une modification de la zone de disponibilité, puis supprimer le programme d'installation du module correspondant pour recréer le module complémentaire avec les modifications :
Récupérez le nom de la vsphereCPIConfig
du cluster à l'aide de la référence cb
. Par exemple, avec un cluster de charge de travail nommé wl
:
kubectl -n default get cb wl -o json \| jq -r '.spec.cpi.valuesFrom.providerRef.name'
Modifiez la spécification vsphereCPIConfig
du cluster pour définir sa region
et sa zone
sur les champs tagCategory
que vous avez définis pour la région et la zone de la zone de disponibilité dans vSphere et dans la spécification vsphereFailuredomain
. Par exemple :
apiVersion: cpi.tanzu.vmware.com/v1alpha1
kind: VSphereCPIConfig
metadata:
name: wl
namespace: default
spec:
vsphereCPI:
mode: vsphereCPI
region: k8s-zone
tlsCipherSuites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
vmNetwork:
excludeExternalSubnetCidr: 10.215.10.79/32
excludeInternalSubnetCidr: 10.215.10.79/32
zone: k8s-zone
Appliquez les modifications et attendez que Reconcile succeeded
.
Vérifiez que le programme d'installation du module CPI (pkgi
) a réinstallé les éléments suivants :
kubectl -n tkg-system get wl-vsphere-cpi pkgi --context wl-admin@wl
Pour mettre à jour la configuration du module complémentaire CSI d'un cluster afin d'appliquer une modification de la zone de disponibilité, puis supprimer la csinodetopology
et le programme d'installation du module correspondant pour recréer le module complémentaire avec les modifications :
Récupérez le nom de la vsphereCPIConfig
du cluster à l'aide de la référence cb
. Par exemple, avec un cluster de charge de travail nommé wl
:
kubectl -n default get cb wl -o json |jq -r '.spec.csi.valuesFrom.providerRef.name')
Modifiez la spécification vsphereCSIConfig
du cluster pour définir sa region
et sa zone
sur les champs tagCategory
que vous avez définis pour la région et la zone de la zone de disponibilité dans vSphere et dans la spécification vsphereFailuredomain
. Par exemple :
apiVersion: csi.tanzu.vmware.com/v1alpha1
kind: VSphereCSIConfig
metadata:
name: wl
namespace: default
spec:
vsphereCSI:
config:
datacenter: /dc0
httpProxy: ""
httpsProxy: ""
insecureFlag: true
noProxy: ""
region: k8s-region
tlsThumbprint: ""
useTopologyCategories: true
zone: k8s-zone
mode: vsphereCSI
Appliquez les modifications.
Supprimez les objets csinode
et csiNodeTopology
afin de les recréer. csinodetopology
ne se met pas à jour automatiquement :
kubectl -n delete csinode --all --context wl-admin@wl
kubectl -n delete csinodetopology --all --context wl-admin@wl
Supprimez le programme d'installation du module vsphere-csi
du cluster et attendez que Reconcile succeeded
.
kubectl delete pkgi -n tkg-system wl-vsphere-csi --context wl-admin@wl
Vérifiez que tous les objets csinodes
incluent le paramètre topologyKeys
, par exemple :
kubectl get csinodes -o jsonpath='{range .items[*]}{.metadata.name} {.spec}{"\n"}{end}'
k8s-control-1 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-1","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-control-2 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-2","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-control-3 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-control-3","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-1 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-1","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-2 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-2","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-3 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-3","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-4 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-4","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-5 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-5","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
k8s-node-6 {"drivers":[{"name":"csi.vsphere.vmware.com","nodeID":"k8s-node-6","topologyKeys":["topology.csi.vmware.com/k8s-region","topology.csi.vmware.com/k8s-zone"]}]}
Vérifiez que les étiquettes de topologie de tous les nœuds reflètent les zones et les régions de la zone de disponibilité appropriée, par exemple :
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
k8s-control-1 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-A
k8s-control-2 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-control-3 Ready control-plane 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-C
k8s-node-1 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-A
k8s-node-2 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-node-3 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-B
k8s-node-4 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-1,topology.csi.vmware.com/k8s-zone=zone-C
k8s-node-5 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-2,topology.csi.vmware.com/k8s-zone=zone-D
k8s-node-6 Ready <none> 1d v1.21.1 topology.csi.vmware.com/k8s-region=region-2,topology.csi.vmware.com/k8s-zone=zone-D
Utilisez la commande tanzu mc az list
pour répertorier les zones de disponibilité définies dans le cluster de gestion autonome ou utilisées par un cluster de charge de travail :
Pour répertorier les zones de disponibilité actuellement utilisées par un cluster de gestion et ses clusters de charge de travail :
tanzu management-cluster available-zone list
Pour répertorier toutes les zones de disponibilité définies dans le cluster de gestion et, par conséquent, disponibles pour les nœuds de cluster de charge de travail :
tanzu management-cluster available-zone list -a
Pour les zones de disponibilité actuellement utilisées par le cluster de charge de travail CLUSTER-NAME
:
tanzu management-cluster available-zone list -c CLUSTER-NAME:
Les commandes tanzu mc az
sont mises en alias à partir de tanzu management-cluster available-zone
.
Exemple de sortie :
AZNAME ZONENAME ZONETYPE REGIONNAME REGIONTYPE DATASTORE NETWORK OWNERCLUSTER STATUS
us-west-1a us-west-1a ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
us-west-1b us-west-1b ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
us-west-1c us-west-1c ComputeCluster us-west-1 Datacenter sharedVmfs-0 VM Network az-1 ready
La sortie répertorie les éléments suivants :
AZNAME
, ZONENAME
: nom de la zone de disponibilitéZONETYPE
: type d'objet vSphere étendu à la zone de disponibilité, ComputeCluster
ou HostGroup
REGIONNAME
: nom de la région qui contient la zone de disponibilitéREGIONTYPE
: type d'objet vSphere étendu à la région, Datacenter
ou ComputeCluster
DATASTORE
: banque de données qui héberge les machines virtuelles dans la régionNETWORK
: réseau servant les VM dans la régionOWNERCLUSTER
: Cluster ou clusters TKG qui s'exécutent dans la zone de disponibilitéSTATUS
: état actuel de la zone de disponibilitéLe groupe de commandes tanzu mc az
est mis en alias à partir de tanzu management-cluster available-zone
.
Utilisez la commande tanzu mc az delete
pour supprimer une zone de disponibilité inutilisée, par exemple :
tanzu mc az delete AZNAME
Où AZNAME
est le nom de la zone de disponibilité tel que répertorié par tanzu mc az list
.
Vous pouvez uniquement supprimer une zone de disponibilité si elle n'héberge actuellement pas de nœuds de cluster TKG, comme indiqué par la tanzu mc az list
ne répertoriant aucun OWNERCLUSTER
pour la zone de disponibilité.