Comment Kubernetes s’occupe de vos charges de travail
Les charges de travail sont exécutées dans Kubernetes par des Pods. Ces Pods sont constitués d’un ou plusieurs conteneurs, partageant le même réseau et le même stockaege.
Ces Pods étant faillibles, ayant accès à des ressources limitées et devant être mis à jour, Kubernetes fournit des outils pour :
- remplacer les Pods défaillants,
- exécuter plusieurs Pods similaires pour qu’ils prennent en charge ensemble une même charge de travail,
- rendre transparente la transition d’une version à une autre d’un Pod.
Mise à l’échelle des charges de travail
Un Pod est déployé sur un noeud particulier d’un cluster Kubernetes et ce Pod peut accéder à une certaine quantité de ressources (mémoire, CPU) de ce noeud. Si la tâche à exécuter nécessite plus de ressources, Kubernetes fournit un outil pour déployer plusieurs Pods, sur plusieurs noeuds, afin de démultiplier les ressources utilisables pour cette même tâche. Ce processus est appelé Mise à l’échelle.
Le concept de ReplicaSet
fourni par Kubernetes permet de gérer cette mise à l’echelle. Pour déployer plusieurs Pods identiques, vous créez une ressource ReplicaSet
en spécifiant les caractéristiques du Pod à déployer et le nombre voulu de réplicas de ce Pod.
Un contrôleur (un programme faisant partie du control plane et s’occupant d’un unique type de ressource, ici les ReplicaSets
) s’assure en permanence que, pour chaque ReplicaSet
créé, le nombre de Pods demandés sont déployés. Dans le cas contraire, il créera les Pods manquants ou arrêtera les Pods supplémentaires.
Il vous est possible à tout moment de changer le nombre de replicas du ReplicaSet
: le contrôleur de ReplicaSets
prendra en charge le changement dès que possible.
Mises à jour des charges de travail
Pour déployer un Pod dans Kubernetes, il est nécessaire de définir un certain nombre d’informations : les conteneurs qui seront exécutés dans ce Pod, les volumes de stockage montés dans ces conteneurs, etc.
Une fois le Pod créé, si vous modifiez les attributs de ce Pod (par exemple la version de l’image utilisée pour créer un conteneur), aucun changement ne sera fait sur le Pod réellement déployé.
Le concept de Deployment
fourni par Kubernetes permet de mettre à jour les Pods déployés. Pour déployer une version donnée d’un Pod, vous créez une ressource Deployment
en spécifiant les caractéristiques du Pod à déployer, le nombre de replicas, et la stratégie à appliquer lors de la mise à jour.
Le contrôleur de Deployment
prendra en charge la création d’un ReplicaSet
avec la spécification du Pod et le nombre de replicas indiqués dans le Deployment
.
Plus tard, lorsque vous désirez changer les spécifications d’un Pod (par exemple la version de l’image utilisée pour créer un conteneur), vous pouvez modifier les caractéristiques du Pod à déployer dans le Deployment
. Le contrôleur de Deployment
prendra en charge la création d’un nouveau ReplicaSet
avec ces nouvelles spécifications du Pod. Selon la stratégie de mise à jour spécifiée dans le Deployment
, le nombre de replicas de l’ancien et du nouveau ReplicaSets
seront modifiés pour qu’au final l’ancien ReplicaSet
ait un nombre de replicas à zéro et le nouveau ReplicaSet
ait le nombre demandé de replicas.
Auto-réparation des charges de travail
Plusieurs mécanismes permettent aux charges de travail de s’auto-réparer.
-
L’agent
kubelet
d’un noeud s’occupe de déployer les conteneurs spécifiés dans les Pods affectés à ce noeud. Lorsqu’un de ces conteneurs s’arrête, il est automatiquement relancé par l’agentkubelet
, à moins que la politique de redémarrage indiquée pour le Pod demande àkubelet
de déclarer le Pod en échec (uniquement possible pour un Pod seul, non crée par unReplicaSet
ou unDeployment
). -
Lorsqu’un Pod créé par un
ReplicaSet
ou unDeployment
n’est plus en capacité de s’exécuter, par exemple lorsque le noeud sur lequel il est déployé est arrêté pour maintenance, leReplicaSet
détecte la disparition de ce Pod et en relance un nouveau sur un autre noeud, afin de satisfaire le nombre demandé de replicas.