diff --git a/labs/liascript/labs-k8s.md b/labs/liascript/labs-k8s.md index b64711e..118eea8 100644 --- a/labs/liascript/labs-k8s.md +++ b/labs/liascript/labs-k8s.md @@ -4938,7 +4938,9 @@ Choisissez ! ``` -##### Contenu de `base/deployment.yaml` +##### Deployment sl-demo-app + +Contenu du fichier `base/deployment.yaml` ```yaml +. apiVersion: apps/v1 @@ -4963,7 +4965,9 @@ spec: protocol: TCP ``` -##### Contenu de `base/service.yaml` +##### Service sl-demo-app + +Contenu du fichier `base/service.yaml` ```yaml +. apiVersion: v1 @@ -4981,7 +4985,9 @@ spec: -##### Contenu de `base/kustomization.yaml` +##### Kustomization + +Contenu du fichier `base/kustomization.yaml` ```yaml +. apiVersion: kustomize.config.k8s.io/v1beta1 @@ -5016,7 +5022,9 @@ replicaset.apps/sl-demo-app-bb6494cc6 1 1 1 6m42s #### Création de l'overlay de production (prod) -##### Contenu du fichier `overlays/prod/replica-and-rollout-strategy.yaml` +##### [prod] Deployment sl-demo-app + +Contenu du fichier `overlays/prod/replica-and-rollout-strategy.yaml` ```yaml +. @@ -5033,7 +5041,9 @@ spec: type: RollingUpdate ``` -##### Contenu du fichier `overlays/prod/database-secret.yaml` +##### Env Var Database Password + +Contenu du fichier `overlays/prod/database-secret.yaml` ```yaml +. apiVersion: apps/v1 @@ -5054,7 +5064,9 @@ spec: ``` -##### Contenu du fichier `overlays/prod/custom-env.yaml` +##### Env Var custom + +Contenu du fichier `overlays/prod/custom-env.yaml` ```yaml +. apiVersion: apps/v1 @@ -5071,7 +5083,9 @@ spec: value: Value defined by Kustomize ❤️ ``` -##### Contenu du fichier `overlays/prod/kustomization.yaml` +##### kustomization + +Contenu du fichier `overlays/prod/kustomization.yaml` ```yaml +. apiVersion: kustomize.config.k8s.io/v1beta1 @@ -5108,7 +5122,6 @@ kubectl get all -l caas.fr/environment=prod ``` -
@@ -6259,318 +6272,4 @@ spec: targetPort: http type: LoadBalancer -``` - -# Lab Kubernetes - -## Création d'un cluster Kubernetes - -### Installation avec Minikube - -
-Machine : **master** -
- -1. Commençons par l'installation du binaire Minikube : - -``` -curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -chmod +x minikube -sudo mv minikube /usr/local/bin/ -``` - -2. Nous pouvons donc vérifier l'installation de minikube : - -``` -minikube version - -minikube version: v1.15.1 -commit: 23f40a012abb52eff365ff99a709501a61ac5876 -``` - - -1. Maintenant que nous avons installé le binaire minikube, nous pouvons donc bootstrap un cluster Kubernetes : - -```bash -minikube start - -😄 minikube v1.23.16 sur Darwin 11.2.3 -✨ Choix automatique du pilote docker. Autres choix: -👍 Démarrage du noeud de plan de contrôle minikube dans le cluster minikube -🚜 Pulling base image ... -💾 Downloading Kubernetes v1.23.16 preload ... - > preloaded-images-k8s-v10-v1...: 491.71 MiB / 491.71 MiB 100.00% 5.96 MiB - > gcr.io/k8s-minikube/kicbase...: 358.10 MiB / 358.10 MiB 100.00% 4.10 MiB - > gcr.io/k8s-minikube/kicbase...: 358.10 MiB / 358.10 MiB 100.00% 4.71 MiB -🔥 Creating docker container (CPUs=2, Memory=4000MB) ... -🐳 Préparation de Kubernetes v1.23.16 sur Docker 20.10.6... - ▪ Generating certificates and keys ... - ▪ Booting up control plane ... - ▪ Configuring RBAC rules ... -🔎 Verifying Kubernetes components... - ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 -🌟 Enabled addons: storage-provisioner, default-storageclass -🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default - -``` - -4. Parfait, nous pouvons à tout moment consulter le statut de notre cluster minikube : - -```bash -minikube status - -minikube -type: Control Plane -host: Running -kubelet: Running -apiserver: Running -``` - -1. Il est possible d'installer d'autres clusters en utilisant le flag profile - -``` -minikube start --profile -``` - - -6. Comme tout cluster Kubernetes, nous pouvons le manipuler via kubectl. Lors de l'installation d'un cluster Kubernetes avec minikube, kubectl est automatiquement configuré pour utiliser le cluster généré (Même si kubectl n'est pas installé durant le bootstrap du cluster). Il nous suffit donc d'installer kubectl : - -``` -curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl - -chmod +x ./kubectl - -sudo mv ./kubectl /usr/local/bin/kubectl - -kubectl version --client - -``` - -7. Nous pouvons lister les pods de la façon suivante : - -``` -kubectl get pods -A -``` - -```bash - -NAMESPACE NAME READY STATUS RESTARTS AGE -kube-system coredns-f9fd979d6-b2mcz 1/1 Running 0 25m -kube-system etcd-minikube 1/1 Running 0 26m -kube-system kube-apiserver-minikube 1/1 Running 0 26m -kube-system kube-controller-manager-minikube 1/1 Running 0 26m -kube-system kube-proxy-4hq45 1/1 Running 0 25m -kube-system kube-scheduler-minikube 1/1 Running 0 26m -kube-system storage-provisioner 1/1 Running 1 26m -``` - -1. Nous allons déployer un pod base sur l'image nginx à titre d'exemple : - -``` -kubectl run --image=nginx:latest test-pod -``` - -```bash -pod/test-pod created -``` - -1. On peut à tout moment, stopper le cluster minikube : - -``` -minikube stop -``` - -```bash - -✋ Stopping node "minikube" ... -🛑 Powering off "minikube" via SSH ... -🛑 1 nodes stopped. -``` - -1. Enfin, si on souhaite détruire notre cluster Kubernetes, nous pouvons le faire de la façon suivante (après avoir stoppé le cluster via la commande ci-dessus) : - -``` -rm -rf ~/.minikube - -``` - -
- -### Installation avec Kubeadm - -
-Machines : **master**, **worker-0**, **worker-1** -
- -Mettre à jour le fichier /etc/hosts en renseignant les IP des trois VM. **Prenez soin de remplacer les adresses IP par celles de vos VM.** - -exemple : - -```bash -# /etc/hosts file -10.10.4.80 master -10.10.4.81 worker-0 -10.10.4.82 worker-1 -``` - - -⚠️ Si kubeadm est déjà installé sur vos instances, Veuillez passer au point 3. - - -Le contenu du fichier /etc/hosts doit être identique sur les trois machines. - -1. Installer et activer Docker - -```bash -sudo apt-get update - -sudo apt-get install docker.io - -sudo systemctl enable docker - -``` - -2. Nous allons commencer par installer l’outil Kubeadm, la Kubelet et Kubectl sur les trois machines. Pour ce faire : - -```bash -curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - -sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" - -sudo apt-get update - -sudo apt-get install -y kubelet=1.19.11-00 kubeadm=1.19.11-00 kubectl=1.19.11-00 - -sudo apt-mark hold kubelet kubeadm kubectl ``` - -3. Une fois ces outils installés, nous allons utiliser Kubeadm pour initialiser un cluster Kubernetes avec le noeud master. Ainsi, nous pouvons exécuter la commande suivante sur le noeud master uniquement: - - -3.1 (Préparation de l'environnement) Installation de la completion pour kubectl - -```bash - -echo 'source <(kubectl completion bash)' >>~/.bashrc -echo 'alias k=kubectl' >>~/.bashrc -echo 'complete -o default -F __start_kubectl k' >>~/.bashrc - -source ~/.bashrc - -# test -k get nodes -``` - - - -3.2 Installation du cluster kubernetes - -```bash -sudo kubeadm init -``` - -```bash -... -Your Kubernetes control-plane has initialized successfully! - -To start using your cluster, you need to run the following as a regular user: -... - -``` - -Un token sera généré à l'issue du processus d'initialisation. Il est important de le sauvegarder car il servira à connecter les worker nodes au cluster - - - -4. Nous avons donc installé un premier noeud master Kubernetes. Nous allons maintenant configurer la CLI kubectl pour pouvoir l’utiliser depuis le master: - -```bash -mkdir -p $HOME/.kube - -sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config - -sudo chown $(id -u):$(id -g) $HOME/.kube/config -``` - -5. Nous allons maintenant installer un add-on réseaux pour nos pods sur le master. Il existe plusieurs plugins répondant à ce besoin : Calico, Canal, Weave, Flannel etc. Pour cette exercice, nous allons installer le plugin weave, de la façon suivante : - -``` -kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml -``` - -**Note** : Si on souhaite utiliser les network policies (que nous explorerons plus tard), il faut utiliser un plugin supportant cette fonctionnalité. (Il faut éviter flannel notamment) - - - -6. Nous allons maintenant ajouter les deux noeuds worker à notre cluster. Pour ce faire, nous allons utiliser la commande suivante sur les noeuds worker worker-0 et worker-1: - -```bash -training@worker$ sudo kubeadm join INTERNAL_MASTER_IP:6443 --token TOKEN --discovery-token-ca-cert-hash DISC_TOKEN -``` - -```bash - -This node has joined the cluster: -* Certificate signing request was sent to apiserver and a response was received. -* The Kubelet was informed of the new secure connection details. - -Run 'kubectl get nodes' on the control-plane to see this node join the cluster. -``` - -7. Nous pouvons lister les noeuds de la façon suivante afin de nous assurer que les noeuds worker ont bien rejoint le cluster (les noeuds worker sont NotReady pour quelques secondes) : - -```bash -kubectl get nodes -``` - -```bash -NAME STATUS ROLES AGE VERSION -master Ready master 25m v1.19.3 -worker-0 Ready 2m24s v1.19.3 -worker-1 Ready 1m24s v1.19.3 -``` - - -8. Nous allons déployer un pod redis pour tester l’installation de notre cluster : - -```bash -kubectl run --image redis test-pod -``` - -```bash -pod/test-pod created -``` - - -9. Une petite liste des pods en cours d’exécution pour s’assurer que tout fonctionne bien : - -```bash -kubectl get pods -``` - - -```bash -NAME READY STATUS RESTARTS AGE -test-pod 1/1 Running 0 34s - -``` - -10. Supprimons maintenant notre pod : - -```bash -kubectl delete pod test-pod -``` - -