add french translation for task 'Expose Pod Information to Containers Through Files'

pull/40092/head
k0rventen 2023-03-17 15:11:27 +01:00
parent e1f17cdbd9
commit 5f449a695a
3 changed files with 311 additions and 0 deletions

View File

@ -0,0 +1,216 @@
---
title: Exposer les informations d'un Pod à ses containers à travers des fichiers
content_type: task
weight: 40
---
<!-- overview -->
Cette page montre comment un Pod peut utiliser un
[volume en `downwardAPI`](/docs/concepts/storage/volumes/#downwardapi),
pour exposer des informations sur lui-même aux containers executés dans ce Pod.
Vous pouvez utiliser un volume `downwardAPI` pour exposer des champs
de configuration du Pod, de ses containers ou les deux.
Dans Kubernetes, il y a deux façons distinctes d'exposer les champs de
configuration de Pod et de container à l'intérieur d'un container:
* Via les [variables d'environnement](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/)
* Via un volume monté, comme expliqué dans cette tâche
Ensemble, ces deux façons d'exposer des informations du Pod et du container sont appelées la _downward API_.
## {{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}}
<!-- steps -->
## Stocker des champs d'un Pod
Dans cette partie de l'exercice, vous allez créer un Pod qui a un container,
et vous allez projeter les champs d'informations du Pod à l'intérieur du
container via des fichiers dans le container.
Voici le fichier de configuration du Pod:
{{< codenew file="pods/inject/dapi-volume.yaml" >}}
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`.
Dans la liste `items` sous la définition `downwardAPI`, on peut voir que
chaque élément de la liste définit un fichier du volume Downward API.
Le premier élément spécifie que le champ `metadata.labels` doit être exposé dans un fichier appelé `labels`.
Le second élement spécifie que les champs `annotations` du Pod doivent
être stockés dans un fichier appelé `annotations`.
{{< note >}}
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.
{{< /note >}}
Créez le Pod:
```shell
kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume.yaml
```
Vérifiez que le container dans le Pod fonctionne:
```shell
kubectl get pods
```
Affichez les logs du container:
```shell
kubectl logs kubernetes-downwardapi-volume-example
```
Le résultat doit afficher le contenu des fichiers `labels` et `annotations`:
```
cluster="test-cluster1"
rack="rack-22"
zone="us-est-coast"
build="two"
builder="john-doe"
```
Exécutez un shell à l'intérieur du container de votre Pod:
```shell
kubectl exec -it kubernetes-downwardapi-volume-example -- sh
```
Dans ce shell, affichez le contenu du ficher `labels`:
```shell
/# cat /etc/podinfo/labels
```
Le résultat doit montrer que tous les labels du Pod ont
été écrits dans le fichier `labels`:
```shell
cluster="test-cluster1"
rack="rack-22"
zone="us-est-coast"
```
Il en va de même pour le fichier `annotations`:
```shell
/# cat /etc/podinfo/annotations
```
Listez les fichiers présents dans le dossier `/etc/podinfo`:
```shell
/# ls -laR /etc/podinfo
```
Dans le résultat, vous pouvez voir que les fichiers `labels` et `annotations`
sont dans un sous-dossier temporaire.
Dans cet exemple, `..2982_06_02_21_47_53.299460680`. Dans le dossier
`/etc/podinfo`, le dossier `..data` est un lien symbolique au dossier temporaire.
De plus, dans le dossier `/etc/podinfo`, les fichiers `labels` et `annotations`
sont eux aussi des liens symboliques.
```
drwxr-xr-x ... Feb 6 21:47 ..2982_06_02_21_47_53.299460680
lrwxrwxrwx ... Feb 6 21:47 ..data -> ..2982_06_02_21_47_53.299460680
lrwxrwxrwx ... Feb 6 21:47 annotations -> ..data/annotations
lrwxrwxrwx ... Feb 6 21:47 labels -> ..data/labels
/etc/..2982_06_02_21_47_53.299460680:
total 8
-rw-r--r-- ... Feb 6 21:47 annotations
-rw-r--r-- ... Feb 6 21:47 labels
```
L'utilisation de liens symboliques permet une mise à jour atomique des
données. Les mises à jour sont écrites dans un nouveau dossier temporaire,
puis les liens symboliques sont mis à jour avec [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html).
{{< note >}}
Un container utilisant la Downward API via un volume monté dans un
[subPath](/docs/concepts/storage/volumes/#using-subpath) ne recevra pas de mise à jour de la Downward API.
{{< /note >}}
Quittez la session shell:
```shell
/# exit
```
## Stocker des champs d'un container
Dans l'exercice précedent, vous avez rendu accessible des champs d'un Pod via la
Downward API.
Dans l'exercice suivant, vous allez faire passer de la même manière des champs
qui appartiennent au
[container](/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container), plutôt qu'au Pod.
Voici un fichier de configuration pour un Pod qui n'a qu'un seul container:
{{< codenew file="pods/inject/dapi-volume-resources.yaml" >}}
Dans cette configuration, on peut voir que le Pod a un volume de type
[`downwardAPI`](/docs/concepts/storage/volumes/#downwardapi),
et que le container monte ce volume sur le chemin `/etc/podinfo`.
Dans la liste `items` sous la définition `downwardAPI`, on peut voir que
chaque élément de la liste définit un fichier du volume Downward API.
Le premier élément spécifie que dans le container nommé `client-container`,
la valeur du champ `limits.cpu` dans un format spécifié par `1m` sera exposé dans
un fichier appelé `cpu_limit`. Le champ `divisor` est optionnel et a une valeur
par défaut de `1`. Un diviseur de 1 spécifie l'unité `coeur` pour la ressource
`cpu`, et l'unité `bytes` pour la ressource `memory`.
Créez le Pod:
```shell
kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume-resources.yaml
```
Exécutez un shell à l'intérieur du container de votre Pod:
```shell
kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh
```
Dans le shell, affichez le contenu du fichier `cpu_limit`:
```shell
# À exécuter à l'intérieur du container
cat /etc/podinfo/cpu_limit
```
Vous pouvez utiliser des commandes similaires pour afficher les fichiers
`cpu_request`, `mem_limit` et `mem_request`.
<!-- discussion -->
## Projection de champs sur des chemins spécifiques et droits d'accès
Vous pouvez projecter des champs sur des chemins spécifiques,
et assigner des permissions pour chacun de ces chemins.
Pour plus d'informations, regardez la documentation des
[Secrets](/docs/concepts/configuration/secret/).
## {{% heading "whatsnext" %}}
* Lire la [`documentation de référence des Pod`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec)
qui inclut la documentation pour les containers.
* Lire la liste des [champs de configuration disponibles](/docs/concepts/workloads/pods/downward-api/#available-fields)
qui peuvent être exposés via la downward API.
* Lire la documentation de l'API [`Volumes`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)
qui définit les Volumes accessibles par des containers.
* Lire la documentation de l'API [`DownwardAPIVolumeSource`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumesource-v1-core)
qui définit un volume contenant des informations de la Downward API.
* Lire la documentation de l'API [`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)
qui définit les champs disponibles pour un Volume Downward API.
* Lire la documentation de l'API [`ResourceFieldSelector`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcefieldselector-v1-core)
qui spécifie les ressources des containers et leur format.

View File

@ -0,0 +1,57 @@
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-downwardapi-volume-example-2
spec:
containers:
- name: client-container
image: registry.k8s.io/busybox:1.24
command: ["sh", "-c"]
args:
- while true; do
echo -en '\n';
if [[ -e /etc/podinfo/cpu_limit ]]; then
echo -en '\n'; cat /etc/podinfo/cpu_limit; fi;
if [[ -e /etc/podinfo/cpu_request ]]; then
echo -en '\n'; cat /etc/podinfo/cpu_request; fi;
if [[ -e /etc/podinfo/mem_limit ]]; then
echo -en '\n'; cat /etc/podinfo/mem_limit; fi;
if [[ -e /etc/podinfo/mem_request ]]; then
echo -en '\n'; cat /etc/podinfo/mem_request; fi;
sleep 5;
done;
resources:
requests:
memory: "32Mi"
cpu: "125m"
limits:
memory: "64Mi"
cpu: "250m"
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
downwardAPI:
items:
- path: "cpu_limit"
resourceFieldRef:
containerName: client-container
resource: limits.cpu
divisor: 1m
- path: "cpu_request"
resourceFieldRef:
containerName: client-container
resource: requests.cpu
divisor: 1m
- path: "mem_limit"
resourceFieldRef:
containerName: client-container
resource: limits.memory
divisor: 1Mi
- path: "mem_request"
resourceFieldRef:
containerName: client-container
resource: requests.memory
divisor: 1Mi

View File

@ -0,0 +1,38 @@
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-downwardapi-volume-example
labels:
zone: us-est-coast
cluster: test-cluster1
rack: rack-22
annotations:
build: two
builder: john-doe
spec:
containers:
- name: client-container
image: registry.k8s.io/busybox
command: ["sh", "-c"]
args:
- while true; do
if [[ -e /etc/podinfo/labels ]]; then
echo -en '\n\n'; cat /etc/podinfo/labels; fi;
if [[ -e /etc/podinfo/annotations ]]; then
echo -en '\n\n'; cat /etc/podinfo/annotations; fi;
sleep 5;
done;
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "annotations"
fieldRef:
fieldPath: metadata.annotations