Start working on tuto 5
This commit is contained in:
parent
50132f3a8f
commit
4fe5c78d9b
10 changed files with 868 additions and 0 deletions
146
tutorial/k8s/setup.md
Normal file
146
tutorial/k8s/setup.md
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
\newpage
|
||||
|
||||
Mise en place
|
||||
=============
|
||||
|
||||
La mise en place d'un cluster Kubernetes est une opération très longue, car
|
||||
elle nécessite l'installation et la configuration de nombreux composants.
|
||||
Cette opération n'étant pas très palpitante, nous ne la verrons pas
|
||||
aujourd'hui.
|
||||
|
||||
Pour jouer aujourd'hui, deux solutions s'offrent à nous :
|
||||
|
||||
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 :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
curl -Lo kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.0/kind-$(uname)-amd64
|
||||
chmod +x kind
|
||||
```
|
||||
</div>
|
||||
|
||||
Placez-le 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. Avant de lancer leur création.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
cat > my-cluster.yml <<EOF
|
||||
kind: Cluster
|
||||
apiVersion: kind.sigs.k8s.io/v1alpha3
|
||||
nodes:
|
||||
- role: control-plane
|
||||
- role: worker
|
||||
- role: worker
|
||||
EOF
|
||||
kind create cluster --config my-cluster.yml
|
||||
```
|
||||
</div>
|
||||
|
||||
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.16.3/bin/linux/amd64/kubectl
|
||||
chmod +x kubectl
|
||||
```
|
||||
</div>
|
||||
|
||||
C'est via cette commande que nous interagirons principalement avec l'API de
|
||||
Kubernetes.
|
||||
|
||||
Une fois que tout sera opérationnel, nous devrions obtenir :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ kubectl version
|
||||
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"archive", BuildDate:"2019-11-26T02:51:51Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
|
||||
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-16T01:01:59Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
Play With Kubernetes
|
||||
--------------------
|
||||
|
||||
De la même manière que pour les TP 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.
|
||||
|
||||
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 :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
kubeadm init --apiserver-advertise-address $(hostname -i)
|
||||
```
|
||||
</div>
|
||||
|
||||
Cette action peut prendre quelques minutes, et devrait se finir, si tout se
|
||||
passe bien, par :
|
||||
|
||||
<div lang="en-US">
|
||||
```
|
||||
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 SOMETOKEN SOMEIPADDRESS --discovery-token-ca-cert-hash SOMESHAHASH
|
||||
```
|
||||
</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')"
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
Minikube, Docker for Mac/Windows, MicroK8s, ...
|
||||
-----------------------------------------------
|
||||
|
||||
Si les solutions précédentes ne sont pas adaptés à votre usage, de nombreuses
|
||||
autres applications permettent de mettre en place un cluster plus ou moins
|
||||
complet, facilement.
|
||||
|
||||
Vous pouvez tenter d'utiliser
|
||||
[minikube](https://kubernetes.io/docs/setup/learning-environment/minikube/),
|
||||
[microk8s](https://microk8s.io/), ... Notez également que *Docker for Mac* et
|
||||
*Docker for Windows* intègrent également Kubernetes depuis quelques versions ;
|
||||
il convient de l'activer dans les préférences de l'application.
|
||||
Loading…
Add table
Add a link
Reference in a new issue