tuto: Update k8s

This commit is contained in:
nemunaire 2022-11-30 04:33:10 +01:00
commit c954191b1a
13 changed files with 211 additions and 147 deletions

View file

@ -1,21 +1,23 @@
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.
La mise en place d'un cluster Kubernetes est une opération qui peut s'avérer
très longue et complexe, car comme nous l'avons vu, 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
Cette installation 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
D'ailleurs, dans les milieux professionnels, 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](https://aws.amazon.com/fr/eks/)), d'Azure [Kubernetes
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](https://aws.amazon.com/fr/eks/)), d'Azure
[Kubernetes
Service](https://azure.microsoft.com/fr-fr/services/kubernetes-service/)) ou
Google ([Kubernetes Engine](https://cloud.google.com/kubernetes-engine/)), mais
d'autres acteurs plus petits existent aussi
@ -23,14 +25,39 @@ d'autres acteurs plus petits existent aussi
::::: {.more}
Lorsque l'on veut créer son cluster, on a le choix d'assembler tous les
composants de *Kubernetes* soi-même (*vanilla*), ou alors de partir d'une
distribution existante. On parle de *distribution* dans le même sens que l'on
connaît les distributions GNU/Linux : chacun peut aller récupérer les sources
du noyau Linux et des différents programmes nécessaires au démarrage et à
l'exécution d'un système d'exploitation fonctionnel, ou alors on peut utiliser
une distribution qui met à notre disposition un noyau Linux et tout un
écosystème de programmes qui forment un système d'exploitation cohérent et qui
fonctionne.\
Chaque distribution de *Kubernetes* aura donc pris soin de mettre à disposition
des composants pour un usage plus ou moins spécifique. En dehors des composants
strictement nécessaires qui ne changent pas, on verra d'une distribution à
l'autre des choix quant au moteur d'exécution de conteneurs (tantot CRI-O,
Containerd, KataContainers, ...), le réseau sera géré par une brique spécifique
(Flannel, Calico, Canal, Wave, ...), le stockage peut également faire l'objet
de choix.\
Devant la complexité de conception et le nombre grandissant de distributions,
une certification est délivrée aux distributions sérieuses. On en dénombre tout
de même plus d'une cinquantaine[^k8s-distributions-certified].\
[^k8s-distributions-certified]: Voir la liste sur
<https://www.cncf.io/certification/software-conformance/>.
Pour l'IoT ou l'Edge Computing, sur du matériel léger, il existe le projet
k3s[^k3s] : il s'agit d'une distribution Kubernetes beaucoup plus simple à
déployer, et parfaitement adaptée à la production sur Raspberry Pi et autres.
:::::
[^k3s]: Lightweight Kubernetes : <https://k3s.io/>
:::::
Pour jouer, plusieurs solutions s'offrent à nous pour commencer à
utiliser Kubernetes facilement :
@ -56,8 +83,8 @@ Une fois que tout sera opérationnel, nous devrions obtenir :
<div lang="en-US">
```
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", [...]
Client Version: version.Info{Major:"1", minor:"25", GitVersion:"v1.25.3", [...]
Server Version: version.Info{Major:"1", minor:"21", GitVersion:"v1.25.3", [...]
```
</div>
@ -77,9 +104,9 @@ 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.
*control-plane* et 2 *workers*, ça fera l'affaire. Attention tout de même à ne
pas être trop extravagant, car chaque nœud consomme pas mal de RAM ! Et puis
nous pourrons facilement changer cette configuration plus tard.
<div lang="en-US">
```bash
@ -105,7 +132,7 @@ kind create cluster --config 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>
<https://storage.googleapis.com/kubernetes-release/release/v1.25.3/bin/linux/amd64/kubectl>
C'est principalement grâce à cette commande que nous interagirons avec l'API de
Kubernetes.
@ -115,8 +142,8 @@ Une fois que tout sera opérationnel, nous devrions obtenir :
<div lang="en-US">
```
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", [...]
Client Version: Version.Info{Major:"1", Minor:"22", GitVersion:"v1.25.3", [...]
Server Version: Version.Info{Major:"1", Minor:"21", GitVersion:"v1.25.3", [...]
```
</div>
@ -136,16 +163,16 @@ 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](https://play-with-k8s.com/) qui vous donnera accès à
un bac à sable avec lequel vous pourrez réaliser tous les exercices.
le projet [Play With K8s](https://labs.play-with-k8s.com/) 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 notre *control-plane*, que nous utiliserons principalement, les deux
autres ne feront qu'exécuter des conteneurs, nous pourrons les oublier dès
qu'on les aura connectées à notre nœud principal.
Pour initialiser notre cluster Kubernetes, nous allons devoir créer notre
master. Pour cela, dans notre première instance, nous allons taper :
Pour initialiser notre cluster Kubernetes, nous allons commencer par créer
le contrôleur. Pour cela, dans notre première instance, nous allons taper :
<div lang="en-US">
```bash
@ -182,14 +209,13 @@ 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) :
plugin de modèle réseau, sur le nœud principal (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')"
kubectl apply -f \
https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml
```
</div>