|
| 1 | +--- |
| 2 | +title: Exposer les informations d'un Pod à ses containers à travers des fichiers |
| 3 | +content_type: task |
| 4 | +weight: 40 |
| 5 | +--- |
| 6 | + |
| 7 | +<!-- overview --> |
| 8 | + |
| 9 | +Cette page montre comment un Pod peut utiliser un |
| 10 | +[volume en `downwardAPI`](/docs/concepts/storage/volumes/#downwardapi), |
| 11 | +pour exposer des informations sur lui-même aux containers executés dans ce Pod. |
| 12 | +Vous pouvez utiliser un volume `downwardAPI` pour exposer des champs |
| 13 | +de configuration du Pod, de ses containers ou les deux. |
| 14 | + |
| 15 | +Dans Kubernetes, il y a deux façons distinctes d'exposer les champs de |
| 16 | +configuration de Pod et de container à l'intérieur d'un container: |
| 17 | + |
| 18 | +* Via les [variables d'environnement](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/) |
| 19 | +* Via un volume monté, comme expliqué dans cette tâche |
| 20 | + |
| 21 | +Ensemble, ces deux façons d'exposer des informations du Pod et du container sont appelées la _downward API_. |
| 22 | + |
| 23 | + |
| 24 | +## {{% heading "prerequisites" %}} |
| 25 | + |
| 26 | +{{< include "task-tutorial-prereqs.md" >}} |
| 27 | + |
| 28 | + |
| 29 | +<!-- steps --> |
| 30 | + |
| 31 | +## Stocker des champs d'un Pod |
| 32 | + |
| 33 | +Dans cette partie de l'exercice, vous allez créer un Pod qui a un container, |
| 34 | +et vous allez projeter les champs d'informations du Pod à l'intérieur du |
| 35 | +container via des fichiers dans le container. |
| 36 | +Voici le fichier de configuration du Pod: |
| 37 | + |
| 38 | +{{< codenew file="pods/inject/dapi-volume.yaml" >}} |
| 39 | + |
| 40 | +Dans la configuration, on peut voir que le Pod a un volume de type `downward API`, et que le container monte ce volume sur le chemin `/etc/podinfo`. |
| 41 | + |
| 42 | +Dans la liste `items` sous la définition `downwardAPI`, on peut voir que |
| 43 | +chaque élément de la liste définit un fichier du volume Downward API. |
| 44 | +Le premier élément spécifie que le champ `metadata.labels` doit être exposé dans un fichier appelé `labels`. |
| 45 | +Le second élement spécifie que les champs `annotations` du Pod doivent |
| 46 | +être stockés dans un fichier appelé `annotations`. |
| 47 | + |
| 48 | +{{< note >}} |
| 49 | +Les champs de configuration présents dans cet exemple sont des champs du Pod. Ce ne sont pas les champs du container à l'intérieur du Pod. |
| 50 | +{{< /note >}} |
| 51 | + |
| 52 | +Créez le Pod: |
| 53 | + |
| 54 | +```shell |
| 55 | +kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume.yaml |
| 56 | +``` |
| 57 | + |
| 58 | +Vérifiez que le container dans le Pod fonctionne: |
| 59 | + |
| 60 | +```shell |
| 61 | +kubectl get pods |
| 62 | +``` |
| 63 | + |
| 64 | +Affichez les logs du container: |
| 65 | + |
| 66 | +```shell |
| 67 | +kubectl logs kubernetes-downwardapi-volume-example |
| 68 | +``` |
| 69 | + |
| 70 | +Le résultat doit afficher le contenu des fichiers `labels` et `annotations`: |
| 71 | + |
| 72 | +``` |
| 73 | +cluster="test-cluster1" |
| 74 | +rack="rack-22" |
| 75 | +zone="us-est-coast" |
| 76 | +
|
| 77 | +build="two" |
| 78 | +builder="john-doe" |
| 79 | +``` |
| 80 | + |
| 81 | +Exécutez un shell à l'intérieur du container de votre Pod: |
| 82 | + |
| 83 | +```shell |
| 84 | +kubectl exec -it kubernetes-downwardapi-volume-example -- sh |
| 85 | +``` |
| 86 | + |
| 87 | +Dans ce shell, affichez le contenu du ficher `labels`: |
| 88 | + |
| 89 | +```shell |
| 90 | +/# cat /etc/podinfo/labels |
| 91 | +``` |
| 92 | + |
| 93 | +Le résultat doit montrer que tous les labels du Pod ont |
| 94 | +été écrits dans le fichier `labels`: |
| 95 | + |
| 96 | +```shell |
| 97 | +cluster="test-cluster1" |
| 98 | +rack="rack-22" |
| 99 | +zone="us-est-coast" |
| 100 | +``` |
| 101 | + |
| 102 | +Il en va de même pour le fichier `annotations`: |
| 103 | + |
| 104 | +```shell |
| 105 | +/# cat /etc/podinfo/annotations |
| 106 | +``` |
| 107 | + |
| 108 | +Listez les fichiers présents dans le dossier `/etc/podinfo`: |
| 109 | + |
| 110 | +```shell |
| 111 | +/# ls -laR /etc/podinfo |
| 112 | +``` |
| 113 | + |
| 114 | +Dans le résultat, vous pouvez voir que les fichiers `labels` et `annotations` |
| 115 | +sont dans un sous-dossier temporaire. |
| 116 | +Dans cet exemple, `..2982_06_02_21_47_53.299460680`. Dans le dossier |
| 117 | +`/etc/podinfo`, le dossier `..data` est un lien symbolique au dossier temporaire. |
| 118 | +De plus, dans le dossier `/etc/podinfo`, les fichiers `labels` et `annotations` |
| 119 | +sont eux aussi des liens symboliques. |
| 120 | + |
| 121 | +``` |
| 122 | +drwxr-xr-x ... Feb 6 21:47 ..2982_06_02_21_47_53.299460680 |
| 123 | +lrwxrwxrwx ... Feb 6 21:47 ..data -> ..2982_06_02_21_47_53.299460680 |
| 124 | +lrwxrwxrwx ... Feb 6 21:47 annotations -> ..data/annotations |
| 125 | +lrwxrwxrwx ... Feb 6 21:47 labels -> ..data/labels |
| 126 | +
|
| 127 | +/etc/..2982_06_02_21_47_53.299460680: |
| 128 | +total 8 |
| 129 | +-rw-r--r-- ... Feb 6 21:47 annotations |
| 130 | +-rw-r--r-- ... Feb 6 21:47 labels |
| 131 | +``` |
| 132 | + |
| 133 | +L'utilisation de liens symboliques permet une mise à jour atomique des |
| 134 | +données. Les mises à jour sont écrites dans un nouveau dossier temporaire, |
| 135 | +puis les liens symboliques sont mis à jour avec [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html). |
| 136 | + |
| 137 | +{{< note >}} |
| 138 | +Un container utilisant la Downward API via un volume monté dans un |
| 139 | +[subPath](/docs/concepts/storage/volumes/#using-subpath) ne recevra pas de mise à jour de la Downward API. |
| 140 | +{{< /note >}} |
| 141 | + |
| 142 | +Quittez la session shell: |
| 143 | + |
| 144 | +```shell |
| 145 | +/# exit |
| 146 | +``` |
| 147 | + |
| 148 | +## Stocker des champs d'un container |
| 149 | + |
| 150 | +Dans l'exercice précedent, vous avez rendu accessible des champs d'un Pod via la |
| 151 | +Downward API. |
| 152 | +Dans l'exercice suivant, vous allez faire passer de la même manière des champs |
| 153 | +qui appartiennent au |
| 154 | +[container](/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container), plutôt qu'au Pod. |
| 155 | +Voici un fichier de configuration pour un Pod qui n'a qu'un seul container: |
| 156 | + |
| 157 | +{{< codenew file="pods/inject/dapi-volume-resources.yaml" >}} |
| 158 | + |
| 159 | +Dans cette configuration, on peut voir que le Pod a un volume de type |
| 160 | +[`downwardAPI`](/docs/concepts/storage/volumes/#downwardapi), |
| 161 | +et que le container monte ce volume sur le chemin `/etc/podinfo`. |
| 162 | + |
| 163 | +Dans la liste `items` sous la définition `downwardAPI`, on peut voir que |
| 164 | +chaque élément de la liste définit un fichier du volume Downward API. |
| 165 | + |
| 166 | +Le premier élément spécifie que dans le container nommé `client-container`, |
| 167 | +la valeur du champ `limits.cpu` dans un format spécifié par `1m` sera exposé dans |
| 168 | +un fichier appelé `cpu_limit`. Le champ `divisor` est optionnel et a une valeur |
| 169 | +par défaut de `1`. Un diviseur de 1 spécifie l'unité `coeur` pour la ressource |
| 170 | +`cpu`, et l'unité `bytes` pour la ressource `memory`. |
| 171 | + |
| 172 | +Créez le Pod: |
| 173 | + |
| 174 | +```shell |
| 175 | +kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume-resources.yaml |
| 176 | +``` |
| 177 | + |
| 178 | +Exécutez un shell à l'intérieur du container de votre Pod: |
| 179 | + |
| 180 | +```shell |
| 181 | +kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh |
| 182 | +``` |
| 183 | + |
| 184 | +Dans le shell, affichez le contenu du fichier `cpu_limit`: |
| 185 | + |
| 186 | +```shell |
| 187 | +# À exécuter à l'intérieur du container |
| 188 | +cat /etc/podinfo/cpu_limit |
| 189 | +``` |
| 190 | + |
| 191 | +Vous pouvez utiliser des commandes similaires pour afficher les fichiers |
| 192 | +`cpu_request`, `mem_limit` et `mem_request`. |
| 193 | + |
| 194 | +<!-- discussion --> |
| 195 | + |
| 196 | +## Projection de champs sur des chemins spécifiques et droits d'accès |
| 197 | + |
| 198 | +Vous pouvez projeter des champs sur des chemins spécifiques, |
| 199 | +et assigner des permissions pour chacun de ces chemins. |
| 200 | +Pour plus d'informations, regardez la documentation des |
| 201 | +[Secrets](/docs/concepts/configuration/secret/). |
| 202 | + |
| 203 | +## {{% heading "whatsnext" %}} |
| 204 | + |
| 205 | +* Lire la [`documentation de référence des Pod`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) |
| 206 | + qui inclut la documentation pour les containers. |
| 207 | +* Lire la liste des [champs de configuration disponibles](/docs/concepts/workloads/pods/downward-api/#available-fields) |
| 208 | + qui peuvent être exposés via la downward API. |
| 209 | +* Lire la documentation de l'API [`Volumes`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core) |
| 210 | + qui définit les Volumes accessibles par des containers. |
| 211 | +* Lire la documentation de l'API [`DownwardAPIVolumeSource`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumesource-v1-core) |
| 212 | + qui définit un volume contenant des informations de la Downward API. |
| 213 | +* Lire la documentation de l'API [`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core) |
| 214 | + qui définit les champs disponibles pour un Volume Downward API. |
| 215 | +* Lire la documentation de l'API [`ResourceFieldSelector`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core) |
| 216 | + qui spécifie les ressources des containers et leur format. |
0 commit comments