Cette rubrique répond aux questions fréquemment posées concernant les nœuds et les pools de nœuds. Découvrez comment modifier le nombre maximal de pods sur un nœud, mettre à jour l'image du système d'exploitation d'un pool de nœuds et résoudre les problèmes de délai d'expiration des nœuds.
Index
Pour diagnostiquer et résoudre les problèmes liés aux nœuds, consultez la rubrique Dépannage des nœuds anormaux .
Utilisation d'instances spot dans un pool de nœuds
Pour utiliser des instances spot, créez un nouveau pool de nœuds ou utilisez la commande spot-instance-advisor. Pour plus d'informations, consultez la rubrique Meilleures pratiques pour les pools de nœuds avec instances spot.
Pour maintenir la cohérence au sein d'un pool de nœuds, vous ne pouvez pas convertir un pool de nœuds avec instances spot en un pool de nœuds avec paiement à l'utilisation ou par abonnement, ni inversement.
Plusieurs types d'instances ECS par pool de nœuds
Oui, c'est possible. Nous vous recommandons de configurer votre pool de nœuds avec plusieurs types d'instances ECS afin d'éviter les échecs de mise à l'échelle horizontale dus à l'indisponibilité d'un type d'instance ou à des pénuries de stock. Pour ce faire, configurez plusieurs vSwitch dans plusieurs zones de disponibilité, sélectionnez plusieurs types d'instances ECS ou spécifiez les types d'instances en fonction du nombre de vCPU et de la mémoire. Après la création du pool de nœuds, vous pouvez ajouter des types d'instances en suivant les recommandations de niveau de scalabilité dans la console ou en consultant le niveau de scalabilité d'un pool de nœuds.
Pour obtenir la liste des types d'instances pris en charge et des recommandations de configuration des nœuds, consultez la rubrique Recommandations de configuration des types d'instances ECS .
Nombre maximal de pods par nœud
Le calcul du nombre maximal de Pods par nœud dépend du plug-in réseau du cluster. Pour plus d'informations, consultez la rubrique Nombre maximal de Pods par nœud.
Terway : Le nombre maximal de Pods par nœud correspond à la somme des Pods sur le réseau de conteneurs et sur le réseau hôte.
Flannel : La limite correspond à la valeur Number of Pods per Node spécifiée lors de la création du cluster.
Vous pouvez afficher le nombre maximal de Pods par nœud, également appelé Pod Quota , sur la page Nodes Nodes de la console.
Vous ne pouvez pas modifier le nombre maximal de Pods par nœud après la création d'un cluster. Si un nœud atteint cette limite, effectuez une mise à l'échelle horizontale de vos nœuds pour augmenter la capacité en Pods. Pour plus d'informations, consultez la rubrique Ajustement des Pods disponibles sur un nœud.
Ajustement de la capacité en pods des nœuds
Le plug-in réseau détermine le nombre maximal de pods qu'un nœud de travail peut prendre en charge, une limite qui ne peut généralement pas être modifiée. En mode Terway, la limite dépend du nombre d'interfaces réseau élastiques (ENI) fournies par l'instance ECS. En mode Flannel, la limite est spécifiée lors de la création d'un cluster et ne peut pas être modifiée ultérieurement. Si vous atteignez la limite de pods, nous vous recommandons d'ajouter des nœuds à votre pool de nœuds pour augmenter le nombre total de pods disponibles.
Pour plus d'informations, consultez la rubrique Augmentation du nombre maximal de pods dans un cluster.
Modification de la configuration des nœuds
Afin de garantir la stabilité des services, certains paramètres, notamment ceux liés à la disponibilité et à la mise en réseau, sont immuables après la création d'un pool de nœuds. Par exemple, vous ne pouvez pas modifier le runtime de conteneur ni le VPC auquel appartient un nœud.
Pour les paramètres modifiables, les modifications apportées à la configuration du pool de nœuds s'appliquent uniquement aux nouveaux nœuds. Les nœuds existants ne sont pas affectés, sauf si vous utilisez des options spécifiques telles que Update ECS Tags of Existing Nodes ou Update Labels and Taints of Existing Nodes.
Consultez la rubrique Création et gestion des pools de nœuds pour obtenir des détails sur les paramètres modifiables et le moment où les modifications prennent effet.
Sinon, pour appliquer une nouvelle configuration, vous pouvez créer un nouveau pool de nœuds avec la configuration souhaitée. Ensuite, mettez en quarantaine et videz les nœuds de l'ancien pool de nœuds pour migrer vos charges de travail. Une fois la migration terminée, vous pouvez libérer les instances de l'ancien pool de nœuds. Pour obtenir des instructions, consultez la rubrique Mise en quarantaine et vidage des nœuds.
Puis-je désactiver la fonctionnalité Nœuds attendus ?
Si le Scaling Mode d'un pool de nœuds est défini sur Manual, vous devez configurer les Expected Nodes. Cette fonctionnalité ne peut pas être désactivée.
Pour supprimer un nœud spécifique, consultez la rubrique Suppression d'un nœud. Pour ajouter un nœud spécifique, consultez la rubrique ajout d'un nœud existant. Après avoir supprimé un nœud ou ajouté un nœud existant, la valeur Expected Nodes est automatiquement mise à jour avec le nouveau nombre de nœuds. Vous n'avez pas besoin de la modifier manuellement.
Pools de nœuds avec et sans la fonctionnalité Nœuds attendus
Le paramètre Expected Nodes définit la capacité cible d'un pool de nœuds. Vous pouvez effectuer une mise à l'échelle horizontale ou verticale d'un pool de nœuds en ajustant cette valeur. Toutefois, certains pools de nœuds hérités peuvent ne pas avoir cette fonctionnalité activée.
Le tableau suivant décrit la réponse du système aux opérations pour les pools de nœuds avec et sans la fonctionnalité Expected Nodes activée.
|
Actions |
Expected nodes enabled |
Expected nodes disabled (legacy) |
Recommendation |
|
Mise à l'échelle verticale en réduisant la valeur Expected Nodes dans la console ACK ou via l'API OpenAPI. |
Le système termine les nœuds jusqu'à ce que le nombre réel de nœuds corresponde à la nouvelle valeur Expected Nodes. |
Si le nombre actuel de nœuds est supérieur à la valeur spécifiée, le système termine les nœuds excédentaires. Cette action active également la fonctionnalité Expected Nodes pour le pool de nœuds. |
Aucune. |
|
Suppression d'un nœud spécifique depuis la console ACK ou via l'API OpenAPI. |
La valeur Expected Nodes diminue du nombre de nœuds supprimés. Par exemple, si la valeur Expected Nodes est de 10 et que vous supprimez 3 nœuds, la valeur devient 7. |
Le nœud spécifié est supprimé du cluster. |
Aucune. |
|
Suppression d'un nœud en exécutant |
La valeur Expected Nodes reste inchangée. |
Aucun changement. |
Non recommandé. |
|
Libération manuelle d'une instance ECS depuis la console ECS ou via l'API OpenAPI. |
Le système crée automatiquement une nouvelle instance ECS pour maintenir le nombre Expected Nodes. |
Le pool de nœuds n'est pas informé du changement. Aucune nouvelle instance ECS n'est créée. Le nœud supprimé affiche temporairement le statut Unknown. |
Non recommandé. Cela provoque une incohérence des données entre ACK et Auto Scaling (ESS). Utilisez la méthode recommandée pour supprimer les nœuds. Pour plus d'informations, consultez la rubrique Suppression d'un nœud. |
|
Expiration d'une instance ECS par abonnement. |
Le système crée automatiquement une nouvelle instance ECS pour maintenir le nombre Expected Nodes. |
Le pool de nœuds n'est pas informé du changement. Aucune nouvelle instance ECS n'est créée. Le nœud supprimé affiche temporairement le statut Unknown. |
Non recommandé. Cela provoque une incohérence des données entre ACK et ESS. Utilisez la méthode recommandée pour supprimer les nœuds. Pour plus d'informations, consultez la rubrique Suppression d'un nœud. |
|
Échec d'une vérification d'intégrité pour une instance ECS dans un groupe de mise à l'échelle ESS avec vérifications d'intégrité activées (par exemple, parce que l'instance est arrêtée). |
Le système crée automatiquement une nouvelle instance ECS pour maintenir le nombre Expected Nodes. |
Le système crée une nouvelle instance ECS pour remplacer celle qui a échoué. |
Non recommandé. Ne gérez pas directement les groupes de mise à l'échelle associés à un pool de nœuds. |
|
Suppression d'une instance ECS d'un groupe de mise à l'échelle ESS sans modifier le nombre d'instances attendu. |
Le système crée automatiquement une nouvelle instance ECS pour maintenir le nombre Expected Nodes. |
Aucune nouvelle instance ECS n'est créée. |
Non recommandé. Ne gérez pas directement les groupes de mise à l'échelle associés à un pool de nœuds. |
Migration des nœuds non gérés vers un pool de nœuds
Dans les anciens clusters ACK créés avant la publication de la fonctionnalité de pool de nœuds, certains nœuds de travail peuvent ne pas appartenir à un pool de nœuds. Pour placer ces nœuds non gérés sous une gestion groupée et une maintenance automatisée, migrez-les vers un pool de nœuds : créez un pool de nœuds, supprimez les nœuds non gérés du cluster, puis rajoutez leurs instances ECS au pool de nœuds.
Pour ce faire, créez un nouveau pool de nœuds ou effectuez une mise à l'échelle horizontale d'un pool existant, supprimez les nœuds non gérés du cluster, puis ajoutez-les au pool de nœuds cible. Pour plus d'informations, consultez la rubrique Migration des nœuds non gérés vers un pool de nœuds.
Remplacement de l'image du système d'exploitation d'un pool de nœuds
Vous pouvez remplacer le système d'exploitation d'un pool de nœuds, par exemple pour migrer d'une version arrivée en fin de vie (EOL) vers une version prise en charge. Avant de commencer, consultez les notes de version des images du système d'exploitation pour connaître les systèmes d'exploitation pris en charge, les dernières versions d'images et les limitations d'utilisation.
Consultez la rubrique Remplacement du système d'exploitation d'un pool de nœuds pour obtenir des instructions détaillées et des considérations importantes.
Libération d'une instance ECS spécifique
Pour libérer une instance ECS spécifique, supprimez le nœud. Cette action met automatiquement à jour le nombre attendu de nœuds. N'essayez pas de libérer une instance spécifique en modifiant le nombre attendu de nœuds, car cela déclenche une mise à l'échelle verticale aléatoire et ne garantit pas la suppression de l'instance visée.
Comment résoudre les délais d'expiration lors de l'ajout de nœuds ?
Vérifiez la connectivité réseau entre le nœud et le API Server CLB. Commencez par vérifier que le groupe de sécurité répond aux exigences. Pour connaître les limitations des groupes de sécurité lors de l'ajout d'un nœud existant, consultez la rubrique Limitations. Pour les autres problèmes de connectivité réseau, consultez la rubrique FAQ sur la gestion du réseau.
Modification des noms d'hôte des nœuds de travail
Vous ne pouvez pas personnaliser le nom d'hôte d'un nœud de travail après la création du cluster. Comme solution de contournement, vous pouvez utiliser la règle de nommage du pool de nœuds pour modifier le nom d'hôte.
Lors de la création d'un cluster, vous pouvez définir le nom d'hôte d'un nœud de travail dans le paramètre Custom Node Name. Pour plus d'informations, consultez la rubrique Création d'un cluster ACK managé.
Supprimez le nœud. Pour plus d'informations, consultez la rubrique Suppression d'un nœud.
-
Rajoutez le nœud que vous avez supprimé au pool de nœuds. Pour plus d'informations, consultez la rubrique Ajout manuel de nœuds.
Le nœud est alors automatiquement renommé selon la règle de nommage du pool de nœuds.
Mise à niveau manuelle du noyau d'un nœud GPU
Cette rubrique explique comment mettre à niveau manuellement le noyau et le pilote NVIDIA correspondant sur un nœud GPU dans un cluster existant.
La version actuelle du noyau est inférieure à 3.10.0-957.21.3.
La mise à niveau du noyau est une opération délicate. Confirmez la version cible du noyau et procédez avec prudence.
Ce guide se concentre sur la mise à niveau du pilote NVIDIA requise après une mise à niveau du noyau. Le processus de mise à niveau du noyau lui-même n'est pas couvert.
Obtenir le fichier kubeconfig d'un cluster et s'y connecter avec kubectl.
-
Placez le nœud GPU en quarantaine (par exemple, le nœud cn-beijing.i-2ze19qyi8votgjz*).
kubectl cordon cn-beijing.i-2ze19qyi8votgjz***** node/cn-beijing.i-2ze19qyi8votgjz***** cordoned -
Évacuez le nœud GPU sur lequel vous souhaitez mettre à niveau le pilote.
kubectl drain cn-beijing.i-2ze19qyi8votgjz***** --grace-period=120 --ignore-daemonsets=true node/cn-beijing.i-2ze19qyi8votgjz***** cordoned WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg pod/nginx-ingress-controller-78d847fb96-***** evicted -
Désinstallez le pilote NVIDIA actuel.
RemarqueLe package de pilote désinstallé à cette étape est la version 384.111. Si votre version de pilote n'est pas la 384 111, vous devez télécharger le programme d'installation du pilote correspondant depuis le site Web officiel de NVIDIA et remplacer
384.111dans cette étape par votre version réelle.-
Connectez-vous au nœud GPU et exécutez
nvidia-smipour vérifier la version du pilote.sudo nvidia-smi -a | grep 'Driver Version' Driver Version : 384.111 -
Téléchargez le programme d'installation du pilote NVIDIA.
cd /tmp/ sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.runRemarqueVous devez utiliser le programme d'installation pour désinstaller le pilote NVIDIA.
-
Désinstallez le pilote NVIDIA actuel.
sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
-
-
Mettez à niveau le noyau.
Suivez les procédures de votre système d'exploitation pour mettre à niveau le noyau.
-
Redémarrez l'instance GPU.
sudo reboot -
Reconnectez-vous au nœud GPU et installez le paquet kernel-devel correspondant.
sudo yum install -y kernel-devel-$(uname -r) -
Accédez au site Web officiel de NVIDIA pour télécharger et installer le pilote NVIDIA requis. Cette rubrique utilise la version 410.79 à titre d'exemple.
# Change to the /tmp directory. cd /tmp/ # Download the NVIDIA driver installer. sudo curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run # Add executable permissions to the installer. sudo chmod u+x NVIDIA-Linux-x86_64-410.79.run # Run the installer in silent mode. sudo sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q # Warm up the GPU. sudo nvidia-smi -pm 1 || true sudo nvidia-smi -acp 0 || true sudo nvidia-smi --auto-boost-default=0 || true sudo nvidia-smi --auto-boost-permission=0 || true sudo nvidia-modprobe -u -c=0 -m || true -
Vérifiez le fichier /etc/rc.d/rc.local pour confirmer s'il contient la configuration suivante. Sinon, ajoutez-la manuellement.
sudo nvidia-smi -pm 1 || true sudo nvidia-smi -acp 0 || true sudo nvidia-smi --auto-boost-default=0 || true sudo nvidia-smi --auto-boost-permission=0 || true sudo nvidia-modprobe -u -c=0 -m || true -
Redémarrez kubelet et Docker.
sudo service kubelet stop sudo service docker restart sudo service kubelet start -
Retirez le nœud GPU de la quarantaine pour permettre à nouveau la planification des pods dessus.
kubectl uncordon cn-beijing.i-2ze19qyi8votgjz***** node/cn-beijing.i-2ze19qyi8votgjz***** uncordoned -
Vérifiez la version du pod de plug-in de périphérique sur le nœud GPU.
kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz***** nvidia-smi Thu Jan 17 00:33:27 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 410.79 Driver Version: 410.79 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla P100-PCIE... On | 00000000:00:09.0 Off | 0 | | N/A 27C P0 28W / 250W | 0MiB / 16280MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+RemarqueSi vous exécutez la commande
docker pset constatez qu'aucun conteneur n'est démarré sur le nœud GPU, consultez la rubrique Résolution des problèmes de démarrage des conteneurs sur les nœuds GPU.
Résolution des problèmes de démarrage des conteneurs sur les nœuds GPU
Sur un nœud GPU exécutant certaines versions de Kubernetes, les conteneurs peuvent ne pas démarrer après le redémarrage des services kubelet et Docker. La commande sudo docker ps renvoie une liste vide.
sudo service kubelet stop
# Redirecting to /bin/systemctl stop kubelet.service
sudo service docker stop
# Redirecting to /bin/systemctl stop docker.service
sudo service docker start
# Redirecting to /bin/systemctl start docker.service
sudo service kubelet start
# Redirecting to /bin/systemctl start kubelet.service
sudo docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Ce problème survient lorsque le pilote Cgroup utilisé par Docker ne correspond pas à celui attendu par kubelet. Pour diagnostiquer le problème, vérifiez le pilote Cgroup de Docker.
sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs
Si la sortie est cgroupfs, cela confirme une incompatibilité, car kubelet est configuré pour utiliser le pilote systemd.
Pour résoudre ce problème, modifiez le pilote Cgroup de Docker en systemd.
-
Sauvegardez le fichier /etc/docker/daemon.json, puis exécutez la commande suivante pour mettre à jour le fichier /etc/docker/daemon.json.
sudo cat >/etc/docker/daemon.json <<-EOF { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } }, "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "10" }, "oom-score-adjust": -1000, "storage-driver": "overlay2", "storage-opts":["overlay2.override_kernel_check=true"], "live-restore": true } EOF -
Redémarrez Docker et kubelet pour appliquer les modifications.
sudo service kubelet stop # Redirecting to /bin/systemctl stop kubelet.service sudo service docker restart # Redirecting to /bin/systemctl restart docker.service sudo service kubelet start # Redirecting to /bin/systemctl start kubelet.service -
Vérifiez que le pilote Cgroup de Docker est défini sur
systemd.sudo docker info | grep -i cgroup Cgroup Driver: systemd
Migration des pods depuis un nœud défaillant
Pour migrer les pods d'application depuis un nœud défaillant, marquez le nœud comme non planifiable, puis évacuez-le. Ce processus évacue les pods en toute sécurité et les replanifie sur des nœuds sains.
Connectez-vous à la console ACK. Sur la page Nodes, localisez le nœud défaillant. Dans la colonne Actions, choisissez More > Drain.
Dépannez le nœud défaillant. Pour plus d'informations, consultez la rubrique Dépannage des problèmes de nœuds.
Politique d'évacuation des nœuds en cas de panne de zone de disponibilité
Lorsqu'un nœud devient indisponible, le contrôleur de nœuds initie une évacuation. Le taux d'évacuation par défaut est de 0,1 nœud par seconde, contrôlé par le paramètre --node-eviction-rate. Cela signifie que les pods sont évacués d'au plus un nœud toutes les 10 secondes.
Toutefois, pour un cluster ACK avec des nœuds répartis dans plusieurs zones de disponibilité, le contrôleur de nœuds ajuste cette politique en fonction de l'état de santé de chaque zone de disponibilité et de la taille du cluster.
Une zone de disponibilité peut se trouver dans l'un des trois états de santé suivants.
FullDisruption : La zone de disponibilité ne compte aucun nœud sain et au moins un nœud indisponible.
PartialDisruption : La zone de disponibilité contient au moins deux nœuds indisponibles, et le ratio de nœuds indisponibles par rapport au total des nœuds (calculé comme
(unhealthy nodes / (unhealthy nodes + healthy nodes))) dépasse 0,55.Normal : La zone de disponibilité ne répond pas aux critères FullDisruption ou PartialDisruption.
Les clusters sont également classés par taille :
Grand cluster : Un cluster comptant plus de 50 nœuds.
Petit cluster : Un cluster comptant 50 nœuds ou moins.
Le contrôleur de nœuds détermine le taux d'évacuation en fonction de ces états :
Si toutes les zones de disponibilité sont dans un état FullDisruption, l'évacuation est désactivée pour l'ensemble du cluster.
-
Si au moins une zone de disponibilité n'est pas dans un état FullDisruption, le taux d'évacuation est déterminé comme suit :
Pour une zone de disponibilité dans un état FullDisruption, le taux d'évacuation est défini sur la valeur par défaut de 0,1 nœud par seconde, quelle que soit la taille du cluster.
Pour une zone de disponibilité dans un état PartialDisruption, le taux d'évacuation dépend de la taille du cluster. Dans un grand cluster, le taux est réduit à 0,01 nœud par seconde. Dans un petit cluster, le taux est défini sur 0, ce qui désactive l'évacuation.
Pour une zone de disponibilité dans un état Normal, le taux d'évacuation est défini sur la valeur par défaut de 0,1 nœud par seconde, quelle que soit la taille du cluster.
Pour plus d'informations, consultez la documentation Limites de débit pour l'évacuation.
Personnalisation du chemin d'accès de Kubelet
Non. Le chemin d'accès de kubelet dans un cluster ACK est /var/lib/kubelet et ne peut pas être modifié. Ne changez pas ce chemin.
Montage d'un disque de données dans un répertoire personnalisé
Cette fonctionnalité est actuellement en version canary. Pour l'activer, soumettez un ticket. Une fois activée, le système formate et monte automatiquement tout disque de données ajouté au pool de nœuds dans un répertoire spécifié. Le répertoire de montage est soumis aux restrictions suivantes.
-
Ne montez pas un disque de données dans les répertoires critiques suivants du système d'exploitation :
/
/etc
/var/run
/run
/boot
-
Ne montez pas un disque de données dans les répertoires suivants utilisés par le système et les environnements d'exécution de conteneurs, ni dans leurs sous-répertoires :
/usr
/bin
/sbin
/lib
/lib64
/ostree
/sysroot
/proc
/sys
/dev
/var/lib/kubelet
/var/lib/docker
/var/lib/containerd
/var/lib/container
Chaque disque de données doit avoir un répertoire de montage unique.
Le répertoire de montage doit être un chemin absolu commençant par
/.Le répertoire de montage ne doit pas contenir de caractères de retour chariot ou de saut de ligne (
\ret\n) ni se terminer par une barre oblique inverse (\).
Modification des limites de descripteurs de fichiers
Le nombre maximal de descripteurs de fichiers limite le nombre de fichiers pouvant être ouverts simultanément. Les systèmes Alibaba Cloud Linux et CentOS disposent de deux niveaux de limites de descripteurs de fichiers :
Niveau système : Nombre maximal de fichiers que tous les processus du système peuvent ouvrir simultanément.
Niveau utilisateur : Nombre maximal de fichiers que les processus d'un seul utilisateur peuvent ouvrir.
Les environnements de conteneurs ont une limite supplémentaire de descripteurs de fichiers : le nombre maximal de descripteurs de fichiers par processus au sein d'un conteneur.
Une mise à niveau du pool de nœuds peut écraser les modifications effectuées manuellement depuis la ligne de commande. Pour garantir la persistance de vos paramètres, modifiez le pool de nœuds.
Modification de la limite de descripteurs de fichiers au niveau du système
Pour obtenir des instructions, consultez la rubrique Personnalisation des paramètres du système d'exploitation pour un pool de nœuds.
Modification de la limite de descripteurs de fichiers par processus
-
Connectez-vous au nœud et vérifiez le fichier
/etc/security/limits.conf.cat /etc/security/limits.confUtilisez les paramètres suivants pour configurer le nombre maximal de descripteurs de fichiers pour un seul processus sur le nœud :
... root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 -
Exécutez la commande
sedpour modifier le nombre maximal de descripteurs de fichiers. La valeur recommandée est 65535.sed -i "s/nofile.[0-9]*$/nofile 65535/g" /etc/security/limits.conf -
Reconnectez-vous au nœud et exécutez la commande suivante pour vérifier votre modification.
Si la sortie correspond à la valeur configurée, la modification a réussi.
# ulimit -n 65535
Modification de la limite de descripteurs de fichiers des conteneurs
La modification de la limite de descripteurs de fichiers pour un conteneur nécessite le redémarrage du service Docker ou containerd, ce qui interrompt les conteneurs en cours d'exécution. Pour éviter les interruptions de service, effectuez cette opération pendant les heures creuses.
-
Connectez-vous au nœud et exécutez la commande suivante pour afficher le fichier de configuration.
Nœud containerd :
cat /etc/systemd/system/containerd.serviceNœud Docker :
cat /etc/systemd/system/docker.service
Les paramètres suivants définissent la limite de descripteurs de fichiers pour un seul processus à l'intérieur d'un conteneur :
... LimitNOFILE=1048576 LimitNPROC=1048576 ... -
Exécutez les commandes suivantes pour modifier les valeurs des paramètres. La valeur recommandée pour la limite de descripteurs de fichiers est
1048576.-
Nœud containerd :
sed -i "s/LimitNOFILE=[0-9a-zA-Z]*$/LimitNOFILE=1048576/g" /etc/systemd/system/containerd.service;sed -i "s/LimitNPROC=[0-9a-zA-Z]*$/LimitNPROC=1048576/g" /etc/systemd/system/containerd.service && systemctl daemon-reload && systemctl restart containerd -
Nœud Docker :
sed -i "s/LimitNOFILE=[0-9a-zA-Z]*$/LimitNOFILE=1048576/g" /etc/systemd/system/docker.service && sed -i "s/LimitNPROC=[0-9a-zA-Z]*$/LimitNPROC=1048576/g" /etc/systemd/system/docker.service && systemctl daemon-reload && systemctl restart docker
-
-
Exécutez la commande suivante pour vérifier la limite de descripteurs de fichiers pour un seul processus à l'intérieur du conteneur.
Si la sortie correspond à la valeur configurée, la modification a réussi.
-
Nœud containerd :
# cat /proc/`pidof containerd`/limits | grep files Max open files 1048576 1048576 files -
Nœud Docker :
# cat /proc/`pidof dockerd`/limits | grep files Max open files 1048576 1048576 files
-
Mise à niveau de l'environnement d'exécution des conteneurs pour les nœuds de travail non gérés
Les clusters hérités créés avant l'introduction des pools de nœuds peuvent contenir des nœuds de travail non gérés. Pour mettre à niveau l'environnement d'exécution des conteneurs pour ces nœuds, vous devez les migrer vers un pool de nœuds.
Suivez ces étapes :
Créer un pool de nœuds : Si aucun pool de nœuds approprié n'existe dans le cluster, créez-en un avec une configuration correspondant aux nœuds non gérés.
Supprimer le nœud : Lorsque vous supprimez un nœud, le système le place en quarantaine (le marque comme non planifiable), puis évacue ses pods. Si l'évacuation échoue, le processus de suppression s'arrête. Le nœud n'est supprimé du cluster que si l'évacuation réussit.
-
Ajouter un nœud existant : Ajoutez le nœud à un pool de nœuds existant. Vous pouvez également créer un pool de nœuds avec zéro nœud, puis y ajouter le nœud. Après l'ajout du nœud, son environnement d'exécution des conteneurs se met automatiquement à jour pour correspondre à celui spécifié dans la configuration du pool de nœuds.
RemarqueBien que la fonctionnalité de pool de nœuds elle-même soit gratuite, vous êtes facturé pour les ressources cloud sous-jacentes, telles que les instances ECS, utilisées par le pool de nœuds. Pour plus d'informations, consultez la rubrique Frais liés aux ressources cloud.
Pool de nœuds affiché comme « Other Nodes »
ACK fournit des méthodes standard pour ajouter des ressources de calcul à un cluster via la console, OpenAPI ou CLI. Pour plus d'informations, consultez la rubrique Ajouter un nœud existant. Si vous ajoutez des nœuds en utilisant des méthodes en dehors des flux de travail standard d'ACK, ACK ne peut pas identifier leur source et les assigne au groupe Other Nodes sur la page Nodes. ACK ne peut pas gérer ces nœuds via un pool de nœuds, donc des fonctionnalités telles que la gestion du cycle de vie, les opérations et la maintenance automatisées et le support technique garanti ne sont pas disponibles.
Si vous continuez à utiliser ces nœuds, vous devez assurer leur compatibilité avec les modules complémentaires du cluster et assumer tous les risques potentiels. Ces risques incluent, mais ne se limitent pas aux éléments suivants :
Compatibilité des versions : Lors des mises à niveau du plan de contrôle ou des composants système, le système d'exploitation et les composants de ces nœuds non gérés peuvent devenir incompatibles avec les nouvelles versions, ce qui peut entraîner des interruptions de service.
Compatibilité de la planification des charges de travail : Le cluster peut ne pas signaler avec précision l'état de ces nœuds, tel que leur zone de disponibilité et leur capacité de ressources restante. Cela peut entraîner des décisions de planification de charge de travail incorrectes, causant des problèmes de disponibilité ou une dégradation des performances.
Compatibilité du plan de données : La compatibilité des composants côté nœud et du système d'exploitation avec le plan de contrôle et les composants système du cluster n'est pas validée, ce qui pose des risques potentiels de stabilité.
Compatibilité des opérations et de la maintenance : Les opérations de maintenance sur ces nœuds via la console ou OpenAPI peuvent échouer ou produire des résultats inattendus car le canal de gestion et l'environnement d'exécution pour ces nœuds ne sont pas vérifiés.
Configuration des listes de contrôle d'accès réseau pour les vSwitch de nœuds
Si le vSwitch d'un pool de nœuds dispose d'une liste de contrôle d'accès réseau qui refuse le trafic provenant de blocs CIDR requis, les nouveaux nœuds ne pourront pas rejoindre le cluster et resteront dans un état Failed ou Offline.
Suivez ces étapes pour autoriser les blocs CIDR requis et rajouter les nœuds :
-
Configurer les règles de liste de contrôle d'accès réseau. Dans les règles inbound et outbound, autorisez le trafic provenant des blocs CIDR suivants :
100.104.0.0/16: Bloc CIDR de gestion pour le plan de contrôle ACK.100.64.0.0/10: Bloc CIDR des services internes Alibaba Cloud.100.100.100.200/32: Endpoint du service de métadonnées des instances ECS.Les blocs CIDR principaux et secondaires du VPC du cluster, ou le bloc CIDR du vSwitch contenant les nœuds.
Supprimer les nœuds défaillants. Supprimez tous les nœuds qui étaient dans un état Failed ou Offline avant que les nouvelles règles de liste de contrôle d'accès réseau ne prennent effet.
Créer et gérer des pools de nœuds ou étendre un pool de nœuds existant pour ajouter de nouveaux nœuds. Un statut Ready sur les nouveaux nœuds confirme que les règles de liste de contrôle d'accès réseau sont correctement configurées.