Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:kubernetes:k8s03 [2022/09/15 08:53] – admin | elearning:workbooks:kubernetes:k8s03 [2024/12/15 06:51] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version - **2020.02** | + | Version - **2024.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
Ligne 40: | Ligne 40: | ||
* 6.1 - Présentation | * 6.1 - Présentation | ||
* 6.2 - Mise en Place | * 6.2 - Mise en Place | ||
+ | * LAB #7 - Scheduling | ||
+ | * 7.1 - Présentation | ||
+ | * 7.2 - Mise en Place | ||
+ | * LAB #8 - DaemonSets | ||
+ | * 8.1 - Présentation | ||
+ | * 8.2 - Mise en Place | ||
+ | * LAB #9 - Pods Statiques | ||
+ | * 9.1 - Présentation | ||
+ | * 9.2 - Mise en Place | ||
+ | |||
+ | =====Ressources===== | ||
+ | |||
+ | ====Lab #1==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #2==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #3==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #4==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #5==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #6==== | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | ====Lab #7==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ====Lab #8==== | ||
+ | |||
+ | * https:// | ||
+ | |||
+ | ====Lab #9==== | ||
+ | |||
+ | * https:// | ||
Ligne 146: | Ligne 204: | ||
</ | </ | ||
- | Copiez et collez les chaînes base64 dans le ficheir | + | Copiez et collez les chaînes base64 dans le fichier |
< | < | ||
Ligne 204: | Ligne 262: | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | **Important** : Notez que la variable **$CONFIGMAPVAR** contiendra la valeur de **key1** de la **ConfigMap** et que la variable **$SECRETVAR** | + | **Important** : Notez que la variable **$CONFIGMAPVAR** contiendra la valeur de **key1** de la **ConfigMap** et que la variable **$SECRETVAR** |
</ | </ | ||
Ligne 411: | Ligne 469: | ||
* **Liveness Probes**, | * **Liveness Probes**, | ||
* Par défaut K8s considère un conteneur HS uniquement quand le conteneur en question s' | * Par défaut K8s considère un conteneur HS uniquement quand le conteneur en question s' | ||
- | * Liveness probes permettent une configuration plus sophistiquée de mécanisme. | + | * Liveness probes permettent une configuration plus sophistiquée de ce mécanisme. |
* **Startup Probes**, | * **Startup Probes**, | ||
* Similaires aux Liveness Probes, les Startup Probes n' | * Similaires aux Liveness Probes, les Startup Probes n' | ||
* **Readiness Probes**, | * **Readiness Probes**, | ||
- | * Similaires aux Startup Probes car ils n’interviennent | + | * Similaires aux Startup Probes car ils n' |
====3.2 - Liveness Probes==== | ====3.2 - Liveness Probes==== | ||
Ligne 581: | Ligne 639: | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | **Important** : Dans le fichier ci-dessus, si la commande **GET /** s' | + | **Important** : Dans le fichier ci-dessus, si la commande **GET /** s' |
</ | </ | ||
Ligne 604: | Ligne 662: | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | **Important** : Notez que le pod est a un statut de running | + | **Important** : Notez que le pod est a un statut de Running |
</ | </ | ||
Ligne 796: | Ligne 854: | ||
Il est toujours préférable de ne mettre qu'un seul conteneur dans un pod. L' | Il est toujours préférable de ne mettre qu'un seul conteneur dans un pod. L' | ||
- | Cette intéraction | + | Cette interaction |
* le même espace réseau, | * le même espace réseau, | ||
Ligne 975: | Ligne 1033: | ||
</ | </ | ||
- | --- | + | =====LAB #7 - Scheduling===== |
- | Copyright © 2022 Hugh Norris | + | |
+ | ====7.1 | ||
+ | |||
+ | **Scheduling** est le processus d' | ||
+ | |||
+ | Le Scheduler prend sa décision en fonction d'un un contrôle : | ||
+ | |||
+ | * des ressources disponibles sur les neouds en fonction des **Resource Resquests**, | ||
+ | * des configurations des **nodeSelectors** qui utilisent des **Node Labels**, | ||
+ | * des instructions de type **nodeName** qui forcent le choix d'un noeud par rapport à un autre. | ||
+ | |||
+ | ====7.2 | ||
+ | |||
+ | Commencez par visualiser les noeuds du cluster : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME STATUS | ||
+ | kubemaster.ittraining.loc | ||
+ | kubenode1.ittraining.loc | ||
+ | kubenode2.ittraining.loc | ||
+ | </ | ||
+ | |||
+ | ===nodeSelector==== | ||
+ | |||
+ | Attribuez l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | node/ | ||
+ | </ | ||
+ | |||
+ | Créez maintenant le fichier **nodeselector.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: nodeselector | ||
+ | spec: | ||
+ | nodeSelector: | ||
+ | mylabel: " | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez l' | ||
+ | </ | ||
+ | |||
+ | Créez le pod **nodeselector** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod/ | ||
+ | </ | ||
+ | |||
+ | Constatez l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME | ||
+ | nodeselector | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le pod nodeselector a été schedulé sur le noeud **kubenode1**. | ||
+ | </ | ||
+ | |||
+ | ===nodeName=== | ||
+ | |||
+ | Créez maintenant le fichier **nodename.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: nodename | ||
+ | spec: | ||
+ | nodeName: kubenode2.ittraining.loc | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le pod va être schedulé sur **kubenode2.ittraining.loc** grâce à l' | ||
+ | </ | ||
+ | |||
+ | Créez le pod **nodename** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod/ | ||
+ | </ | ||
+ | |||
+ | Constatez l' | ||
+ | |||
+ | < | ||
+ | pod/ | ||
+ | root@kubemaster: | ||
+ | NAME | ||
+ | nodename | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le pod a été schedulé sur **kubenode2.ittraining.loc** grâce à l' | ||
+ | </ | ||
+ | |||
+ | =====LAB #8 - DaemonSets===== | ||
+ | |||
+ | ====8.1 - Présentation==== | ||
+ | |||
+ | Un DaemonSet : | ||
+ | |||
+ | * crée une copie d'un pod sur tous les noeuds disponibles, | ||
+ | * crée une copie d'un pod sur tout nouveau noeud ajouté au cluster, | ||
+ | * respecte les contraintes de Node Labels. | ||
+ | |||
+ | ====8.2 - Mise en Place==== | ||
+ | |||
+ | Commencez par nettoyer le cluster : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | pod " | ||
+ | |||
+ | root@kubemaster: | ||
+ | deployment.apps " | ||
+ | deployment.apps " | ||
+ | </ | ||
+ | |||
+ | Créez ensuite le fichier **daemonset.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: apps/v1 | ||
+ | kind: DaemonSet | ||
+ | metadata: | ||
+ | name: mydaemonset | ||
+ | spec: | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: mydaemonset | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: mydaemonset | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx: | ||
+ | </ | ||
+ | |||
+ | Créez le DaemonSet **mydaemonset** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | daemonset.apps/ | ||
+ | </ | ||
+ | |||
+ | Constatez le statut du **DaemonSet** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME DESIRED | ||
+ | mydaemonset | ||
+ | </ | ||
+ | |||
+ | Constatez maintenant qu'il a un pod sur chaque noeud : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME READY | ||
+ | mydaemonset-hmdhp | ||
+ | mydaemonset-kmf4z | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez qu'il n'y ait pas de pod sur **kubemaster**. En effet, le kubemaster a le drapeau **no taint** fixé qui empêche la création de pods sur lui. | ||
+ | </ | ||
+ | |||
+ | =====LAB #9 - Pods Statiques===== | ||
+ | |||
+ | ====9.1 - Présentation==== | ||
+ | |||
+ | Un Static Pod (//Pod Statique//) est : | ||
+ | |||
+ | * un pod qui est contrôlé par le **kubelet** sur le noeud concerné au lieu d' | ||
+ | * ce type de pod peut être créé même s'il n y'ait pas de Control Plane, | ||
+ | * si le Control Plane existe, un **Mirror Pod** (//Pod Miroir//) est créé dans le Control Plane pour représenter le pod statique afin de faciliter la consultation son statut. Par contre, le pod ne peut ni être changé, ni être géré à partir du Control Plane, | ||
+ | * un pod créé en utilisant un fichier yaml situé dans un chemin **spécifique** sur le noeud concerné, | ||
+ | * pour un cluster installé avec **kubeadm**, | ||
+ | |||
+ | ====9.2 - Mise en Place==== | ||
+ | |||
+ | Connectez-vous à kubenode1 et devenez l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | trainee@192.168.56.3' | ||
+ | Linux kubenode1.ittraining.loc 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64 | ||
+ | |||
+ | The programs included with the Debian GNU/Linux system are free software; | ||
+ | the exact distribution terms for each program are described in the | ||
+ | individual files in / | ||
+ | |||
+ | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
+ | permitted by applicable law. | ||
+ | Last login: Sun Sep 4 13:01:18 2022 from 192.168.56.2 | ||
+ | trainee@kubenode1: | ||
+ | Mot de passe : fenestros | ||
+ | root@kubenode1: | ||
+ | </ | ||
+ | |||
+ | Créez le fichier **/ | ||
+ | |||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Créez le pod **mystaticpod** : | ||
+ | |||
+ | < | ||
+ | root@kubenode1: | ||
+ | root@kubenode1: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: mystaticpod | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx: | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que kubelet va voir que le fichier a été créé et ensuite pouruivra avec la création du pod. | ||
+ | </ | ||
+ | |||
+ | Re-démarrez le service **kubelet** pour démarrer le pod statique **immédiatement** sans attendre : | ||
+ | |||
+ | < | ||
+ | root@kubenode1: | ||
+ | </ | ||
+ | |||
+ | Retournez au **kubemaster** et constatez la présence d'un pod miroir : | ||
+ | |||
+ | < | ||
+ | root@kubenode1: | ||
+ | déconnexion | ||
+ | trainee@kubenode1: | ||
+ | déconnexion | ||
+ | Connection to 192.168.56.3 closed. | ||
+ | |||
+ | root@kubemaster: | ||
+ | NAME | ||
+ | mydaemonset-hmdhp | ||
+ | mydaemonset-kmf4z | ||
+ | mystaticpod-kubenode1.ittraining.loc | ||
+ | </ | ||
+ | |||
+ | Supprimez maintenant le pod statique : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod " | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que la suppression semble avoir réussi. | ||
+ | </ | ||
+ | |||
+ | Constatez les pods en cours d' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME | ||
+ | mydaemonset-hmdhp | ||
+ | mydaemonset-kmf4z | ||
+ | mystaticpod-kubenode1.ittraining.loc | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le pod **mystaticpod-kubenode1.ittraining.loc** est revenu. En effet, la suppression précédente n'a supprimé que le miroir qui a ensuite ête regénéré. | ||
+ | </ | ||
+ | |||
+ | Pour supprimer le pod statique, connectez-vous à **kubenode1** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | trainee@kubenode1' | ||
+ | Linux kubenode1.ittraining.loc 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64 | ||
+ | |||
+ | The programs included with the Debian GNU/Linux system are free software; | ||
+ | the exact distribution terms for each program are described in the | ||
+ | individual files in / | ||
+ | |||
+ | Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent | ||
+ | permitted by applicable law. | ||
+ | Last login: Thu Sep 15 17:51:03 2022 from 192.168.56.2 | ||
+ | |||
+ | trainee@kubenode1: | ||
+ | Mot de passe : fenestros | ||
+ | |||
+ | root@kubenode1: | ||
+ | |||
+ | root@kubenode1: | ||
+ | |||
+ | root@kubenode1: | ||
+ | déconnexion | ||
+ | |||
+ | trainee@kubenode1: | ||
+ | déconnexion | ||
+ | Connection to kubenode1 closed. | ||
+ | |||
+ | root@kubemaster: | ||
+ | </ | ||
+ | |||
+ | ----- | ||
+ | |||
+ | Copyright © 2024 Hugh Norris | ||