virli/tutorial/k8s/setup.md
Pierre-Olivier Mercier 44723afa52 Fix typos
Thanks-to: <mathieu-ghirlanda@epita.fr>
2022-06-26 21:08:01 +02:00

7.4 KiB

Mise en place

La mise en place d'un cluster Kuernetes est une opération qui peut s'avérer très longue et complexe, car elle nécessite l'installation et la configuration de nombreux composants avant de pouvoir être utilisé pleinement.

Cette opération n'étant pas très palpitante (c'est beaucoup de lecture de documentations et d'heures passées à essayer de faire tomber en marche tous les composants d'un seul coup), nous ne la verrons pas ici.

D'ailleurs, dans le milieu professionnel, il est plutôt rare de voir des entreprises investir dans la gestion de leur propre cluster Kubernetes. La plupart des entreprises qui font le choix d'utiliser Kubernetes pour gérer leurs infrastructures, choisissent de passer par un prestataire. L'entreprise délègue donc la gestion de son/ses cluster(s) à une autre entreprise, dont c'est le cœur de métier. La plupart du temps, il va s'agir d'Amazon (via Elastic Kubernetes Service), d'Azure Kubernetes Service) ou Google (Kubernetes Engine), mais d'autres acteurs plus petits existent aussi (OVHcloud, ...).

::::: {.more}

Pour l'IoT ou l'Edge Computing, sur du matériel léger, il existe le projet k3s1 : il s'agit d'une distribution Kubernetes beaucoup plus simple à déployer, et parfaitement adaptée à la production sur Raspberry Pi et autres.

:::::

Pour jouer, plusieurs solutions s'offrent à nous pour commencer à utiliser Kubernetes facilement :

Docker for Mac/Windows

Docker Desktop pour Mac ou pour Windows intègre Kubernetes directement. Il n'est pas activé par défaut, pour cela il convient d'activer l'option dans les préférences de l'application :

Paramètres de Docker Desktop

Une fois l'option activée, vous pouvez passer au chapitre suivant, la commande kubectl devrait marcher directement pour vous. C'est principalement grâce à cette commande que nous interagirons avec l'API de Kubernetes.

Une fois que tout sera opérationnel, nous devrions obtenir :

``` 42sh$ kubectl version Client Version: version.Info{Major:"1", minor:"22", GitVersion:"v1.22.2", [...] Server Version: version.Info{Major:"1", minor:"21", GitVersion:"v1.21.5", [...] ```

Kubernetes in Docker (kind)

kind est un projet permettant de lancer un cluster Kubernetes directement via Docker.

Pour commencer, il nous faudra télécharger le binaire (go, donc statique) suivant (il existe pour Linux, macOS et Windows) :

https://github.com/kubernetes-sigs/kind/releases/latest

Placez le binaire (chmod +x {}) dans un endroit où il sera accessible de votre $PATH.

Notre prochaine étape est de décrire le cluster que l'on souhaite avoir : 1 master et 2 workers, ça fera l'affaire. Attention tout de même de ne pas être trop extravagant, car chaque nœud consomme pas mal de RAM ! Et puis nous pourrons facilement changer cette configuration plus tard.

```bash cat > my-cluster.yml <

La création du cluster peut prendre quelques minutes.

Profitons-en pour télécharger kubectl :
https://storage.googleapis.com/kubernetes-release/release/v1.22.2/bin/linux/amd64/kubectl

C'est principalement grâce à cette commande que nous interagirons avec l'API de Kubernetes.

Une fois que tout sera opérationnel, nous devrions obtenir :

``` 42sh$ kubectl version Client Version: Version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", [...] Server Version: Version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5", [...] ```

Par défaut, kubectl va tenter de contacter le port local 2375, kind aura pris soin de l'exposer pour vous au moment de la création du cluster.

Passez ensuite au chapitre suivant si vous avez réussi à mettre en place kind.

Play With Kubernetes

::::: {.warning}

Cette section vous concerne uniquement si vous n'avez pas réussi à créer de cluster Kubernetes selon les autres méthodes décrites.

:::::

De la même manière que pour les exercices utilisant Docker, si vous avez des difficultés pour réaliser les exercices sur vos machines, vous pouvez utiliser le projet Play With K8s qui vous donnera accès à un bac à sable avec lequel vous pourrez réaliser tous les exercices.

Il nous faut créer plusieurs instances, disons 3 : parmi elles, 1 instance sera la master, nous l'utiliserons principalement, les deux autres ne feront qu'exécuter des conteneurs, nous pourrons les oublier dès qu'on les aura connectées au master.

Pour initialiser notre cluster Kubernetes, nous allons devoir créer notre master. Pour cela, dans notre première instance, nous allons taper :

```bash kubeadm init --apiserver-advertise-address $(hostname -i) ```

Cette action peut prendre quelques minutes et devrait se finir, si tout se passe bien, par :

``` Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node as root:

kubeadm join --token TOKEN IPADDRESS --discovery-token-ca-cert-hash SHAHASH

</div>

Recopions ensuite la commande `kubeadm join ...` donnée dans le terminal, dans
nos deux autres instances. Cela permettra aux machines de se connecter au
master.

Dernière étape pour la mise en place de notre cluster, il s'agit de définir un
profil de politique réseau, sur le master (nous n'exécuterons plus de commande
sur les autres workers) :

<div lang="en-US">
```bash
kubectl apply -n kube-system -f \
  "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | \
  base64 | tr -d '\n')"

Minikube, k3d, MicroK8s, ...

Si les solutions précédentes ne sont pas adaptées à votre usage, de nombreuses autres applications permettent de mettre en place un cluster plus ou moins complet facilement.

Vous pouvez tenter d'utiliser k3d, minikube, microk8s, ...

k3d {-}

est un script similaire à kind, mais utilise k3s, une version plus légère et compacte de Kubernetes.

Après l'avoir installé, vous pouvez lancer :

```bash k3d cluster create mycluster --agents 2 --kubeconfig-switch-context ```

  1. Lightweight Kubernetes : https://k3s.io/ ↩︎