Premiers pas avec Kubernetes#
Création d’un cluster
Lancez un nouveau cluster avec deux nœuds et l’ingress nginx (on reviendra plus tard sur ce que cela signifie) :
minikube start --nodes 2 --cni=calico --addons ingress
Pour limiter la consommation de ressources, on peut avoir un cluster un peu allégé (1 seul noeud, cni plus simple) en faisant :
minikube start --addons ingress
Observez les nœuds:
minikube node list
Si vous êtes sous Linux et utilisez docker, vous pouvez aussi “voir les nœuds” avec docker ps.
On constate aussi que notre fichier de configuration kubernetes est mis à jour :
cat ~/.kube/config
Ce fichier est utilisé par kubectl pour savoir comment communiquer avec l’API k8S.
Commandes minikube utiles
Avec la commande précédente vous avez lancé un cluster composé de 2 hôtes “virtuels” sur votre machine. Minikube est votre administrateur de cluster personnel et pas cher.
Voici quelques commandes minikube utiles :
Commande |
Description |
|---|---|
|
Arrête le cluster en conservant son état pour un redémarrage ultérieur. |
|
Supprime le cluster et les ressources associées (VM/containers). |
|
Lance le tableau de bord Kubernetes dans le navigateur. |
|
Ouvre une session shell sur le nœud principal minikube. |
|
Affiche l’adresse IP du nœud principal (utile pour accéder aux services). |
|
Affiche les logs du composant minikube pour diagnostiquer les problèmes. |
|
Liste les addons disponibles et indique lesquels sont activés. |
|
Active un addon (ex. |
|
Désactive un addon. |
|
Affiche le statut du cluster. |
Les addons sont des applications kubernetes “standard” qui n’ont rien de spécifique à minikube. Cependant minikube vous propose une base d’addons qu’il est pratique de gérer au travers de minikube.
Premiers échanges avec le cluster
Listez les pods (les objets qui représentent la volonté qu’un conteneur existe) :
kubectl get pods --all-namespaces -o wide #On peut remplacer --all-namespaces par -A
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system calico-kube-controllers-7df895d496-lmvbx 1/1 Running 0 2m35s 10.244.120.65 minikube <none> <none>
kube-system calico-node-2ldkj 0/1 Running 0 2m35s 192.168.49.2 minikube <none> <none>
kube-system calico-node-84sqn 0/1 Running 0 38s 192.168.49.3 minikube-m02 <none> <none>
kube-system coredns-565d847f94-6jsxn 1/1 Running 0 2m35s 10.244.120.66 minikube <none> <none>
kube-system etcd-minikube 1/1 Running 0 2m48s 192.168.49.2 minikube <none> <none>
kube-system kube-apiserver-minikube 1/1 Running 0 2m48s 192.168.49.2 minikube <none> <none>
kube-system kube-controller-manager-minikube 1/1 Running 0 2m48s 192.168.49.2 minikube <none> <none>
kube-system kube-proxy-g9297 1/1 Running 0 38s 192.168.49.3 minikube-m02 <none> <none>
kube-system kube-proxy-tc75c 1/1 Running 0 2m35s 192.168.49.2 minikube <none> <none>
kube-system kube-scheduler-minikube 1/1 Running 0 2m47s 192.168.49.2 minikube <none> <none>
kube-system storage-provisioner 1/1 Running 0 2m46s 192.168.49.2 minikube <none> <none>
Ici on retrouve les contrôleurs “réseau” (les calico-**), et les éléments de base de kubernetes.
À faire pour s’habituer :
kubectl get -n <completion automatique avec tab et voir les namespaces> pods
kubectl get -n <completion automatique avec tab et voir les namespaces> <completion automatique pour voir le type d objets>
kubectl cluster-info #Pour avoir des infos sur le cluster actuellement configuré
Aperçu de l’utilisation de kubectl
Présentation
Présentation des commandes de base de kubectl.
Créez un fichier ubuntusleep.yaml contenant :
apiVersion: v1 kind: Pod metadata: name: ubuntusleep namespace: default spec: containers: - name: ubuntusleep image: ubuntu:22.04 args: ["sleep","infinity"]
Demandez à kubernetes de créer ce pod :
kubectl apply -f ubuntusleep.yaml
Observez le lancement du pod :
kubectl get pods
Et ouvrez un terminal dans ce pod :
kubectl exec -it ubuntusleep -- /bin/bash
Note
Vous venez de créer votre premier objet kubernetes, un Pod.
Un objet de type “Pod” représente l’existence d’un conteneur. C’est l’objet le plus “simple” et qui va donner lieu à un ordonnancement immédiat du lancement de conteneur sur un nœud. Lorsqu’on crée un objet de type Pod, l’ordonnanceur de Kubernetes choisit un nœud et lui demande de s’occuper de ce pod. Grossièrement, cela va se traduire par l’exécution d’une commande telle que “docker run” sur ce nœud via le démon “kubelet”.
Pour plus de détails, la documentation est ici : https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#podspec-v1-core
Dashboard#
Dans la suite on utilisera principalement la ligne de commande pour interagir avec kubernetes. Cependant, pour avoir un aperçu visuel des objets et des ressources, on pourra utiliser le dashboard. Pour le lancer :
minikube addons enable metrics-server
minikube dashboard
Temps collectif : démonstration
Observons l’interface Dashboard ensemble !