Aller au contenu

Débuter avec Kubernetes

Ce tutoriel a pour objectif de présenter les principes de base de la kubernetisation avec Kubernetes que l'on va appeler k8s par la suite. Nous verrons un aperçu des ressources de l'API standard de k8s : namespace, pods, services, déploiements, volumes, configmaps et secrets.

Une brève introduction de k8s (diapositifs)

Prérequis

Pour suivre ce tutoriel, deux prérequis sont nécessaires :

  • avoir installé Kubernetes (voir ci-dessous) via la distribution K3s/K3d (VM vs conteneur)
  • docker est requis pour installer via k3d
  • kubectl pour interagir avec un cluster
  • avoir un compte sur le gitlab de l'IN2P3 (https://gitlab.in2p3.fr)

Installation de Kubernetes avec K3d

K3s est une distribution minimaliste de Kubernetes fournie par Rancher Lab basée sur des machines virtuelles. K3d est un wrapper léger de k3s pour fonctionner avec Docker.

Pour installer k3d, suivez les instructions en fonction du système d'exploitation que vous utilisez.

wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
  • Mac :
brew install k3d

Initialisation d'un cluster k8s

Vous pouvez à présent instancier localement un cluster k8s :

k3d cluster create mycluster &&\
k3d cluster list

Cela crée 3 conteneurs Docker (un utilitaire, un loadbalancer basé sur Nginx, un serveur qui joue le rôle de master et worker):

docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED       STATUS       PORTS                             NAMES
41820d57c14c   ghcr.io/k3d-io/k3d-tools:5.8.2   "/app/k3d-tools noop"    2 days ago    Up 2 days                                      k3d-k3s-default-tools
2e001a6247a1   ghcr.io/k3d-io/k3d-proxy:5.8.2   "/bin/sh -c nginx-pr…"   2 days ago    Up 2 days    80/tcp, 0.0.0.0:54670->6443/tcp   k3d-k3s-default-serverlb
01bc06102764   rancher/k3s:v1.31.5-k3s1         "/bin/k3d-entrypoint…"   2 days ago    Up 2 days                                      k3d-k3s-default-server-0

Pour tester si k8s est correctement installé, exécutez dans un terminal l'utilitaire kubectl qui nous permet de contrôler un cluster k8s via l'API :

kubectl version

La sortie devrait ressembler à quelque chose comme :

Client Version: v1.32.2
Kustomize Version: v5.5.0
Server Version: v1.31.5+k3s1

Un répertoir .kube dans lequel sont stockés les configurations permettant d'accéder aux clusters (adresse de l'API et certificats TLS pour s'authentifier) est aussi crée :

~/.kube/config

Il est aussi possible d'accéder aux informations de configuration via :

kubectl config view

Lorsque l'on souhaite changer de cluster, il est aussi possible d'exporter le chemin du fichier de configuration via la variable KUBECONFIG :

export KUBECONFIG=~/.kube/config

Remarque

Un fichier config peut contenir la configuration des plusieurs clusters. S'il existe déjà, k3d y ajoutera une configuration.

Pour vérifier l'accès au cluster via kubectl :

kubectl cluster-info &&\
kubectl get nodes -o wide

Cela doit renvoyer vers les 3 services du cluster : Kubernetes control plane, CoreDNS, Metrics-server et le noeud qui les hébergent k3d-k3s-default-server-0.

Configuration

Il est utile de configurer un peu son environnement de développement avec des alias et des plugins.

Alias

Remarque

A partir de cette section la commande kubectl sera notée comme k.

Voici quelques alias très utiles et la liste complète des alias de kubectl.

alias k='kubectl'
alias kg='kubectl get'
alias kgpo='kubectl get pod'
alias kall='kubectl get all'

alias ksysgpo='kubectl --namespace=kube-system get pod'

alias krm='kubectl delete'
alias krmf='kubectl delete -f'
alias krming='kubectl delete ingress'
alias krmingl='kubectl delete ingress -l'
alias krmingall='kubectl delete ingress --all-namespaces'

alias kgsvcoyaml='kubectl get service -o=yaml'
alias kgsvcwn='kubectl get service --watch --namespace'
alias kgsvcslwn='kubectl get service --show-labels --watch --namespace'

alias kgwf='kubectl get --watch -f'
...

Remarque

Il est aussi possible d'utiliser des raccourcis pour les objets de k8s : pod=> po, namespace=> ns...

Plugins et outils

L'écosystème de k8s est très important et voici donc quelques plugins utiles.

  • Krew :

    Gestion des plugins de kubectl. Quelques exemples utiles :

    • ctx: quick context (current cluster) changes
    • ns: quick current namespace changes
    • whoami: who the cluster thinks you are from your authentication
    • who-can: RBAC rules introspection

    Instructions officielles d'installation

    Exemple d'utilisation :

    k krew install ctx &&\
    k ctx
    
  • Kubens :

    Utilitaire de gestion de namespace. Même que kubectl ns si installé via krew.

    kubens
    
  • Kubectx :

    Utilitaire de gestion de contexte. Permet de changer de cluster k8s. Même que kubectl ctx.

    kubectx
    
  • Stern :

    Multi pod and container log tailing for k8s.

    brew install stern &&\
    stern -n tuto my-dep
    

    Peut être installé via kubectl krew install stern et utilisé après comme k stern ...

Pour voir la liste complète des plugins :

k krew search

Les outils additionnels :

  • Helm :

    Gestionnaire de paquet de k8s que nous utiliserons dans une section ultérieure.

    brew|snap install helm
    
Authors: Cécile Cavet (75.0%), SAVCHENKO Denys (25.0%)