Deployment

C’est un type de ressource Kubernetes. Il permet de contrôler un ou plusieurs ReplicaSet. Il permet de garder une version de chaque déploiement/changement. Lorsqu’une nouvelle version est créer, le Déploiement crée un nouveau ReplicaSet jusqu’à ce que tout les nouveau Pods soit créer. Une fois créer, il supprime l’ancien ReplicaSet.

Création

On crée la ressource avec Kubectl, par exemple: kubectl create deployment <deployment_name> --image=<image>.

Scaling & Rolling Update

Il est possible de scale un déploiement afin d’augmenter sa quantité de réplique. On n’a qu’à exécuter kubectl scale deploy/deployment-name --replicas=<new number of replicas>. Après on peut voir le déploiement possède plus/moins de réplique. Pour faire une rolling update, on peut faire kubectl edit deployment <deployment name>. Le déploiement sera mis à jour, il est possible de voir les nouveaux pods qui se sont fais créer.

Rollback

Question

Kubectl rollout a plusieurs commandes pour intéragir avec des déploiement.

Pour retourner à une version antérieur d’un déploiement, il faut faire un rollback. On fais alors: kubectl rollout undo deployment/deployment-name. Il est possible également de pause/resume un déploiement en faisant kubetl rollout <pause|resume> deployment/deployment-name.

On peut aller chercher l’historique des révisions du déploiement en faisant kubectl rollout history deploy <res-name>.

Configuration

Voici quelque champs de sa configuration qui peuvent être pertinent de comprendre. Une liste complète pourrait être ajouter, mais la documentation existe pour cette raison.

Metadata

C’est des champs qui seront trouver dans Metadata

Annotations

C’est du metadata qui peut être utiliser pour des tâches administrative ou pour des applications. Ce n’est pas utilisé pour sélectionner le Pod.

Generations

C’est le nombre de fois que la resource à été modifié. Par exemple, changer le nombre de replicas incrémente la génération du déploiement.

Labels

C’est utilisé pour sélectionner un ou des objets, par exemple dans Kubectl. C’est immutable.

Name

C’est obligatoire. Ce champs doit être unique dans le namespace.

ResourceVersion

C’est une valeur qui permet de référer l’objet dans la base de donnée Etcd.

UID

C’est un ID unique qui existe le temps de l’existence de l’objet.

Spec

C’est la configuration qui permet de définir comment l’objet doit ressembler.

ProgressDeadlineSeconds

Temps avant qu’une erreur de progression soit lancé durant un changement.

Replicas

C’est le nombre de réplique utilisé par le ReplicaSet.

RevisionHistoryLimit

Le nombre d’ancien ReplicaSet à garder pour faire un rollback.

Selector

C’est une collection de valeur qui servent à sélectionner des Pods. Toutes les valeurs dans le sélecteur doivent être vrai pour qu’un Pod se fasse sélectionner. Il ne faut pas créer des resources qui match le même sélecteur, parce que le Kube-Controller-Manager essaiera de les controller.

MatchLabels

C’est les requirements de base pour la resource. C’est souvent utilisé avec matchExpressions.

Strategy

C’est header pour tous les paramètres qui contrôle l’update de Pods.

MaxSurge

Le nombre maximum de Pods qui peuvent être créer en plus des Pods actuelle. Ça peut être un pourcentage ou un nombre absolue.

MaxUnavailable

Le nombre/pourcentage de Pods qui peuvent être dans un status autre que Ready.

Type

C’est le type d’update appliqué. Par exemple RollingUpdate ou Recreate. Chacun fonctionne différemment et permette d’avoir des update “Zero Downtime”.s

Template

C’est le template qui vas être utilisé pour configurer le ReplicaSet.

Containers

C’est la liste des containers qui seront gérer par le Pod

Image

C’est l’image du container, par exemple nginx:latest.

ImagePullPolicy

Politique de téléchargement des images. Peut être télécharger ou utilisé de la cache locale. Exemple: IfNotPresent.

Name

C’est le nom du container.

Resources

C’est ici que des restrictions de resources devrait être configurer.

TerminationMessagePath

C’est l’endroit où envoyé les informations lorsque le container à arrêter (soit en succès ou erreur).

TerminationMessagePolicy

C’est la façon que le status de terminaison enverra les informations. Par défaut c’est File, mais peut être mis à FallbackToLogsOnError (met le status dans les logs du container si le fichier de terminaison est vide).

DnsPolicy

Détermine si les requêtes DNS devrait passer par CoreDNS ou utilisé la résolution DNS du node sur lequel le container s’éxecute (par défaut).

RestartPolicy

Permet de redémarrer le container s’il y a une erreur.

ScheduleName

Permet d’utilisé un Scheduler différent de Kube-Scheduler.

SecurityContext

Permet d’envoyé des paramètres de sécurité, par exemple un context SELinux, des valeurs d’AppArmor, des utilisateurs, au container.

TerminationGracePeriodSeconds

Le nombre de seconde à attendre qu’un signal SIGTERM soit lancé lorsqu’on envoie un SIGKILL.

Status

C’est le status de la resource.

AvailableReplicas

C’est le nombre de réplique actuellement configurées. Le nombre de réplique disponible est dans readyReplicas.

ObservedGeneration

Permet de voir l’index de modification. À chaque modification, cet index augmente.

References

  1. labels