Dans ce didacticiel, nous allons apprendre à créer et à gérer des pods Kubernetes. Tout d'abord, nous allons commencer par ce qu'est un pod dans Kubernetes et comment fonctionne un pod. Ensuite, nous examinerons brièvement les types de pods. Et ensuite nous verrons comment créer un nouveau Pod et comment visualiser 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 une collection 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 façon dont les conteneurs doivent être exécutés.
Le contenu d'un pod est toujours colocalisé, coplanifié et exécuté dans le même environnement. Un pod représente un "hôte logique" spécifique à l'application :il comprend un ou plusieurs conteneurs d'application é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 modules Kubernetes
Dans un cluster Kubernetes, il existe deux types de pods.
- POD de conteneur unique : Le cas d'utilisation le plus fréquent de Kubernetes 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 vont communiquer 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 du Kubernetes est de déployer l'application sous forme de conteneurs dans un ensemble de machines que l'on appelle worker node dans le cluster Kubernetes.
Kubernetes ne lance pas de conteneurs directement dans le nœud, mais le ou les conteneurs sont encapsulés en tant que Pod, qui est une instance unique d'une application.
Dans un cluster Kubernetes, un nœud se compose de pods et un pod se compose de conteneurs. Par exemple, vous avez une seule instance d'une application s'exécutant dans un seul conteneur encapsulé par un pod.
Si le nombre d'utilisateurs qui accèdent à 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 plus de capacité, vous devez disposer d'un nœud supplémentaire pour faire tourner les pods avec le même conteneur d'application.
De même, pour réduire, 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 configuration d'un déploiement de cluster Kubernetes à nœud unique et multinœud 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.
En règle générale, vous n'avez pas besoin de créer directement des pods, même des pods singleton. Au lieu de cela, créez-les à l'aide de ressources de charge de travail telles que le déploiement ou Emploi . 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 existante "echoserver" . C'est un simple serveur HTTP et nous pouvons l'exposer sur le port 8080
en utilisant --port
option.
Une image conteneur est un fichier qui encapsule un programme et toutes ses dépendances logicielles dans des données binaires. Les images de conteneur sont des packages logiciels exécutables indépendants qui font des hypothèses extrêmement spécifiques sur leur environnement d'exécution.
Dans cet article, nous allons passer 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 que root
utilisateur
# kubectl get nodes
Exemple de résultat :
NAME STATUS ROLES AGE VERSION ostechnix Ready Master 25h v1.22.3
Maintenant, déployez un exemple d'application appelé "hello-ostechnix" en utilisant 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 [[email protected] ~]#
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
Copiez l'URL et collez-la dans votre navigateur, elle listera les détails de l'application déployée.
Assurez-vous que le port 30525
est autorisé dans votre routeur ou votre pare-feu. Si ce port est bloqué, vous ne pouvez 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 que vous avez supprimé le déploiement, le pod associé à l'application sera fermé. La résiliation prendra quelques secondes.
# 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 sortie :
No resources found in default namespace.
Exécuter des pods avec des images
Nous pouvons utiliser le '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'endroit où le pod s'exécute et l'adresse IP du pod en utilisant le '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 le 'kubectl describe
' commande.
# kubectl describe pod ostechnix-nginx
Cette commande vous donnera les détails complets du POD comme les détails du conteneur et ses états, les détails des événements qui se sont produits 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://[email protected]: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 [[email protected] ~]#
Une fois que vous avez terminé, vous pouvez supprimer le pod en utilisant le 'kubectl delete
' commande.
# 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.
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 de Pod avec YAML
fichier de définition dans nos prochains détails.