Premiers pas avec Kubernetes

Contenu

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

minikube stop

Arrête le cluster en conservant son état pour un redémarrage ultérieur.

minikube delete

Supprime le cluster et les ressources associées (VM/containers).

minikube dashboard

Lance le tableau de bord Kubernetes dans le navigateur.

minikube ssh

Ouvre une session shell sur le nœud principal minikube.

minikube ip

Affiche l’adresse IP du nœud principal (utile pour accéder aux services).

minikube logs

Affiche les logs du composant minikube pour diagnostiquer les problèmes.

minikube addons list

Liste les addons disponibles et indique lesquels sont activés.

minikube addons enable <addon>

Active un addon (ex. ingress, metrics-server, etc.).

minikube addons disable <addon>

Désactive un addon.

minikube status

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 !