Skip to content

Commit 3f4f4dd

Browse files
authored
Merge pull request #40092 from k0rventen/fr-task-downwardapi-files
[fr] add french translation for task inject-data-application/downward-api-volume-expose-pod-information.md
2 parents 76756d0 + 8ebca29 commit 3f4f4dd

File tree

3 files changed

+311
-0
lines changed

3 files changed

+311
-0
lines changed
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
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.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: kubernetes-downwardapi-volume-example-2
5+
spec:
6+
containers:
7+
- name: client-container
8+
image: registry.k8s.io/busybox:1.24
9+
command: ["sh", "-c"]
10+
args:
11+
- while true; do
12+
echo -en '\n';
13+
if [[ -e /etc/podinfo/cpu_limit ]]; then
14+
echo -en '\n'; cat /etc/podinfo/cpu_limit; fi;
15+
if [[ -e /etc/podinfo/cpu_request ]]; then
16+
echo -en '\n'; cat /etc/podinfo/cpu_request; fi;
17+
if [[ -e /etc/podinfo/mem_limit ]]; then
18+
echo -en '\n'; cat /etc/podinfo/mem_limit; fi;
19+
if [[ -e /etc/podinfo/mem_request ]]; then
20+
echo -en '\n'; cat /etc/podinfo/mem_request; fi;
21+
sleep 5;
22+
done;
23+
resources:
24+
requests:
25+
memory: "32Mi"
26+
cpu: "125m"
27+
limits:
28+
memory: "64Mi"
29+
cpu: "250m"
30+
volumeMounts:
31+
- name: podinfo
32+
mountPath: /etc/podinfo
33+
volumes:
34+
- name: podinfo
35+
downwardAPI:
36+
items:
37+
- path: "cpu_limit"
38+
resourceFieldRef:
39+
containerName: client-container
40+
resource: limits.cpu
41+
divisor: 1m
42+
- path: "cpu_request"
43+
resourceFieldRef:
44+
containerName: client-container
45+
resource: requests.cpu
46+
divisor: 1m
47+
- path: "mem_limit"
48+
resourceFieldRef:
49+
containerName: client-container
50+
resource: limits.memory
51+
divisor: 1Mi
52+
- path: "mem_request"
53+
resourceFieldRef:
54+
containerName: client-container
55+
resource: requests.memory
56+
divisor: 1Mi
57+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: kubernetes-downwardapi-volume-example
5+
labels:
6+
zone: us-est-coast
7+
cluster: test-cluster1
8+
rack: rack-22
9+
annotations:
10+
build: two
11+
builder: john-doe
12+
spec:
13+
containers:
14+
- name: client-container
15+
image: registry.k8s.io/busybox
16+
command: ["sh", "-c"]
17+
args:
18+
- while true; do
19+
if [[ -e /etc/podinfo/labels ]]; then
20+
echo -en '\n\n'; cat /etc/podinfo/labels; fi;
21+
if [[ -e /etc/podinfo/annotations ]]; then
22+
echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
23+
sleep 5;
24+
done;
25+
volumeMounts:
26+
- name: podinfo
27+
mountPath: /etc/podinfo
28+
volumes:
29+
- name: podinfo
30+
downwardAPI:
31+
items:
32+
- path: "labels"
33+
fieldRef:
34+
fieldPath: metadata.labels
35+
- path: "annotations"
36+
fieldRef:
37+
fieldPath: metadata.annotations
38+

0 commit comments

Comments
 (0)