Outils pour utilisateurs

Outils du site


informatique:kebernetes:kube_pod_deployment

Ceci est une ancienne révision du document !


Kubernetes - Workloads/Controllers

La méthode la plus pratique pour déployer des objets dans Kubernetes comme des pods par exemples est d'utiliser un fichier de manifeste YAML. C'est dans ce fichier que l'on indique toutes les instructions à traiter par Kubernetes.

Une fois le fichier manifeste créé, il suffit à chaque fois de lancer la commande :

kubectl apply -f <mon_fichier.yml>

Les pods

Nous allons ici juste déployer de simples pods. Pour rappel des pods sont des lots de conteneurs.

Déploiement d'un premier pod avec un conteneur

Créer un fichier manifeste yaml :

vim create-pod.yml

Insérer le contenu suivant :

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

Explication :

  • apiVersion: indique la verions de l'API Kubernetes. Requis dans chaque fichier YAML.
  • kind: indique le type d'objet à déployer. Ici nous déployons des objets de type pod.
  • metadata: Informations complémentaire concernant notre déploiement.
  • spec: Permet de spécifier les caractéristiques de notre déploiement et notamment les conteneurs à déployer.
    • containers: On défini le nom, l'image et les ports pour notre conteneur.
      • name: Nom du conteneur
      • image: Image à utiliser pour créer le conteneur
      • ports: Ports d'écoute à prévoir pour le conteneur.

Nous allons déployer le pod :

kubectl apply -f create-pod.yml

Résultat attendu:

pod/nginx created

Nous allons lister les pods ainsi :

kubectl get pods

Résultat attendu :

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          6m4s

Pour obtenir des informations sur notre pod lancé :

kubectl describe pods nginx

Pour supprimer le pod :

kubectl delete pods nginx

Déploiement d'un pod avec 2 conteneurs

Ci-dessous l'exemple de fichier yaml pour déployer un pod avec 2 Debian (un avec le port 80 exposé et l'autre avec le port 3306) :

apiVersion: v1
kind: Pod
metadata:
  name: mydebs
spec:
  containers:
  - name: mydeb-web
    image: debian:latest
    command: ["sleep"]
    args: ["infinity"]
    ports:
    - containerPort: 80
  - name: mydeb-bdd
    image: debian:latest
    command: ["sleep"]
    args: ["infinity"]
    ports:
    - containerPort: 3306

Explications complémentaires :

  • command: C'est la commande a exécuter au lancement du conteneur
  • args: Ce sont les arguments de la commande.

Dans le cas présent, les conteneurs seront exécuté avec la commande sleep infinity. C'est pour maintenir le conteneur en fonctionnement.

Le ReplicaSet

Définition : Un ReplicaSet aide à gérer le trafic en faisant évoluer votre application pour avoir plusieurs instances du même pod. Cela permet de réduire le trafic vers une instance particulière et contribue également à équilibrer la charge du trafic entre chacune de ces instances.

Ci-dessous un exemple de manifeste Yaml pour lancer un ReplicaSet composé de 2 Debian avec 2 réplicas :

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: mydeploy01
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-bdd-app
  template:
    metadata:
      labels:
        app: web-bdd-app
    spec:
      containers:
      - name: mydeb-web
        image: debian:latest
        command: ["sleep"]
        args: ["infinity"]
        ports:
        - containerPort: 80
      - name: mydeb-bdd
        image: debian:latest
        command: ["sleep"]
        args: ["infinity"]
        ports:
        - containerPort: 3306

Quelques explications :

  • apiVersion: Attention il faut utiliser une autre version API différente de celle utilisé pour le déploiement de pods.
  • metadata.name: Requis pour donner un nom au déploiement.
  • spec.replicas: Indiquer le nombre de réplicas à lancer.
  • selector.matchLabels.app: Obligatoire pour sélectionner le template de pod.
  • template.metadata.labels.app: Défini le nom du template. Il doit correspondre à selector.matchLabels.app
  • spec.template.spec: On défini les spécificités de nos pods. Notamment en indiquant les conteneurs à créer dans chacun des réplicas de pods.

Au final, nous aurons déployé 2 pods identique contenant chacun 2 conteneurs.

Pour supprimer un ReplicaSet et donc arrêter les Pods et ses conteneurs :

kubectl delete replicaset mydeploy01

Le Deployment

Definition : Il offre la même possibilité de mise à l'échelle qu'un ReplicaSet, mais en complément il permet les possibilités suivantes :

  • Mises à jour progressives : les mises à jour progressives garantissent qu'une application est mise à jour progressivement, une réplique à la fois, tout en garantissant que la disponibilité globale de l'application n'est pas affectée. En comparaison, les ReplicaSets prennent uniquement en charge la mise à l'échelle et la gestion des réplicas.
  • Restauration : les déploiements reviennent automatiquement à une version précédente d'une application en cas d'échec d'une mise à jour. Pour les ReplicaSets, ce processus doit être effectué manuellement.
  • Contrôle de version : Semblable à la fonctionnalité précédente, les déploiements implémentent le contrôle de version, permettant ainsi la possibilité de revenir à une version spécifique précédente.

Du fait que le Deployment proposent plus le possibilité en terme de gestion, il est plus utilisé. Le ReplicaSet n'est à utiliser que si l'on souhaite un contrôle manuelle de la mise à jour de l'application. ReplicaSet sera utilisé préproduction, alors que Deployment sera utilisé pour la production.

Ci-dessous un exemple de manifeste Yaml pour lancer un Deployment composé de 2 Debian avec 2 réplicas :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mydeploy01
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-bdd-app
  template:
    metadata:
      labels:
        app: web-bdd-app
    spec:
      containers:
      - name: mydeb-web
        image: debian:latest
        command: ["sleep"]
        args: ["infinity"]
        ports:
        - containerPort: 80
      - name: mydeb-bdd
        image: debian:latest
        command: ["sleep"]
        args: ["infinity"]
        ports:
        - containerPort: 3306

On retrouve dans ce fichier YAML exactement les mêmes définitions que pour un ReplicaSet.

Pour supprimer un déploiement et donc arrêter les Pods et ses conteneurs :

kubectl delete deployment mydeploy01

Le StatefulSet

informatique/kebernetes/kube_pod_deployment.1702295257.txt.gz · Dernière modification: 2023/12/11 12:47 par benoit