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:56] – 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 78: | Ligne 136: | ||
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| - | **Important** : Notez que les données sont stockées dans des **Key-values**. La première donnée dans la section **data** est **key1: Hello, world!** tandis que la deuxième, **key2**, est en plusieures | + | **Important** : Notez que les données sont stockées dans des **Key-values**. La première donnée dans la section **data** est **key1: Hello, world!** tandis que la deuxième, **key2**, est en plusieurs |
| </ | </ | ||
| 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 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' | ||
| 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 794: | Ligne 852: | ||
| ====5.1 - Présentation==== | ====5.1 - Présentation==== | ||
| - | 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 | ||