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/