Lors d’un précédent article, nous avions découvert les principes de kubernetes et quelques définitions. Il est temps pour nous de débuter dans les commandes kubernetes.
Si vous le souhaitez, vous pouvez retrouver plus de 70 vidéos gratuites dans cette playlist que je mets à votre disposition. Cette formation kubernetes vous permet de découvrir l’outil tranquillement à votre rythme et de bénéficier du code de chacun des tutos pour reproduire cela de votre côté sur votre laptop.
Premier pod et premier run
La couche logique nommée pod qu’apporte k8s est inévitable lorsque vous utilisez cet orchestrateur. Si vous avez pratiqué docker ou un autre conteneur runtime, imaginez un pod comme une couche supérieure. Cette couche dispose de la description des conteneurs qui vont être lancés et de leur environnement.
Nous le verrons plus tard, les objets k8s sont souvent lancés via des manifests. Ces derniers sont des fichiers descriptifs en format yaml. Mais pour débuter souvent on apprend dans un premier temps à lancer ces éléments à partir de la ligne de commande.
Alors comment lancer le plus simplement du monde un pod dans kubernetes ?
Suivant la version de kub qu evous utilisez vous pourrez réaliser un simple “kubectl run” à la manière d’un docker run de cette manière :
kubectl run mycontainer --image busybox
De cette manière nous venons de lancer un pod qui va lancer un conteneur dont l’image source est une busybox. Alors comme pour un run docker, vous pouvez aussi passer des commandes et par exemple vous connecter à un terminal :
kubectl run anothershell -it --image busybox -- sh
Là nous venons de lancer un pod et nous entrons directement dans le conteneur en question avec un shell à notre disposition. Mais nous pouvons également venir nous connecter à un shell d’un conteneur existant. Pour cela et comme pour docker, nous pouvons lancer un kubectl exec :
kubectl exec -ti <monpod> -- sh
Tout cela est assez facile à retenir si vous avez déjà pratiqué un peu de docker.
Comment lister les pods ?
kubectl
get pods
Je vous invite à bien retenir la combinaison “kubectl get” qui revient en permanence sur kub. Elle permet de lister les objets d’un type donné.
Si vous êtes sur un cluster kubernetes, il est intéressant d’en revenr aux fondamentaux qu’il faut toujours garder en tête et notamment : kubernetes est un orchestrateur de conteneurs.
Ainsi, je vous invite à faire un :
kubectl get pods -o wide
L’option -o wide permet d’avoir plus d’information et notamment les les noeuds sur lesquels les conteneur ont été déployés. Ainsi poru aller plus loin vous pouvez vous rendre sur le serveur des pods que nous venons de lancer et lancer un simple
docker ps | grep "mycontainer\|another"
Vous devriez retrouver les conteneurs déployés par notre fameuse couche logique qui est le pod.
Vous pouvez aussi supprimer ces pods à l’aide de la commande :
kubectl delete pods <nom_du_pod>
Et un peu plus loin le deployment et le service
Alors maintenant nous allons encore empiler une brique logique sur les pods à savoir le deployement. Un deployment permet de lancer les pods de manière automatisée si on devait le résumer. Le deployment a des capacités étendues.
Ainsi, dans le deployment, nous le verrons plus tard, nous aurons un template de pods. C’est à dire la capcité à lancer et relancer des pods du même type… et même proposer de l’autoscaling de pod en fonction de la sollicitation des ressources ou non.
Alors comment créer un deployment qui va lancer un pod ?
Simplement avec la ligne de commande :
kubectl create deployment monnginx --image nginx
Avec cette ligne nous créons un déploiement de la manière la plus réduite qu’il existe à savoir en spécifiant juste l’image qui servira dans le pod à créer le ou les conteneurs. Dans notre cas, cette image est une nginx.
Je vous invite à lister ce nouvelle object de cette manière :
kubectl get deployment
Vous découvrez donc votre déploiement et si vous lancez un :
kubectl get pods
Vous retrouvez un pod préfixé du nom du déploiement.
Simple non ? Dans la pratique vous le verrez on ne lance presque jamais un pod seul mais vous le ferez par un deployment. Ce dernier apporte aussi de la persistance à votre pod notamment via un autre object créé par le deployment qui se nomme le replicaset. Il a principalement en charge l’existence de vos pods et le respect du bon nombre. Vous pouvez également lister les replicaset
kubectl get replicasets
Et si vous le souhaitez vous pouvez faire le test de supprimer un pod créé par votre deployment.
kubectl delete pods <nom_du_pod>
Que se passe-t-il si vous relisté les pods ensuite ? Kubernetes va recréer le nombre de pods que vous avez demandé de maintenir au deployment.
Alors comment supprimer définitivement les pods ? Simplement en supprimant le pod (il y a d’autres moyens pour d’autres cas de figures).
kubectl delete deployment monginx
Et là kubernetes va supprimer lui même les pods et replicaset.
Voici donc nos premier pas dans un cluster kubernetes réalisés. Si vous souhaitez progresser reportez vous à la playlist de formation kubernetes, c’est gratuit. Vous pouvez aussi retrouver le code pour faire vos tests ici. A bientôt !!