tuto: Update k8s
This commit is contained in:
parent
3a866b10e8
commit
c954191b1a
13 changed files with 211 additions and 147 deletions
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue