Après avoir créé un cluster avec bmctl
, vous pouvez modifier certains aspects de sa configuration en effectuant la séquence d'actions suivante:
Modifiez les valeurs de certains champs du fichier de configuration du cluster, qui se trouve par défaut à cet emplacement :
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
.Mettez à jour le cluster en exécutant la commande
bmctl update
.
De cette manière, vous pouvez, par exemple, ajouter ou supprimer des nœuds dans un cluster, ou remplacer des nœuds dans un cluster. Ce document explique comment effectuer ces mises à jour et d'autres sur un cluster.
Toutefois, il est important de noter que de nombreux aspects de la configuration de votre cluster sont immuables et ne peuvent plus être mis à jour après la création du cluster. Pour obtenir la liste complète des champs modifiables et immuables, consultez la documentation de référence sur les champs de configuration d'un cluster. La référence de champ est une table triable. Cliquez sur les en-têtes de colonne pour modifier l'ordre de tri. Cliquez sur le nom d'un champ pour afficher sa description.
Ajouter ou supprimer des nœuds dans un cluster
Un pool de nœuds est un groupe de nœuds au sein d'un cluster qui possèdent tous la même configuration. Gardez à l'esprit qu'un nœud appartient toujours à un pool de nœuds. Pour ajouter un nouveau nœud à un cluster, vous devez l'ajouter à un pool de nœuds particulier. Supprimer un nœud d'un pool de nœuds revient à supprimer le nœud du cluster.
Il existe trois types de pools de nœuds dans GDCV pour Bare Metal: le plan de contrôle, l'équilibreur de charge et les pools de nœuds de calcul.
Pour ajouter ou supprimer un nœud dans un pool de nœuds, vous devez ajouter ou supprimer l'adresse IP du nœud dans une section spécifique du fichier de configuration du cluster. La liste suivante indique la section à modifier pour un pool de nœuds donné:
- Pool de nœuds de calcul: ajoutez ou supprimez l'adresse IP du nœud dans la section
spec.nodes
de la spécificationNodePool
. - Pool de nœuds du plan de contrôle: ajoutez ou supprimez l'adresse IP du nœud dans la section
spec.controlPlane.nodePoolSpec.nodes
de la spécificationCluster
. - Pool de nœuds de l'équilibreur de charge: ajoutez ou supprimez l'adresse IP du nœud dans la section
spec.loadBalancer.nodePoolSpec.nodes
de la spécificationCluster
.
Exemple: supprimer un nœud de calcul
Voici un exemple de fichier de configuration de cluster qui montre les spécifications de deux nœuds de calcul:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: nodepool1
namespace: cluster-cluster1
spec:
clusterName: cluster1
nodes:
- address: 172.18.0.5
- address: 172.18.0.6
Pour supprimer un nœud:
(Facultatif) Si le nœud que vous supprimez exécute des pods critiques, commencez par le mettre en mode de maintenance.
Vous pouvez surveiller le processus de drainage des nœuds de calcul en affichant les champs
status.nodesDrained
etstatus.nodesDraining
de la ressourceNodePool
.Modifiez le fichier de configuration du cluster pour supprimer l'entrée d'adresse IP du nœud.
Mettez à jour le cluster :
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du cluster que vous souhaitez mettre à jour.ADMIN_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'administrateur.
Une fois la commande
bmctl update
exécutée, les tâchesmachine-preflight
etmachine-init
peuvent prendre un certain temps. Vous pouvez afficher l'état des nœuds et de leurs pools de nœuds respectifs en exécutant les commandes décrites dans la section Vérifier vos mises à jour de ce document.
Forcer la suppression d'un nœud
Si la commande bmctl update
ne parvient pas à supprimer un nœud, vous devrez peut-être forcer sa suppression du cluster. Pour en savoir plus, consultez la section Supprimer de force la suppression des nœuds défaillants.
Remplacer les nœuds du plan de contrôle haute disponibilité
Vous pouvez remplacer les nœuds du plan de contrôle à haute disponibilité (HA) dans les clusters d'administrateur, d'utilisateur, autonomes et hybrides.
Pour remplacer un nœud dans un cluster, procédez comme suit:
- Supprimez l'adresse IP du nœud du fichier de configuration du cluster.
- Mettez à jour le cluster.
- Vérifiez l'état des nœuds du cluster.
- Ajoutez l'adresse IP d'un nouveau nœud au même fichier de configuration de cluster.
- Mettez à jour le cluster.
Le reste de cette section comprend un exemple.
Voici un exemple de fichier de configuration de cluster qui montre trois nœuds de plan de contrôle dans un cluster d'utilisateur:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: user-cluster
namespace: cluster-user-cluster
spec:
controlPlane:
nodePoolSpec:
nodes:
- address: 10.200.0.11
- address: 10.200.0.12
- address: 10.200.0.13
Pour remplacer le dernier nœud répertorié dans la section spec.controlPlane.nodePoolSpec.nodes
, procédez comme suit:
Supprimez le nœud en supprimant son entrée d'adresse IP dans le fichier de configuration du cluster. Une fois cette modification effectuée, le fichier de configuration du cluster doit se présenter comme suit:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12
Mettez à jour le cluster en exécutant la commande suivante:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Apportez les modifications suivantes :
- Remplacez CLUSTER_NAME par le nom du cluster que vous souhaitez mettre à jour.
- Si le cluster est un cluster autogéré (tel qu'un cluster d'administrateur ou autonome), remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster. Si le cluster est un cluster d'utilisateur, comme dans cet exemple, remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster admin.
Une fois la commande
bmctl update
exécutée, les tâchesmachine-preflight
etmachine-init
peuvent prendre un certain temps. Vous pouvez afficher l'état des nœuds et de leurs pools de nœuds respectifs en exécutant les commandes décrites dans la section Vérifier vos mises à jour de ce document. Une fois que le pool de nœuds et les nœuds sont prêts, vous pouvez passer à l'étape suivante.Ajoutez un nouveau nœud de plan de contrôle au pool de nœuds en ajoutant l'adresse IP de ce nouveau nœud de plan de contrôle à la section
spec.controlPlane.nodePoolSpec.nodes
du fichier de configuration du cluster. Une fois cette modification effectuée, le fichier de configuration du cluster devrait se présenter comme suit:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12 - address: 10.200.0.14
Mettez à jour le cluster en exécutant la commande suivante:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Apportez les modifications suivantes :
- Remplacez CLUSTER_NAME par le nom du cluster que vous souhaitez mettre à jour.
- Si le cluster est un cluster autogéré (tel qu'un cluster d'administrateur ou autonome), remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster. Si le cluster est un cluster d'utilisateur, comme dans cet exemple, remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster admin.
Valider vos mises à jour
Vous pouvez afficher l'état des nœuds et de leurs pools de nœuds respectifs à l'aide de la commande kubectl get
.
Par exemple, la commande suivante affiche l'état des pools de nœuds dans l'espace de noms du cluster cluster-my-cluster
:
kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io
Le système renvoie des résultats semblables à ceux-ci :
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
cluster-my-cluster 3 0 0 0 0
cluster-my-cluster-lb 2 0 0 0 0
np1 3 0 0 0 0
Reconciling=1
signifie que l'étape de rapprochement est toujours en cours. Vous devez attendre que l'état passe à Reconciling=0
.
Vous pouvez également vérifier l'état des nœuds d'un cluster en exécutant la commande suivante:
kubectl get nodes --kubeconfig=KUBECONFIG
Si vous avez besoin d'informations supplémentaires sur le diagnostic de vos clusters, consultez la page Créer des instantanés pour diagnostiquer les clusters.
Fonctionnalités pouvant être modifiées lors d'une mise à jour
En plus d'ajouter, de supprimer ou de remplacer des nœuds, vous pouvez utiliser la commande bmctl update
pour modifier certaines valeurs de champs modifiables, des ressources personnalisées (CR) et des annotations dans le fichier de configuration du cluster.
Pour mettre à jour une ressource de cluster, modifiez le fichier de configuration du cluster et appliquez vos modifications à l'aide de bmctl update
.
Les sections suivantes décrivent quelques exemples courants de mise à jour d'un cluster existant en modifiant une valeur de champ, une RS ou une annotation.
loadBalancer.addressPools
La section addressPools
contient des champs permettant de spécifier des pools d'équilibrage de charge pour des équilibreurs de charge groupés. Vous pouvez ajouter d'autres pools d'adresses d'équilibrage de charge à tout moment, mais vous ne pouvez pas supprimer ni modifier les pools d'adresses existants.
addressPools:
- name: pool1
addresses:
- 192.168.1.0-192.168.1.4
- 192.168.1.240/28
- name: pool2
addresses:
- 192.168.1.224/28
Empêcher la suppression accidentelle du cluster
Si vous ajoutez l'annotation baremetal.cluster.gke.io/prevent-deletion: "true"
au fichier de configuration de votre cluster, vous ne pourrez pas supprimer ce cluster.
Par exemple, l'exécution de kubectl delete cluster
ou bmctl reset cluster
génère une erreur.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: ci-10c3c6f4d9c698e
namespace: cluster-ci-10c3c6f4d9c698e
annotations:
baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
clusterNetwork:
bypassPreflightCheck
La valeur par défaut du champ bypassPreflightCheck
est false
. Si vous définissez ce champ sur true
dans le fichier de configuration du cluster, les vérifications internes préliminaires sont ignorées en appliquant les ressources aux clusters existants.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
bypassPreflightCheck: true
loginUser
Vous pouvez définir le champ loginUser
sous la configuration de l'accès aux nœuds. Ce champ est compatible avec la fonctionnalité sudo
sans mot de passe pour la connexion à la machine.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
nodeAccess:
loginUser: abm
NetworkGatewayGroup
La ressource personnalisée NetworkGatewayGroup
permet de fournir des adresses IP flottantes pour les fonctionnalités de mise en réseau avancées, telles que la passerelle NAT de sortie ou l'équilibrage de charge groupé avec BGP.
Pour utiliser la ressource personnalisée NetworkGatewayGroup
et les fonctionnalités de mise en réseau associées, vous devez définir clusterNetwork.advancedNetworking
sur true
lorsque vous créez vos clusters.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
Lorsque vous configurez des équilibreurs de charge groupés avec BGP, l'équilibrage de charge du plan de données utilise par défaut les mêmes pairs externes que ceux spécifiés pour l'appairage de plans de contrôle. Vous pouvez également configurer l'équilibrage de charge du plan de données séparément, en utilisant la ressource personnalisée BGPLoadBalancer
(et la ressource personnalisée BGPPeer
). Pour en savoir plus, consultez la section Configurer des équilibreurs de charge groupés avec BGP.
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
Lorsque vous configurez des équilibreurs de charge groupés avec BGP, l'équilibrage de charge du plan de données utilise par défaut les mêmes pairs externes que ceux spécifiés pour l'appairage de plans de contrôle. Vous pouvez également configurer l'équilibrage de charge du plan de données séparément, en utilisant la ressource personnalisée BGPPeer
(et la ressource personnalisée BGPLoadBalancer
). Pour en savoir plus, consultez la section Configurer des équilibreurs de charge groupés avec BGP.
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
NetworkAttachmentDefinition
Vous pouvez utiliser la commande bmctl update
pour modifier les ressources personnalisées NetworkAttachmentDefinition
correspondant au réseau.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: gke-network-1
namespace: cluster-my-cluster
spec:
config: '{
"type": "ipvlan",
"master": "enp2342",
"mode": "l2",
"ipam": {
"type": "whereabouts",
"range": "172.120.0.0/24"
Augmenter la portée du réseau de services
Pour créer plus de services que la limite initiale, vous pouvez réduire le masque CIDR de service IPv4 afin d'étendre le réseau de service de votre cluster. La réduction du masque (la valeur après "/") augmente la plage du réseau.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
...
clusterNetwork:
services:
cidrBlocks:
- 172.26.0.0/14
...
Vous pouvez uniquement augmenter la plage du CIDR du service IPv4. La plage du réseau ne peut pas être réduite, ce qui signifie que le masque (la valeur après "/") ne peut pas être augmenté.
Configurer les paramètres d'extraction d'images de kubelet
Le kubelet s'exécute sur chaque nœud de votre cluster. Le kubelet est chargé de surveiller les conteneurs d'un nœud et de s'assurer qu'ils sont opérationnels. Si nécessaire, le kubelet interroge et extrait des images de Container Registry.
Il peut être difficile de mettre à jour manuellement les configurations de kubelet et de les garder synchronisées sur tous les nœuds de votre cluster. Pour ne rien arranger, les modifications manuelles de la configuration du kubelet sur vos nœuds sont perdues lorsque vous mettez à niveau votre cluster.
Pour vous aider à rendre les mises à jour synchronisées plus faciles et persistantes, GKE sur Bare Metal vous permet de spécifier certains paramètres kubelet pour chacun des pools de nœuds de votre cluster : les nœuds du plan de contrôle, les nœuds de l'équilibreur de charge et les nœuds de calcul. Les paramètres s'appliquent à tous les nœuds d'un pool donné et sont conservés lors des mises à niveau du cluster. Les champs de ces paramètres sont modifiables. Vous pouvez donc les mettre à jour à tout moment, et pas seulement lors de la création du cluster.
Les champs compatibles suivants contrôlent les opérations d'extraction de Container Registry pour kubelet:
registryBurst
(par défaut: 10)registryPullQPS
(par défaut: 5)serializeImagePulls
(par défaut: vrai)
Pour en savoir plus sur chacun des champs de configuration du kubelet, consultez la documentation de référence sur le champ de configuration du cluster.
Vous pouvez spécifier ces champs dans les sections kubeletConfig
de la spécification Cluster et de la spécification NodePool pour les pools de nœuds suivants:
- Spécification du cluster :
- Nœuds du plan de contrôle
spec.controlPlane.nodePoolSpec.kubeletConfig
- Nœuds d'équilibreur de charge
spec.loadBalancer.nodePoolSpec.kubeletConfig
- Nœuds du plan de contrôle
- Spécification du pool de nœuds :
- Nœuds de calcul
spec.kubeletConfig
- Nœuds de calcul
L'exemple suivant montre les champs ajoutés avec leurs valeurs par défaut dans le fichier de configuration du cluster. Notez que l'annotation preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
est obligatoire.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
spec:
...
controlPlane:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
loadBalancer:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: node-pool-new
namespace: cluster-cluster1
spec:
clusterName: cluster1
...
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
Dans chaque cas, le paramètre s'applique à tous les nœuds du pool.
Comment l'utiliser ?
Voici quelques points à prendre en compte pour régler l'extraction d'images:
Étant donné que les images sont extraites par défaut en série, une extraction d'images qui prend beaucoup de temps peut retarder toutes les autres extractions d'images planifiées sur un nœud. Les extractions d'images retardées peuvent bloquer le processus de mise à niveau (en particulier lorsque de nouvelles images GKE sur Bare Metal doivent être déployées sur un nœud). Si vous êtes affecté par des délais d'extraction d'image, vous pouvez définir
serializeImagePulls
surfalse
pour autoriser l'extraction d'images parallèles.Si vous rencontrez des erreurs de limitation de l'extraction d'images, telles que
pull QPS exceeded
, vous pouvez augmenterregistryPullQPS
etregistryBurst
pour augmenter le débit d'extraction d'image. Ces deux champs ajustent le taux d'extraction et la taille de la file d'attente, et peuvent aider à résoudre d'autres problèmes liés à la limitation. Les valeurs négatives ne sont pas autorisées.
Utilisez bmctl update
pour appliquer vos modifications
Après avoir modifié le fichier de configuration, mettez à jour le cluster en exécutant la commande bmctl update
suivante:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
Apportez les modifications suivantes :
- Remplacez CLUSTER_NAME par le nom du cluster que vous souhaitez mettre à jour.
- Si le cluster est un cluster autogéré (tel qu'un cluster d'administrateur ou autonome), remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster. Si le cluster est un cluster d'utilisateur, remplacez KUBECONFIG par le chemin d'accès au fichier kubeconfig du cluster admin.