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/12 15:54] – admin | elearning:workbooks:kubernetes:k8s03 [2024/12/15 06:51] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~PDF: | ~~PDF: | ||
- | Version - **2020.01** | + | Version - **2024.01** |
Dernière mise-à-jour : ~~LASTMOD~~ | Dernière mise-à-jour : ~~LASTMOD~~ | ||
Ligne 12: | Ligne 12: | ||
* Contenu du Module | * Contenu du Module | ||
* LAB #1 - Application Configuration | * LAB #1 - Application Configuration | ||
- | * 1.1 - Création d'une ConfigMap | + | * 1.1 - Présentation |
- | * 1.2 - Création d'un Secret | + | * 1.2 - Création d'une ConfigMap |
- | * 1.3 - Utilisation de ConfigMaps et de Secrets | + | * 1.3 - Création d'un Secret |
+ | * 1.4 - Utilisation de ConfigMaps et de Secrets | ||
* Utilisation de Variables d' | * Utilisation de Variables d' | ||
* Utilisation de Volumes de Configuration | * Utilisation de Volumes de Configuration | ||
* LAB #2 - Gestion des Ressources des Conteneurs | * LAB #2 - Gestion des Ressources des Conteneurs | ||
- | * 2.1 - Resource Requests | + | * 2.1 - Présentation |
- | * 2.2 - Resource Limits | + | * 2.2 - Resource Requests |
+ | * 2.3 - Resource Limits | ||
* LAB #3 - Supervision des Conteneurs | * LAB #3 - Supervision des Conteneurs | ||
- | * 3.1 - Liveness Probes | + | * 3.1 - Présentation |
+ | * 3.2 - Liveness Probes | ||
* Le Probe exec | * Le Probe exec | ||
* Le Probe httpGet | * Le Probe httpGet | ||
- | * 3.2 - Startup Probes | + | * 3.3 - Startup Probes |
- | * 3.3 - Readiness Probes | + | * 3.4 - Readiness Probes |
* LAB #4 - Gestion des Politiques de Redémarrage | * LAB #4 - Gestion des Politiques de Redémarrage | ||
- | * 4.1 - Always | + | * 4.1 - Présentation |
- | * 4.2 - OnFailure | + | * 4.2 - Always |
- | * 4.3 - Never | + | * 4.3 - OnFailure |
+ | * 4.4 - Never | ||
* LAB #5 - Création de Pods Multi-conteneurs | * LAB #5 - Création de Pods Multi-conteneurs | ||
+ | * 5.1 - Présentation | ||
+ | * 5.2 - Mise en Place | ||
+ | * LAB #6 - Conteneurs Init | ||
+ | * 6.1 - Présentation | ||
+ | * 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:// | ||
=====LAB #1 - Application Configuration===== | =====LAB #1 - Application Configuration===== | ||
+ | |||
+ | ====1.1 - Présentation==== | ||
La gestion de la configuration d' | La gestion de la configuration d' | ||
Ligne 47: | Ligne 116: | ||
* Volumes de configuration. | * Volumes de configuration. | ||
- | ====1.1 - Création d'une ConfigMap==== | + | ====1.2 - Création d'une ConfigMap==== |
Pour commencer, créez le fichier **myconfigmap.yaml** : | Pour commencer, créez le fichier **myconfigmap.yaml** : | ||
Ligne 67: | 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 104: | Ligne 173: | ||
</ | </ | ||
- | ====1.2 - Création d'un Secret==== | + | ====1.3 - Création d'un Secret==== |
Créez maintenant le fichier **mysecret.yaml** : | Créez maintenant le fichier **mysecret.yaml** : | ||
Ligne 135: | Ligne 204: | ||
</ | </ | ||
- | Copiez et collez les chaînes base64 dans le ficheir | + | Copiez et collez les chaînes base64 dans le fichier |
< | < | ||
Ligne 161: | Ligne 230: | ||
</ | </ | ||
- | ====1.3 - Utilisation de ConfigMaps et de Secret==== | + | ====1.4 - Utilisation de ConfigMaps et de Secret==== |
===Utilisation des Variables d' | ===Utilisation des Variables d' | ||
Ligne 288: | Ligne 357: | ||
=====LAB #2 - Gestion des Ressources des Conteneurs===== | =====LAB #2 - Gestion des Ressources des Conteneurs===== | ||
+ | |||
+ | ====2.1 - Présentation==== | ||
Deux aspects importants de la gestion des ressources des conteneurs sont : | Deux aspects importants de la gestion des ressources des conteneurs sont : | ||
Ligne 298: | Ligne 369: | ||
Pour les deux types, les demandes et les limites de la mémoire sont généralement exprimées en **Mi**, tandis que les les demandes et les limites du CPU sont exprimées en 1/1000 d'un processeur. Par exemple le chiffre 250m représente 250/1000 d'un CPU ou 1/4. | Pour les deux types, les demandes et les limites de la mémoire sont généralement exprimées en **Mi**, tandis que les les demandes et les limites du CPU sont exprimées en 1/1000 d'un processeur. Par exemple le chiffre 250m représente 250/1000 d'un CPU ou 1/4. | ||
- | ====2.1 - Resource Requests==== | + | ====2.2 - Resource Requests==== |
Créez le fichier **bigrequestpod.yaml** : | Créez le fichier **bigrequestpod.yaml** : | ||
Ligne 339: | Ligne 410: | ||
</ | </ | ||
- | ====2.2 - Resource Limits==== | + | ====2.3 - Resource Limits==== |
Créez le fichier **resourcepod.yaml** : | Créez le fichier **resourcepod.yaml** : | ||
Ligne 389: | Ligne 460: | ||
=====LAB #3 - Supervision des Conteneurs===== | =====LAB #3 - Supervision des Conteneurs===== | ||
+ | |||
+ | ====3.1 - Présentation=== | ||
La supervision des conteneurs concerne la surveillance de la santé des conteneurs afin d' | La supervision des conteneurs concerne la surveillance de la santé des conteneurs afin d' | ||
Ligne 396: | 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 402: | Ligne 475: | ||
* Similaires aux Startup Probes car ils n' | * Similaires aux Startup Probes car ils n' | ||
- | ====3.1 - Liveness Probes==== | + | ====3.2 - Liveness Probes==== |
===Le Probe exec=== | ===Le Probe exec=== | ||
Ligne 496: | Ligne 569: | ||
</ | </ | ||
- | ====3.2 - Startup Probes==== | + | ====3.3 - Startup Probes==== |
Créez le fichier **startuppod.yaml** : | Créez le fichier **startuppod.yaml** : | ||
Ligne 542: | Ligne 615: | ||
</ | </ | ||
- | ====3.3 - Readiness Probes==== | + | ====3.4 - Readiness Probes==== |
Créez le fichier **readinesspod.yaml** : | Créez le fichier **readinesspod.yaml** : | ||
Ligne 589: | 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 |
</ | </ | ||
=====LAB #4 - Gestion des Politiques de Redémarrage===== | =====LAB #4 - Gestion des Politiques de Redémarrage===== | ||
+ | |||
+ | ====4.1 - Présentation==== | ||
K8s peut redémarrer des conteneurs en cas de problèmes. Il y a trois politiques de redémarrage : | K8s peut redémarrer des conteneurs en cas de problèmes. Il y a trois politiques de redémarrage : | ||
Ligne 604: | Ligne 679: | ||
* Never est l' | * Never est l' | ||
- | ====4.1 - Always==== | + | ====4.2 - Always==== |
Créez le fichier **alwayspod.yaml** : | Créez le fichier **alwayspod.yaml** : | ||
Ligne 642: | Ligne 717: | ||
</ | </ | ||
- | ====4.2 - OnFailure==== | + | ====4.3 - OnFailure==== |
Créez le fichier **onfailure.yaml** : | Créez le fichier **onfailure.yaml** : | ||
Ligne 731: | Ligne 806: | ||
</ | </ | ||
- | ====4.3 - Never==== | + | ====4.4 - Never==== |
Créez le fichier **never.yaml** : | Créez le fichier **never.yaml** : | ||
Ligne 773: | Ligne 848: | ||
</ | </ | ||
- | Copyright © 2022 Hugh Norris | + | =====LAB #5 - Création de Pods Multi-conteneurs===== |
+ | |||
+ | ====5.1 - Présentation==== | ||
+ | |||
+ | Il est toujours préférable de ne mettre qu'un seul conteneur dans un pod. L' | ||
+ | |||
+ | Cette interaction prend la forme de partager : | ||
+ | |||
+ | * le même espace réseau, | ||
+ | * les conteneurs peuvent se communiquer sur tous les ports, même si les ports ne sont pas exposés au cluster, | ||
+ | * le même espace de stockage, | ||
+ | * les conteneurs peuvent partager les mêmes volumes. | ||
+ | |||
+ | ====5.2 - Mise en Place==== | ||
+ | |||
+ | Commencez par créer le fichier **multicontainerpod.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: multicontainerpod | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx | ||
+ | - name: redis | ||
+ | image: redis | ||
+ | - name: couchbase | ||
+ | image: couchbase | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le fichier créera trois conteneurs - **nginx**, **redis** et **couchbase**. | ||
+ | </ | ||
+ | |||
+ | Créez ensuite le pod : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod/ | ||
+ | </ | ||
+ | |||
+ | Consultez l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME READY | ||
+ | multicontainerpod | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez qu'il y a actuellement 0 de 3 pods dans un état de READY. | ||
+ | </ | ||
+ | |||
+ | Attendez quelques minutes et constatez de nouveau l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME READY | ||
+ | multicontainerpod | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez qu'il y a actuellement 3 de 3 pods dans un état de READY. | ||
+ | </ | ||
+ | |||
+ | Créez maintenant le fichier **helper.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: helperpod | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: busybox1 | ||
+ | image: busybox | ||
+ | command: [' | ||
+ | volumeMounts: | ||
+ | - name: sharedvol | ||
+ | mountPath: /output | ||
+ | - name: helper | ||
+ | image: busybox | ||
+ | command: [' | ||
+ | volumeMounts: | ||
+ | - name: sharedvol | ||
+ | mountPath: /input | ||
+ | volumes: | ||
+ | - name: sharedvol | ||
+ | emptyDir: {} | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que ce fichier créera un pod contenant deux conteneurs - **busybox1** et **helper**. Chaque conteneur partage un volume identique qui s' | ||
+ | </ | ||
+ | |||
+ | Créez le pod **helper** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod/ | ||
+ | </ | ||
+ | |||
+ | Consultez les logs du conteneur **helper** dans le pod **helperpod** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | logs data | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le conteneur **busybox1** a écrit la chaîne **logs data** dans le fichier **/ | ||
+ | </ | ||
+ | |||
+ | =====LAB #6 - Conteneurs Init==== | ||
+ | |||
+ | ====6.1 - Présentation==== | ||
+ | |||
+ | Un Conteneur Init est un conteneur qui ne s' | ||
+ | |||
+ | * isoler, d'une manière sécurisée, | ||
+ | * injecter des données dans un volume partagé, | ||
+ | * faire patienter un pod en attendant que d' | ||
+ | |||
+ | ====6.2 - Mise en Place==== | ||
+ | |||
+ | Commencez par créer le fichier **initpod.yaml** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | root@kubemaster: | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: initpod | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx: | ||
+ | initContainers: | ||
+ | - name: delay | ||
+ | image: busybox | ||
+ | command: [' | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le conteneur **delay** va faire patienter la création du conteneur **nginx** pendant 30 secondes. | ||
+ | </ | ||
+ | |||
+ | Créez le pod **initpod** : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | pod/initpod created | ||
+ | </ | ||
+ | |||
+ | Consultez l' | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME READY | ||
+ | initpod | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le **STATUS** du pod est **Init: | ||
+ | </ | ||
+ | |||
+ | Patientez au moins 30 secondes puis exécutez la dernière commande de nouveau : | ||
+ | |||
+ | < | ||
+ | root@kubemaster: | ||
+ | NAME READY | ||
+ | initpod | ||
+ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** : Notez que le **STATUS** du pod est **Running**. | ||
+ | </ | ||
+ | |||
+ | =====LAB #7 - Scheduling===== | ||
+ | |||
+ | ====7.1 - Présentation==== | ||
+ | |||
+ | **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 - Mise en Place==== | ||
+ | |||
+ | 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 | ||