Save tuto corrections

This commit is contained in:
nemunaire 2022-02-24 20:43:43 +01:00
commit 10448a6c8d
115 changed files with 1423 additions and 1289 deletions

View file

@ -3,11 +3,9 @@
Mise en place
=============
La mise en place d'un cluster Kubernetes ([prononcé
Ku-ber-né-tice](https://github.com/kubernetes/kubernetes/issues/44308) en grec)
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é sereinement.
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
@ -19,7 +17,7 @@ plupart des entreprises qui font le choix d'utiliser Kubernetes pour gérer leur
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'Azur ([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
@ -28,79 +26,63 @@ d'autres acteurs plus petits existent aussi
::::: {.more}
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 à
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]: https://k3s.io/
[^k3s]: Lightweight Kubernetes : <https://k3s.io/>
Pour jouer aujourd'hui, plusieurs solutions s'offrent à nous pour commencer à
utiliser Kubernetes facilement :
- [Docker Desktop (for Mac ou for Windows) :](#dockerdesktop) si vous êtes sur l'un de ces
- [Docker Desktop (for Mac ou for Windows) :](#dockerdesktop) si vous êtes sur l'un de ces
systèmes c'est la solution la plus simple,
- [Kubernetes in Docker (kind) :](#kind) pour tenter l'aventure sur votre machine,
- [Play With Kubernetes :](#pwk) si vous ne vous en sortez pas avec `kind`.
- [Kubernetes in Docker (kind) :](#kind) pour tenter l'aventure sur votre machine,
- [Play With Kubernetes :](#pwk) si vous ne vous en sortez pas avec `kind`.
\newpage
Docker for Mac/Windows {#dockerdesktop}
----------------------
### Docker for Mac/Windows {#dockerdesktop}
*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 :
préférences de l'application :
![Paramètres de Docker Desktop](docker-desktop-k8s.png)
![Paramètres de Docker Desktop](../k8s/docker-desktop-k8s.png)
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 :
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", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"archive", BuildDate:"2021-11-18T15:50:50Z", GoVersion:"go1.17.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5+k3s2", GitCommit:"724ef700bab896ff252a75e2be996d5f4ff1b842", GitTreeState:"clean", BuildDate:"2021-10-05T19:59:14Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
Client Version: version.Info{Major:"1", minor:"22", GitVersion:"v1.22.2", [...]
Server Version: version.Info{Major:"1", minor:"21", GitVersion:"v1.21.5", [...]
```
</div>
Kubernetes in Docker (kind) {#kind}
---------------------------
### Kubernetes in Docker (kind) {#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) :
suivant (il existe pour Linux, macOS et Windows) :
<div lang="en-US">
```bash
curl -Lo kind https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-$(uname)-amd64
chmod +x kind
```
</div>
<https://github.com/kubernetes-sigs/kind/releases/latest>
Placez le binaire dans un endroit où il sera accessible de votre `$PATH`.
::::: {.question}
`uname` est à remplacer par votre système d'exploitation : `darwin` (macOS), `linux`, `windows`.
Il existe également pour d'autres architectures, consultez la [page des
versions](https://github.com/kubernetes-sigs/kind/releases/latest) pour voir
les différents binaires existants.
:::::
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
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
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">
@ -126,25 +108,19 @@ kind create cluster --config my-cluster.yml
La création du cluster peut prendre quelques minutes.
Profitons-en pour télécharger `kubectl` :
<div lang="en-US">
```bash
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.2/bin/linux/amd64/kubectl
chmod +x kubectl
```
</div>
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 :
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", GitCommit:"8b5a19147530eaac9476b0ab82980b4088bbc1b2", GitTreeState:"archive", BuildDate:"2021-11-18T15:50:50Z", GoVersion:"go1.17.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5+k3s2", GitCommit:"724ef700bab896ff252a75e2be996d5f4ff1b842", GitTreeState:"clean", BuildDate:"2021-10-05T19:59:14Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
Client Version: Version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2", [...]
Server Version: Version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.5", [...]
```
</div>
@ -153,8 +129,7 @@ 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 {#pwk}
--------------------
### Play With Kubernetes {#pwk}
::::: {.warning}
@ -163,18 +138,18 @@ cluster Kubernetes selon les autres méthodes décrites.
:::::
De la même manière que pour les TP utilisant Docker, si vous avez des
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 de ce TP.
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
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 :
master. Pour cela, dans notre première instance, nous allons taper :
<div lang="en-US">
```bash
@ -183,7 +158,7 @@ kubeadm init --apiserver-advertise-address $(hostname -i)
</div>
Cette action peut prendre quelques minutes et devrait se finir, si tout se
passe bien, par :
passe bien, par :
<div lang="en-US">
```
@ -202,7 +177,7 @@ Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
You can now join any number of machines by running the following on each node
as root:
kubeadm join --token SOMETOKEN SOMEIPADDRESS --discovery-token-ca-cert-hash SOMESHAHASH
kubeadm join --token TOKEN IPADDRESS --discovery-token-ca-cert-hash SHAHASH
```
</div>
@ -212,18 +187,18 @@ 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) :
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')"
"https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | \
base64 | tr -d '\n')"
```
</div>
Minikube, k3d, MicroK8s, ...
----------------------------
### 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
@ -239,7 +214,7 @@ Vous pouvez tenter d'utiliser
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
Après l'avoir installé, vous pouvez lancer :
<div lang="en-US">
```bash