-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdeploy.yaml
178 lines (173 loc) · 4.82 KB
/
deploy.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
---
# Création du namespace
apiVersion: v1
kind: Namespace
metadata:
name: exo3
---
# Les Persistent Volumes (PV) et les Persistent Volume Claims (PVC) ne fonctionnent pas nécessairement de paire. Cependant, dans la pratique courante,
# un Persistent Volume est généralement préalablement créé, puis un Persistent Volume Claim est créé pour réclamer et utiliser le Persistent Volume existant.
# Ce PV n'est donc pas nécessaire.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
namespace: exo3
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
# nfs:
# server: nfs-server-address
# path: /path/on/nfs/server
hostPath:
path: /path/to/host/directory
---
# A PersistentVolume (PV) is a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes.
# A PersistentVolumeClaim (PVC) is a request for storage by a user or pod.
# It is similar to a Pod in the sense that it consumes PersistentVolume when a pod consume node resources.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-persistent-volume
namespace: exo3
spec:
accessModes:
- ReadWriteOnce # ReadOnlyMany or ReadWriteMany
resources:
requests:
storage: 5Gi
---
# L'application mariadb est liée à un volume persistant
# Bien que les PV et PVC ne soient pas strictement liés, le PVC utilise généralement un PV existant pour satisfaire ses besoins en stockage.
# Si je ne ne spécifie pas un PV dans un PVC, Kubernetes essaiera de trouver un PV existant qui correspond aux besoins du PVC ou en créera un nouveau s'il n'en trouve pas.
apiVersion: v1
kind: Pod
metadata:
name: mariadb
namespace: exo3
labels:
app: mariadb
spec:
# Les volumes déclarés dans un Pod peuvent être utilisés pour stocker des données pendant la durée de vie du Pod, mais ils ne sont pas nécessairement persistants
# entre les redémarrages du Pod ou les recréations.
# Ces volumes peuvent être de différents types: volumes vides, volumes basés sur des hôtes et volumes basés sur des réclamations persistante (PVC)
volumes:
- name: db-volume
persistentVolumeClaim:
claimName: mariadb-persistent-volume
# - name: empty-volume
# emptyDir: {}
# - name: hostpath-volume
# hostPath:
# path: /path/on/host
# type: Directory
containers:
- name: mariadb
image: mariadb:10
volumeMounts:
- name: db-volume
mountPath: /var/lib/mariadb
# - name: empty-volume
# mountPath: /path/in/container
# - name: hostpath-volume:
# mountPath: /path/in/container
env:
# Evidemment des mauvaises pratiques
- name: MARIADB_ROOT_PASSWORD
value: "juve"
- name: MARIADB_USER
value: "delpiero"
- name: MARIADB_PASSWORD
value: "juve"
resources:
limits:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 3306
---
# Service flask doit être facilement scalable ==> kind: Deployment et pas pod
# Application web Flask est la seule à pouvoir recevoir des requêtes depuis l'extérieur du cluster
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask
namespace: exo3
labels:
app: flask
spec:
replicas: 1
selector:
matchLabels:
app: flask
template:
metadata:
namespace: exo3
labels:
app: flask
spec:
containers:
- name: flask
image: loann28/capge-k8s-exo3:2.0.0
resources:
limits:
memory: "512Mi"
cpu: "500m"
ports:
- containerPort: 5000
---
# Service pour exposer l'application flask en dehors du cluster
apiVersion: v1
kind: Service
metadata:
name: flask-nodeport
namespace: exo3
spec:
selector:
app: flask
# Permet d'accéder au cluster depuis l'extérieur : double interface : 1 sur le noeud et l'autre sur le cluster
type: NodePort
ports:
- port: 5000
targetPort: 5000 # port sur le noeud
nodePort: 55000 # port sur le cluster
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: db-svc
namespace: exo3
spec:
selector:
app: mariadb
# Type par défaut si je n'avais rien précisé. Possibilités : NodePort, LoadBalancer et ExternalName
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
protocol: TCP
---
apiVersion: autoscaling/v1 # autoscaling/v2 allows behavior field to configure separate scaleUp and scaleDown
kind: HorizontalPodAutoscaler
metadata:
name: hpa
namespace: exo3
spec:
minReplicas: 1
maxReplicas: 8
metrics:
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
# targetCPUUtilizationPercentage: 70
# On lie l'hpa à une ressource comme le déploiement
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: flask