Skip to content

Commit 363c7ad

Browse files
authored
Merge pull request #39290 from k0rventen/dev-1.26-fr
[fr] add translation for task "Configure a Pod to Use a PersistentVolume for Storage"
2 parents e893318 + d1887cb commit 363c7ad

File tree

5 files changed

+319
-0
lines changed

5 files changed

+319
-0
lines changed
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
---
2+
title: Configurer un Pod pour utiliser un stockage de type PersistentVolume
3+
content_type: task
4+
weight: 60
5+
---
6+
7+
<!-- overview -->
8+
9+
Cette page montre comment configurer un Pod afin qu'il utilise un {{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}} comme système de stockage.
10+
11+
Voici un résumé des étapes:
12+
13+
1. En tant qu'administrateur d'un cluster, vous créez un PersistentVolume qui pointe vers un système de stockage physique. Vous n'associez le volume avec aucun Pod pour le moment.
14+
15+
1. En tant que développeur ou utilisateur du cluster, vous créez un PersistentVolumeClaim qui sera automatiquement lié à un PersistentVolume adapté.
16+
17+
1. Vous créez un Pod qui utilise le PersistentVolumeClaim créé précédemment comme stockage.
18+
19+
20+
## {{% heading "prerequisites" %}}
21+
22+
23+
* Vous devez avoir à disposition un cluster qui n'a qu'un seul noeud, et l'utilitaire en ligne de commande
24+
{{< glossary_tooltip text="kubectl" term_id="kubectl" >}} doit être configuré pour communiquer avec votre cluster. Si vous n'avez pas déja de cluster à disposition, vous pouvez en créer un en utilisant [Minikube](https://minikube.sigs.k8s.io/docs/).
25+
26+
* Vous pouvez vous familiariser avec la documentation des
27+
[Persistent Volumes](/docs/concepts/storage/persistent-volumes/).
28+
29+
<!-- steps -->
30+
31+
## Créer un fichier index.html sur votre noeud
32+
33+
Ouvrez une session shell sur le noeud de votre cluster. La facon d'ouvrir
34+
la session va dependre de la configuration de votre cluster. Si vous utilisez Minikube,
35+
vous pouvez ouvrir une session via la commande `minikube ssh`.
36+
37+
Via la session sur ce noeud, créez un dossier `/mnt/data`:
38+
39+
```shell
40+
# En supposant que votre noeud utilise `sudo` pour les accès privilégiés
41+
sudo mkdir /mnt/data
42+
```
43+
44+
Dans le dossier `/mnt/data`, créez un fichier `index.html`:
45+
```shell
46+
# En supposant toujours que votre noeud utilise `sudo` pour les accès privilégiés
47+
sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
48+
```
49+
50+
{{< note >}}
51+
Si votre noeud utilise un utilitaire d'accès privilégié autre que `sudo`, les commandes notées ici devraient fonctionner en remplacant `sudo` par le nom de l'utilitaire.
52+
{{< /note >}}
53+
54+
Testez que le fichier `index.html` existe:
55+
```shell
56+
cat /mnt/data/index.html
57+
```
58+
59+
Le résultat de la commande doit être:
60+
```
61+
Hello from Kubernetes storage
62+
```
63+
64+
Vous pouvez maintenant fermer l'accès shell à votre Noeud.
65+
66+
## Créer un PersistentVolume
67+
68+
Dans cet exercice, vous allez créer un PersistentVolume de type *hostpath*. Kubernetes prend en charge le type hostPath pour le développement et les tests sur un cluster à noeud unique. Un PersistentVolume de type hostPath utilise un fichier ou un dossier sur le noeud pour simuler un stockage réseau.
69+
70+
Dans un cluster de production, vous n'utiliseriez pas le type *hostPath*. Plus communément, un administrateur de cluster
71+
provisionnerait une ressource réseau comme un disque persistant Google Compute Engine,
72+
un partage NFS ou un volume Amazon Elastic Block Store. Les administrateurs de cluster peuvent également
73+
utiliser les [StorageClasses](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#storageclass-v1-storage-k8s-io)
74+
pour paramétrer du
75+
[provisioning dynamique](/docs/concepts/storage/dynamic-provisioning/).
76+
77+
Voici le fichier de configuration pour le PersistentVolume de type hostPath:
78+
{{< codenew file="pods/storage/pv-volume.yaml" >}}
79+
80+
Le fichier de configuration spécifie que le chemin du volume sur le noeud est `/mnt/data`. Il spécifie aussi une taille de 10 gibibytes, ainsi qu'un mode d'accès de type `ReadWriteOnce`, impliquant que le volume ne peut être monté en lecture et écriture que par un seul noeud. Le fichier définit un [nom de StorageClass](/docs/concepts/storage/persistent-volumes/#class) à `manual`, ce qui sera utilisé pour attacher un PersistentVolumeClaim à ce PersistentVolume
81+
82+
Créez le PersistentVolume:
83+
84+
```shell
85+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
86+
```
87+
88+
Affichez les informations du PersistentVolume:
89+
90+
```shell
91+
kubectl get pv task-pv-volume
92+
```
93+
94+
Le résultat affiche que le PersitentVolume a un `STATUS` de `Available`.
95+
Cela signifie qu'il n'a pas encore été attaché à un PersistentVolumeClaim.
96+
97+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
98+
task-pv-volume 10Gi RWO Retain Available manual 4s
99+
100+
## Créer un PersistentVolumeClaim
101+
102+
La prochaine étape est de créer un PersistentVolumeClaim (demande de stockage). Les Pods utilisent les PersistentVolumeClaims pour demander un accès à du stockage physique.
103+
Dans cet exercice, vous créez un PersistentVolumeClaim qui demande un volume d'au moins 3 GB, et qui peut être monté en lecture et écriture sur au moins un noeud.
104+
105+
Voici le fichier de configuration du PersistentVolumeClaim:
106+
{{< codenew file="pods/storage/pv-claim.yaml" >}}
107+
108+
Créez le PersistentVolumeClaim:
109+
110+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
111+
112+
Après avoir créé le PersistentVolumeClaim, le control plane de Kubernetes va chercher un PersistentVolume qui respecte les exigences du PersistentVolumeClaim. Si le control plane trouve un PersistentVolume approprié avec la même StorageClass, il attache la demande au volume.
113+
114+
Affichez à nouveau les informations du PersistentVolume:
115+
```shell
116+
kubectl get pv task-pv-volume
117+
```
118+
119+
Maintenant, le résultat affiche un `STATUS` à `Bound`.
120+
121+
NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
122+
task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 2m
123+
124+
Affichez les informations du PersistentVolumeClaim:
125+
```shell
126+
kubectl get pvc task-pv-claim
127+
```
128+
129+
Le résultat montre que le PersistentVolumeClaim est attaché au PersistentVolume `task-pv-volume`.
130+
131+
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
132+
task-pv-claim Bound task-pv-volume 10Gi RWO manual 30s
133+
134+
## Créer un Pod
135+
136+
La prochaine étape est de créer un Pod qui utilise le PersistentVolumeClaim comme volume de stockage.
137+
138+
Voici le fichier de configuration du Pod:
139+
140+
{{< codenew file="pods/storage/pv-pod.yaml" >}}
141+
142+
Notez que le fichier de configuration du Pod spécifie un PersistentVolumeClaim et non un PersistentVolume. Du point de vue du Pod, la demande est un volume de stockage.
143+
144+
Créez le Pod:
145+
146+
```shell
147+
kubectl apply -f https://k8s.io/examples/pods/storage/pv-pod.yaml
148+
```
149+
150+
Vérifiez que le container dans le Pod est opérationnel:
151+
```shell
152+
kubectl get pod task-pv-pod
153+
```
154+
155+
Lancez un shell dans le container du Pod:
156+
```shell
157+
kubectl exec -it task-pv-pod -- /bin/bash
158+
```
159+
160+
Depuis le shell, vérifiez que nginx utilise le fichier `index.html` du volume hostPath:
161+
```shell
162+
# Assurez vous de lancer ces 3 commandes dans le shell qui provient de
163+
# la commande "kubectl exec" exécutée précedemment
164+
apt update
165+
apt install curl
166+
curl http://localhost/
167+
```
168+
169+
Le résultat doit afficher le texte qui a été écrit auparavant dans le fichier `index.html` dans le volume hostPath:
170+
171+
Hello from Kubernetes storage
172+
173+
174+
Si vous voyez ce message, vous avez configuré un Pod qui utilise un PersistentVolumeClaim comme stockage avec succès.
175+
176+
177+
## Nettoyage
178+
179+
Supprimez le Pod, le PersistentVolumeClaim et le PersistentVolume:
180+
```shell
181+
kubectl delete pod task-pv-pod
182+
kubectl delete pvc task-pv-claim
183+
kubectl delete pv task-pv-volume
184+
```
185+
186+
Si vous n'avez pas déja de session ouverte sur le noeud de votre cluster, ouvrez en un de la même manière que précédemment.
187+
188+
Dans la session shell, supprimez les fichiers et dossiers que vous avez créé:
189+
190+
```shell
191+
# En assumant que le noeud utilise "sudo" pour les accès privilégiés
192+
sudo rm /mnt/data/index.html
193+
sudo rmdir /mnt/data
194+
```
195+
196+
Vous pouvez maintenant arrêter la session shell vers votre noeud.
197+
198+
## Monter le même PersistentVolume à deux endroits
199+
200+
Vous pouvez monter plusieurs fois un même PersistentVolume
201+
à plusieurs endroits différents dans votre container nginx:
202+
203+
{{< codenew file="pods/storage/pv-duplicate.yaml" >}}
204+
205+
- `/usr/share/nginx/html` pour le site statique
206+
- `/etc/nginx/nginx.conf` pour la configuration par défaut
207+
208+
<!-- discussion -->
209+
210+
## Contrôle d'accès
211+
212+
Le stockage configuré avec un ID de groupe (GID) ne permettra l'écriture que par les Pods qui utilisent le même GID.
213+
214+
Les GID manquants ou qui ne correspondent pas entraîneront des erreurs d'autorisation refusée. Pour alléger la coordination avec les utilisateurs, un administrateur peut annoter un PersistentVolume
215+
avec un GID. Ensuite, le GID sera automatiquement ajouté à tout pod qui utilise le PersistentVolume.
216+
217+
Utilisez l'annotation `pv.beta.kubernetes.io/gid` comme ceci:
218+
```yaml
219+
apiVersion: v1
220+
kind: PersistentVolume
221+
metadata:
222+
name: pv1
223+
annotations:
224+
pv.beta.kubernetes.io/gid: "1234"
225+
```
226+
227+
Lorsqu'un Pod attache un PersistentVolume qui a une annotation pour le GID, ce dernier est appliqué à tous les containers du Pod de la même façon que les GID spécifiés dans le contexte de sécurité du Pod. Peu importe s'il provient d'une annotation du PersistentVolume ou de la spécification du Pod, chaque GID sera appliqué au premier process exécuté dans chaque container.
228+
229+
230+
{{< note >}}
231+
Quand un Pod attache un PersistentVolume, les GID associés avec le PersistentVolume ne sont pas répércutés sur la spécification de la ressource du Pod.
232+
{{< /note >}}
233+
234+
235+
236+
237+
## {{% heading "whatsnext" %}}
238+
239+
240+
* Pour en savoir plus sur les [PersistentVolumes](/docs/concepts/storage/persistent-volumes/).
241+
* Lire la [documentation de conception sur le stockage persistant](https://git.k8s.io/design-proposals-archive/storage/persistent-storage.md).
242+
243+
### Références
244+
245+
* [PersistentVolume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolume-v1-core)
246+
* [PersistentVolumeSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumespec-v1-core)
247+
* [PersistentVolumeClaim](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaim-v1-core)
248+
* [PersistentVolumeClaimSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#persistentvolumeclaimspec-v1-core)
249+
250+
251+
252+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: PersistentVolumeClaim
3+
metadata:
4+
name: task-pv-claim
5+
spec:
6+
storageClassName: manual
7+
accessModes:
8+
- ReadWriteOnce
9+
resources:
10+
requests:
11+
storage: 3Gi
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
apiVersion: v1
3+
kind: Pod
4+
metadata:
5+
name: test
6+
spec:
7+
containers:
8+
- name: test
9+
image: nginx
10+
volumeMounts:
11+
# a mount for site-data
12+
- name: config
13+
mountPath: /usr/share/nginx/html
14+
subPath: html
15+
# another mount for nginx config
16+
- name: config
17+
mountPath: /etc/nginx/nginx.conf
18+
subPath: nginx.conf
19+
volumes:
20+
- name: config
21+
persistentVolumeClaim:
22+
claimName: test-nfs-claim
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: task-pv-pod
5+
spec:
6+
volumes:
7+
- name: task-pv-storage
8+
persistentVolumeClaim:
9+
claimName: task-pv-claim
10+
containers:
11+
- name: task-pv-container
12+
image: nginx
13+
ports:
14+
- containerPort: 80
15+
name: "http-server"
16+
volumeMounts:
17+
- mountPath: "/usr/share/nginx/html"
18+
name: task-pv-storage
19+
20+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: PersistentVolume
3+
metadata:
4+
name: task-pv-volume
5+
labels:
6+
type: local
7+
spec:
8+
storageClassName: manual
9+
capacity:
10+
storage: 10Gi
11+
accessModes:
12+
- ReadWriteOnce
13+
hostPath:
14+
path: "/mnt/data"

0 commit comments

Comments
 (0)