Skip to content

Commit 9402008

Browse files
author
k0rventen
committed
[fr] translate task run-application/run-single-instance-stateful-application.md
1 parent 7955eb6 commit 9402008

File tree

3 files changed

+279
-0
lines changed

3 files changed

+279
-0
lines changed
Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
---
2+
title: Exécutez une application stateful mono-instance
3+
content_type: tutorial
4+
weight: 20
5+
---
6+
7+
<!-- overview -->
8+
9+
Cette page montre comment exécuter une application mono-instance, avec gestion d'état (stateful) dans Kubernetes en utilisant un PersistentVolume et un Deployment. L'application utilisée est MySQL.
10+
11+
## {{% heading "objectives" %}}
12+
13+
- Créer un PersistentVolume en référençant un disque dans votre environnement.
14+
- Créer un déploiement MySQL.
15+
- Exposer MySQL à d'autres pods dans le cluster sous un nom DNS connu.
16+
17+
## {{% heading "prerequisites" %}}
18+
19+
- {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
20+
21+
- {{< include "default-storage-class-prereqs.md" >}}
22+
23+
<!-- lessoncontent -->
24+
25+
## Déployer MySQL
26+
27+
Vous pouvez exécuter une application stateful en créant un Deployment Kubernetes
28+
et en le connectant à un PersistentVolume existant à l'aide d'un
29+
PersistentVolumeClaim. Par exemple, ce fichier YAML décrit un
30+
Deployment qui exécute MySQL et référence le PersistentVolumeClaim. Le fichier
31+
définit un point de montage pour /var/lib/mysql, puis crée un
32+
PersistentVolumeClaim qui réclame un volume de 20G.
33+
Cette demande est satisfaite par n'importe quel volume existant qui répond aux exigences,
34+
ou par un provisionneur dynamique.
35+
36+
Remarque: le mot de passe MySQL est défini dans le fichier de configuration YAML, ce qui n'est pas sécurisé.
37+
Voir les [secrets Kubernetes](/docs/concepts/configuration/secret/)
38+
pour une approche sécurisée.
39+
40+
{{< codenew file="application/mysql/mysql-deployment.yaml" >}}
41+
{{< codenew file="application/mysql/mysql-pv.yaml" >}}
42+
43+
1. Déployez le PV et le PVC du fichier YAML:
44+
45+
```shell
46+
kubectl apply -f https://k8s.io/examples/application/mysql/mysql-pv.yaml
47+
```
48+
49+
1. Déployez les resources du fichier YAML:
50+
51+
```shell
52+
kubectl apply -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml
53+
```
54+
55+
1. Affichez les informations liées au Deployment:
56+
57+
```shell
58+
kubectl describe deployment mysql
59+
```
60+
61+
Le résultat sera similaire à ceci:
62+
63+
```
64+
Name: mysql
65+
Namespace: default
66+
CreationTimestamp: Tue, 01 Nov 2016 11:18:45 -0700
67+
Labels: app=mysql
68+
Annotations: deployment.kubernetes.io/revision=1
69+
Selector: app=mysql
70+
Replicas: 1 desired | 1 updated | 1 total | 0 available | 1 unavailable
71+
StrategyType: Recreate
72+
MinReadySeconds: 0
73+
Pod Template:
74+
Labels: app=mysql
75+
Containers:
76+
mysql:
77+
Image: mysql:5.6
78+
Port: 3306/TCP
79+
Environment:
80+
MYSQL_ROOT_PASSWORD: password
81+
Mounts:
82+
/var/lib/mysql from mysql-persistent-storage (rw)
83+
Volumes:
84+
mysql-persistent-storage:
85+
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
86+
ClaimName: mysql-pv-claim
87+
ReadOnly: false
88+
Conditions:
89+
Type Status Reason
90+
---- ------ ------
91+
Available False MinimumReplicasUnavailable
92+
Progressing True ReplicaSetUpdated
93+
OldReplicaSets: <none>
94+
NewReplicaSet: mysql-63082529 (1/1 replicas created)
95+
Events:
96+
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
97+
--------- -------- ----- ---- ------------- -------- ------ -------
98+
33s 33s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set mysql-63082529 to 1
99+
```
100+
101+
1. Listez les Pods créés par le Deployment:
102+
103+
```shell
104+
kubectl get pods -l app=mysql
105+
```
106+
107+
Le résultat sera similaire à ceci:
108+
109+
```
110+
NAME READY STATUS RESTARTS AGE
111+
mysql-63082529-2z3ki 1/1 Running 0 3m
112+
```
113+
114+
1. Inspectez le PersistentVolumeClaim:
115+
116+
```shell
117+
kubectl describe pvc mysql-pv-claim
118+
```
119+
120+
Le résultat sera similaire à ceci:
121+
122+
```
123+
Name: mysql-pv-claim
124+
Namespace: default
125+
StorageClass:
126+
Status: Bound
127+
Volume: mysql-pv-volume
128+
Labels: <none>
129+
Annotations: pv.kubernetes.io/bind-completed=yes
130+
pv.kubernetes.io/bound-by-controller=yes
131+
Capacity: 20Gi
132+
Access Modes: RWO
133+
Events: <none>
134+
```
135+
136+
## Accès à l'instance MySQL
137+
138+
Le fichier YAML précédent crée un service qui permet à d'autres
139+
pods dans le cluster d'accéder à la base de données.
140+
L'option `clusterIP: None` du service permet à son nom DNS
141+
de résoudre directement l'adresse IP du pod.
142+
C'est optimal lorsque vous n'avez qu'un seul pod derrière
143+
un service et que vous n'avez pas l'intention
144+
d'augmenter le nombre de pods.
145+
146+
Exécutez un client MySQL pour vous connecter au serveur :
147+
148+
```shell
149+
kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword
150+
```
151+
152+
Cette commande crée un nouveau pod dans le cluster exécutant
153+
un client MySQL et le connecte au serveur via le Service.
154+
Si la connexion réussit, cela signifie que votre base de données MySQL est opérationnelle.
155+
156+
```
157+
Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: false
158+
If you don't see a command prompt, try pressing enter.
159+
160+
mysql>
161+
```
162+
163+
## Mises à jour
164+
165+
L'image ou toute autre partie du Deployment peut être mise à jour
166+
comme d'habitude avec la commande `kubectl apply`.
167+
Voici quelques précautions spécifiques aux applications stateful :
168+
169+
- Ne pas mettre à l'échelle l'application. Cette configuration
170+
est conçue pour des applications à une seule instance seulement.
171+
Le PersistentVolume sous-jacent ne peut être monté que sur un
172+
Pod. Pour les applications stateful clusterisées, consultez la
173+
[documentation sur les StatefulSets](/docs/concepts/workloads/controllers/statefulset/).
174+
- Utilisez `strategy`: `type: Recreate` dans le fichier de
175+
configuration YAML du Deployment.
176+
Cela indique à Kubernetes de ne pas utiliser des mises à jour
177+
continues. Les mises à jour en roulement ne fonctionneront pas,
178+
car vous ne pouvez pas avoir plus d'un Pod en cours
179+
d'exécution à la fois. La stratégie `Recreate` arrêtera le
180+
premier pod avant d'en créer un nouveau avec la configuration mise à jour.
181+
182+
## Suppression d'un déploiement
183+
184+
Supprimez les ressources déployées avec leur noms:
185+
186+
```shell
187+
kubectl delete deployment,svc mysql
188+
kubectl delete pvc mysql-pv-claim
189+
kubectl delete pv mysql-pv-volume
190+
```
191+
192+
Si vous avez provisionné manuellement un PersistentVolume, vous
193+
devrez également le supprimer manuellement,
194+
ainsi que libérer la ressource sous-jacente.
195+
Si vous avez utilisé un provisionneur dynamique,
196+
il supprimera automatiquement le PersistentVolume
197+
lorsqu'il verra que vous avez supprimé le PersistentVolumeClaim.
198+
Certains provisionneurs dynamiques (comme ceux pour EBS et PD)
199+
libèrent également la ressource sous-jacente lors de la
200+
suppression du PersistentVolume.
201+
202+
## {{% heading "whatsnext" %}}
203+
204+
- En savoir plus sur les [Deployments](/docs/concepts/workloads/controllers/deployment/).
205+
206+
- En savoir plus sur le [déploiement d'applications](/docs/tasks/run-application/run-stateless-application-deployment/)
207+
208+
- [Documentation de kubectl run](/docs/reference/generated/kubectl/kubectl-commands/#run)
209+
210+
- Documentation des [Volumes](/docs/concepts/storage/volumes/) et des [Volumes persistants](/docs/concepts/storage/persistent-volumes/)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: mysql
5+
spec:
6+
ports:
7+
- port: 3306
8+
selector:
9+
app: mysql
10+
clusterIP: None
11+
---
12+
apiVersion: apps/v1
13+
kind: Deployment
14+
metadata:
15+
name: mysql
16+
spec:
17+
selector:
18+
matchLabels:
19+
app: mysql
20+
strategy:
21+
type: Recreate
22+
template:
23+
metadata:
24+
labels:
25+
app: mysql
26+
spec:
27+
containers:
28+
- image: mysql:5.6
29+
name: mysql
30+
env:
31+
# Use secret in real usage
32+
- name: MYSQL_ROOT_PASSWORD
33+
value: password
34+
ports:
35+
- containerPort: 3306
36+
name: mysql
37+
volumeMounts:
38+
- name: mysql-persistent-storage
39+
mountPath: /var/lib/mysql
40+
volumes:
41+
- name: mysql-persistent-storage
42+
persistentVolumeClaim:
43+
claimName: mysql-pv-claim
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: v1
2+
kind: PersistentVolume
3+
metadata:
4+
name: mysql-pv-volume
5+
labels:
6+
type: local
7+
spec:
8+
storageClassName: manual
9+
capacity:
10+
storage: 20Gi
11+
accessModes:
12+
- ReadWriteOnce
13+
hostPath:
14+
path: "/mnt/data"
15+
---
16+
apiVersion: v1
17+
kind: PersistentVolumeClaim
18+
metadata:
19+
name: mysql-pv-claim
20+
spec:
21+
storageClassName: manual
22+
accessModes:
23+
- ReadWriteOnce
24+
resources:
25+
requests:
26+
storage: 20Gi

0 commit comments

Comments
 (0)