Recherche de site Web

Créer et gérer des pods Kubernetes sous Linux


Créer, afficher et supprimer des pods dans Kubernetes

Dans ce didacticiel, nous allons apprendre à créer et gérer des pods Kubernetes. Tout d'abord, nous commencerons par qu'est-ce qu'un Pod dans Kubernetes et comment fonctionne un Pod. Ensuite, nous examinerons brièvement les types de pods Kubernetes. Et puis nous verrons comment créer un nouveau Pod et comment afficher les informations du Pod depuis la ligne de commande. Enfin, nous apprendrons comment supprimer le Pod lorsqu'il n'est plus nécessaire.

Qu’est-ce qu’un pod dans Kubernetes ?

Dans Kubernetes, les pods sont les plus petites unités informatiques déployables que vous pouvez créer et contrôler. Un Pod est un ensemble d'un ou plusieurs conteneurs avec des ressources de stockage et de réseau partagées, ainsi qu'un ensemble de règles sur la manière dont les conteneurs doivent être exécutés.

Le contenu d'un Pod est toujours colocalisé, co-planifié et exécuté dans le même environnement. Un Pod représente un « hôte logique » spécifique à une application : il comprend un ou plusieurs conteneurs d'applications étroitement connectés.

Dans la perspective Docker, un Pod équivaut à un ensemble de conteneurs Docker avec des espaces de noms et des volumes de système de fichiers communs.

Types de pods Kubernetes

Dans un cluster Kubernetes, il existe deux types de Pods.

  • POD à conteneur unique : le cas d'utilisation de Kubernetes le plus fréquent est l'approche « un conteneur par pod » ; dans ce scénario, considérez un Pod comme un wrapper sur un seul conteneur ; Kubernetes gère directement les pods plutôt que les conteneurs.
  • POD à conteneurs multiples : un pod peut encapsuler une application composée de nombreux conteneurs étroitement connectés qui doivent partager des ressources. Ces conteneurs sont regroupés pour former une seule unité de service et ces conteneurs communiqueront entre eux.

Comment fonctionne le POD ?

Chaque Pod est conçu pour exécuter une seule instance d'application. Vous pouvez utiliser plusieurs pods, un pour chaque instance, si vous avez besoin d'étendre votre application horizontalement. Ceci est communément appelé réplication dans Kubernetes. Une ressource de charge de travail et son contrôleur produisent et gèrent normalement des pods répliqués dans un groupe.

Le but ultime de Kubernetes est de déployer l'application sous forme de conteneurs dans un ensemble de machines appelé nœud de travail dans le cluster Kubernetes.

Kubernetes ne lance pas les conteneurs directement dans le nœud, mais le ou les conteneurs sont encapsulés sous forme de pod qui est une instance unique d'une application.

Cluster Kubernetes

Dans un cluster Kubernetes, un nœud est constitué de pods et un pod est constitué de conteneurs. Par exemple, vous disposez d’une seule instance d’une application exécutée dans un seul conteneur encapsulé par un pod.

Si le nombre d’utilisateurs accédant à l’application augmente, vous devez faire évoluer votre application. Dans ce cas, vous devrez peut-être créer des instances supplémentaires pour partager la charge.

Pour faire évoluer l'application, vous devez créer un nouveau pod supplémentaire dans le nœud avec la même application. Si la charge augmente encore et que le nœud actuel n'a pas de capacité, vous devez alors disposer d'un nœud supplémentaire pour faire tourner les pods avec le même conteneur d'application.

De même, pour une réduction, vous devez supprimer le pod existant.

J'espère que vous avez compris l'idée de base des pods Kubernetes. Voyons maintenant comment créer et gérer des pods dans Kubernetes.

Avant de commencer, assurez-vous d'avoir installé Kubernetes sur votre système. Les liens suivants contiennent des instructions sur la façon de configurer un déploiement de cluster Kubernetes à nœud unique et multi-nœuds sous Linux.

  • Comment installer Kubernetes à l'aide de Minikube dans CentOS Linux
  • Installer le cluster Kubernetes à l'aide de Kubeadm dans RHEL, CentOS, AlmaLinux, Rocky Linux

Une fois Kubernetes installé, vous pouvez commencer à créer des pods.

Habituellement, vous n'avez pas besoin de créer des pods directement, même des pods singleton. Créez-les plutôt à l'aide de ressources de charge de travail telles que Déploiement ou Tâche. Un déploiement fournit des mises à jour déclaratives pour les pods et les ReplicaSets.

Créer un déploiement

Créez un exemple de déploiement à l'aide d'une image "echoserver" existante. Il s'agit d'un simple serveur HTTP et nous pouvons l'exposer sur le port 8080 en utilisant l'option --port.

Une image de conteneur est un fichier qui enveloppe un programme et toutes ses dépendances logicielles dans des données binaires. Les images de conteneurs sont des progiciels exécutables indépendants qui font des hypothèses extrêmement spécifiques sur leur environnement d'exécution.

Dans cet article, nous passerons en revue toutes les démonstrations dans un cluster à nœud unique.

Vous pouvez connaître les détails du nœud en exécutant la commande ci-dessous en tant qu'utilisateur root

kubectl get nodes

Exemple de résultat :

NAME        STATUS   ROLES    AGE   VERSION
ostechnix   Ready    Master   25h   v1.22.3

Obtenir les détails du nœud

Maintenant, déployez un exemple d'application appelé "hello-ostechnix" à l'aide de la commande ci-dessous. Vous pouvez le nommer selon votre convenance.

kubectl create deployment hello-ostechnix --image=k8s.gcr.io/echoserver:1.10

Exemple de résultat :

deployment.apps/hello-ostechnix created
[root@ostechnix ~]#

Le déploiement est créé, vérifiez le déploiement à l'aide de la commande ci-dessous.

kubectl get deployments

Exemple de résultat :

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
hello-ostechnix   1/1     1            1           85s

Déploiement d'accès

Pour accéder à ce déploiement en tant que service, vous devez l'exposer en tant que service. Utilisez la commande ci-dessous pour exposer le déploiement sur le port 8080.

kubectl expose deployment hello-ostechnix --type=NodePort --port=8080

Exemple de résultat :

service/hello-ostechnix exposed

Utilisez la commande ci-dessous pour obtenir l'URL du service exposé.

minikube service hello-ostechnix --url

Exemple de résultat :

http://192.168.181.131:30525

URL du service

Copiez l'URL et collez-la dans votre navigateur, elle répertoriera les détails de l'application déployée.

Afficher les détails de l'application déployée dans le navigateur

Assurez-vous que le port 30525 est autorisé dans votre routeur ou pare-feu. Si ce port est bloqué, vous ne pourrez pas afficher les informations du Pod dans le navigateur.

Supprimer le déploiement

Tout d'abord, supprimez le service "hello-ostechnix" à l'aide de la commande :

kubectl delete services hello-ostechnix

Exemple de résultat :

service "hello-ostechnix" deleted

Ensuite, supprimez le déploiement "hello-ostechnix" :

kubectl delete deployment hello-ostechnix

Exemple de résultat :

deployment.apps "hello-ostechnix" deleted

Une fois le déploiement supprimé, le pod associé à l'application sera résilié. Il faudra quelques secondes pour terminer la résiliation.

kubectl get pods

Exemple de résultat :

NAME                               READY   STATUS        RESTARTS   AGE
hello-ostechnix-5d4cf4df75-jlwff   1/1     Terminating   0          57m

Une fois le déploiement terminé, l'application ne sera plus accessible.

kubectl get pods

Exemple de résultat :

No resources found in default namespace.

Exécuter des pods avec des images

Nous pouvons utiliser la commande 'kubectl run' pour créer et exécuter une application dans un Pod.

kubectl run <POD name> --image=<image name>

Ici, le nom du pod peut être n'importe quoi et le nom de l'image doit être spécifique, ce qui serait disponible dans Docker Hub ou dans n'importe quel référentiel local.

Créons un Pod avec une image Nginx.

kubectl run ostechnix-nginx --image=nginx

Exemple de résultat :

pod/ostechnix-nginx created

Un Pod nommé 'ostechnix-nginx' a été créé. Vous pouvez vérifier l'état du Pod à l'aide de la commande ci-dessous.

kubectl get pods

Exemple de résultat :

NAME              READY   STATUS    RESTARTS   AGE
ostechnix-nginx   1/1     Running   0          4m20s

Vous pouvez obtenir des informations supplémentaires telles que l'emplacement d'exécution du pod et l'adresse IP du pod en utilisant l'option « wide ».

kubectl get pods -o wide

Exemple de résultat :

NAME              READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
ostechnix-nginx   1/1     Running   0          38m   172.17.0.6   ostechnix   <none>           <none>

Vous pouvez obtenir des informations complètes sur le POD en utilisant la commande 'kubectlscribe'.

kubectl describe pod ostechnix-nginx

Cette commande vous fournira les détails complets du POD, comme les détails du conteneur et ses états, les détails des événements survenus depuis la création du Pod.

Name:         ostechnix-nginx
Namespace:    default
Priority:     0
Node:         ostechnix/192.168.181.131
Start Time:   Thu, 03 Feb 2022 01:40:48 -0800
Labels:       run=ostechnix-nginx
Annotations:  <none>
Status:       Running
IP:           172.17.0.6
IPs:
  IP:  172.17.0.6
Containers:
  ostechnix-nginx:
    Container ID:   docker://29eeb0392247aef193d6dff0138f8ef132dfb6359d8e67c3a5e4a21d7e259989
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Thu, 03 Feb 2022 01:40:54 -0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ggvk6 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-ggvk6:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  7m26s  default-scheduler  Successfully assigned default/ostechnix-nginx to ostechnix
  Normal  Pulling    7m24s  kubelet            Pulling image "nginx"
  Normal  Pulled     7m20s  kubelet            Successfully pulled image "nginx" in 4.114836826s
  Normal  Created    7m20s  kubelet            Created container ostechnix-nginx
  Normal  Started    7m20s  kubelet            Started container ostechnix-nginx
[root@ostechnix ~]#

Afficher les informations complètes d'un pod

Une fois que vous avez terminé, vous pouvez supprimer le Pod en utilisant la commande 'kubectl delete'.

kubectl delete pod ostechnix-nginx

Exemple de résultat :

pod "ostechnix-nginx" deleted

Vérifiez si le pod est supprimé en répertoriant les pods disponibles :

kubectl get pods
No resources found in default namespace.

Supprimer un pod

Conclusion

Dans ce didacticiel, nous avons abordé le concept de Pod dans Kubernetes, un déploiement d'application simple et comment exécuter un Pod. Nous aurons plus de détails sur la création d'un pod avec le fichier de définition YAML dans nos prochains détails.

Ressource :

  • https://kubernetes.io/docs/concepts/workloads/pods/

Articles connexes