Appliquer des mises à jour de sécurité et du noyau à des nœuds Linux dans Azure Kubernetes Service (AKS)
Pour protéger vos clusters, les mises à jour de sécurité sont appliquées automatiquement aux nœuds Linux dans AKS. Ces mises à jour incluent des correctifs de sécurité ou des mises à jour du noyau. Certaines de ces mises à jour nécessitent un redémarrage du nœud pour terminer le processus. AKS ne redémarre pas automatiquement ces nœuds Linux pour terminer le processus de mise à jour.
Le processus de maintien à jour des nœuds Windows Server est légèrement différent. Les nœuds Windows Server ne reçoivent pas les mises à jour quotidiennes. À la place, vous effectuez une mise à niveau AKS qui déploie les nouveaux nœuds avec les derniers correctifs et la dernière image Windows Server de base. Pour connaître les clusters AKS qui utilisent des nœuds Windows Server, consultez Mettre à niveau un pool de nœuds dans AKS.
Cet article vous montre comment utiliser le démon open source kured (KUbernetes REboot Daemon) pour rechercher les nœuds Linux nécessitant un redémarrage, puis pour gérer automatiquement la replanification des pods en cours d’exécution et du processus de redémarrage des nœuds.
Notes
Kured
est un projet open source dans la Cloud Native Computing Foundation. Veuillez diriger les problèmes vers le GitHub kured. Un support supplémentaire est disponible dans le canal #kured sur CNCF Slack.
Important
Les logiciels open source sont mentionnés dans la documentation et les exemples AKS. Les logiciels que vous déployez sont exclus des contrats de niveau de service AKS, de la garantie limitée et du support Azure. Quand vous utilisez une technologie open source avec AKS, consultez les options de support disponibles auprès des communautés et responsables de projet respectifs pour élaborer un plan.
Par exemple, le dépôt GitHub Ray décrit plusieurs plateformes qui varient en fonction du temps de réponse, de la finalité et du niveau de support.
Microsoft assume la responsabilité de la génération des packages open source que nous déployons sur AKS. Cette responsabilité comprend la maîtrise complète des processus de génération, d’analyse, de signature et de validation ainsi que l’application de correctifs logiciels et le contrôle des fichiers binaires présents dans les images conteneur. Pour plus d’informations, consultez Gestion des vulnérabilités pour AKS et Couverture du support AKS.
Avant de commencer
La version 2.0.59 ou ultérieure d’Azure CLI doit être installée et configurée. Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Comprendre l’expérience de mise à jour des nœuds AKS
Dans un cluster AKS, vos nœuds Kubernetes s’exécutent en tant que machines virtuelles Azure. Ces machines virtuelles Linux utilisent une image Ubuntu ou Azure Linux, avec le système d’exploitation configuré pour rechercher automatiquement les mises à jour tous les jours. Si des mises à jour de sécurité ou du noyau sont disponibles, elles sont automatiquement téléchargées et installées.
Certaines mises à jour de sécurité, comme des mises à jour du noyau, nécessitent un redémarrage du nœud pour finaliser le processus. Un nœud Linux qui nécessite un redémarrage crée un fichier nommé /var/run/reboot-required. Ce processus de redémarrage ne se produit pas automatiquement.
Vous pouvez utiliser vos propres workflows et vos propres processus pour gère les redémarrages des nœuds, ou bien utiliser kured
pour orchestrer le processus. Avec kured
, un DaemonSet est déployé et exécute un pod sur chaque nœud Linux du cluster. Ces pods du DaemonSet recherchent l’existence du fichier /var/run/reboot-required, puis lancent un processus pour redémarrer les nœuds.
Mises à niveau d’images de nœud
Les mises à niveau sans assistance appliquent les mises à jour au système d’exploitation des nœuds Linux, mais l’image utilisée pour créer les nœuds de votre cluster reste inchangée. Si un nouveau nœud Linux est ajouté à votre cluster, l’image d’origine est utilisée pour créer ce nœud. Ce nouveau nœud reçoit toutes les mises à jour de sécurité et de noyau disponibles au cours de la vérification automatique chaque jour, mais reste non corrigé jusqu’à la fin de toutes les vérifications et de tous les redémarrages.
Sinon, vous pouvez utiliser la mise à niveau des images de nœud pour rechercher et mettre à jour les images de nœud utilisées par votre cluster. Pour plus d’informations sur la mise à niveau des images de nœud, consultez Mise à niveau des images de nœud Azure Kubernetes Service (AKS).
Mises à niveau de nœuds
Un autre processus dans AKS vous permet de mettre à niveau un cluster. Une mise à niveau consiste généralement à passer à une version plus récente de Kubernetes, et pas seulement à appliquer des mises à jour de sécurité du nœud. Une mise à niveau AKS effectue les actions suivantes :
- Un nouveau nœud est déployé avec les dernières mises à jour de sécurité et la version de Kubernetes la plus récente lui est appliquée.
- L’accès à l’ancien nœud est fermé et il est vidé.
- Des pods sont planifiés sur le nouveau nœud.
- L’ancien nœud est supprimé.
Vous ne pouvez pas rester sur la même version de Kubernetes lors d’un événement de mise à niveau. Vous devez spécifier une version plus récente de Kubernetes. Pour mettre à niveau vers la dernière version de Kubernetes, vous pouvez mettre à niveau votre cluster AKS.
Déployer kured dans un cluster AKS
Pour déployer le DaemonSet kured
, installez le chart Helm Kured officiel suivant. Cela crée un rôle et un rôle de cluster, des liaisons et un compte de service, puis déploie le DaemonSet à l’aide de kured
.
# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/
# Update your local Helm chart repository cache
helm repo update
# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured
# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux
Vous pouvez également configurer des paramètres supplémentaires pour kured
, comme l’intégration à Prometheus ou Slack. Pour plus d’informations sur les paramètres de configuration, consultez le chart Helm kured.
Mettre à jour des nœuds de cluster
Par défaut, les nœuds Linux dans AKS recherchent les mises à jour tous les soirs. Si vous ne voulez pas attendre, vous pouvez effectuer manuellement une mise à jour pour vérifier que kured
s’exécute correctement. Suivez d’abord les étapes pour vous connecter avec SSH à un de vos nœuds AKS. Une fois que vous avez établi une connexion SSH avec le nœud Linux, recherchez les mises à jour et appliquez-les comme suit :
sudo apt-get update && sudo apt-get upgrade -y
Si les mises à jour appliquées nécessitent un redémarrage du nœud, un fichier est écrit dans /var/run/reboot-required. Par défaut, Kured
recherche les nœuds qui nécessitent un redémarrage toutes les 60 minutes.
Surveiller et passer en revue le processus de redémarrage
Quand un des réplicas du DaemonSet détecte que le redémarrage d’un nœud était nécessaire, un verrou est placé sur le nœud via l’API Kubernetes. Ce verrou empêche la planification de pods supplémentaires sur le nœud. Le verrou indique également qu’un seul nœud doit être redémarré à la fois. Le nœud étant fermé, les pods en cours d’exécution sont vidés et le nœud est redémarré.
Vous pouvez surveiller l’état des nœuds avec la commande kubectl get nodes. L’exemple de sortie suivant montre un nœud avec l’état SchedulingDisabled au moment où le nœud se prépare pour le processus de redémarrage :
NAME STATUS ROLES AGE VERSION
aks-nodepool1-28993262-0 Ready,SchedulingDisabled agent 1h v1.11.7
Une fois que le processus de mise à jour est terminé, vous pouvez voir l’état des nœuds en utilisant la commande kubectl get nodes avec le paramètre --output wide
. Cette sortie vous permet de voir une différence dans KERNEL-VERSION des nœuds sous-jacents, comme le montre la sortie de l’exemple suivant. Le nœud aks-nodepool1-28993262-0 a été mis à jour dans une étape précédente et il indique la version du noyau 4.15.0-1039-azure. Le nœud aks-nodepool1-28993262-1, qui n’a pas été mis à jour, indique la version du noyau 4.15.0-1037-azure.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
aks-nodepool1-28993262-0 Ready agent 1h v1.11.7 10.240.0.4 <none> Ubuntu 16.04.6 LTS 4.15.0-1039-azure docker://3.0.4
aks-nodepool1-28993262-1 Ready agent 1h v1.11.7 10.240.0.5 <none> Ubuntu 16.04.6 LTS 4.15.0-1037-azure docker://3.0.4
Étapes suivantes
Cet article vous a expliqué comment utiliser kured
pour redémarrer automatiquement des nœuds Linux dans le cadre du processus des mises à jour de sécurité. Pour mettre à niveau vers la dernière version de Kubernetes, vous pouvez mettre à niveau votre cluster AKS.
Pour connaître les clusters AKS qui utilisent des nœuds Windows Server, consultez Mettre à niveau un pool de nœuds dans AKS.
Pour obtenir une discussion détaillée sur les meilleures pratiques de mise à niveau et d’autres considérations, consultez Instructions de mise à jour corrective et de mise à niveau AKS.
Azure Kubernetes Service