Mon premier déploiement¶
Les déploiements permettent de gérer les pods de manière automatisée en accèdant à l'état désiré et le cycle de vie du pod.
Description d'un déploiement¶
Pour créer un déploiement avec la commande create
(permet la création de ressource) et une image hello world :
Cette fois, en plus du pod qui a maintenant un nom aléatoire, il y a des objets de type Deployment et Replicaset qui sont crées.
k get all
NAME READY STATUS RESTARTS AGE
pod/hello-world-596bc57554-vhhrw 1/1 Running 0 23s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/hello-world 1/1 1 1 23s
NAME DESIRED CURRENT READY AGE
replicaset.apps/hello-world-596bc57554 1 1 1 23s
Que nous pouvons inspecter :
-
Deployment :
k describe deployments hello-world Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate
Les stratégies de déploiement sont pour les plus couramment utilisées :
RollingUpdate
etRecreating
. Ils décrivent comment les pods de deploiement sont mis à jour lors des changements de configuration. Avec la première stratégie, le nouveau pod est créé avant de détruire le précédent. Cela permet d'éviter les downtimes. Avec la deuxième stratégie, les pods sont supprimés avant la création des nouveaux. -
Replicaset :
Les Replicaset (ensemble de réplicas) ont pour but de maintenir un ensemble stable de pods à un moment donné. Tous les pods gérés par les Replicaset sont identiques.
Nous refaisons à présent le même déploiement avec un manifest :
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: hello-world
name: hello-world
namespace: tuto
spec:
replicas: 1
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: rancher/hello-world
ports:
- containerPort: 80
protocol: TCP
Replicas¶
Les replicas servent à augmenter le nombre de pod de la même application dans le but de faire du loadbalancing, passer à l'échelle ou effectuer des migrations.
Pour changer le nombre de replica du déploiement en mode interactif :
Déploiement de l'application Jupyter¶
Exercice
A partir de l'exemple précédent, écrire un manifest myjupyter-app.yaml
qui déploie l'application Jupyter avec son service associé et 3 replicas. Il est possible de mettre le déploiement et le service dans le même fichier yaml
avec un séparateur ---
.
Solution
apiVersion: apps/v1
kind: Deployment
metadata:
name: myjupyter
namespace: tuto
spec:
replicas: 3
selector:
matchLabels:
app: myjupyter
template:
metadata:
labels:
app: myjupyter
spec:
containers:
- name: myjupyter
image: jupyter/base-notebook
ports:
- containerPort: 8888
---
apiVersion: v1
kind: Service
metadata:
name: myjupyter-service
namespace: tuto
spec:
type: NodePort
selector:
app: myjupyter
ports:
- protocol: TCP
port: 8888
nodePort: 30007
Il est possible d'accèder simultanément aux logs des 3 pods avec :
Vous pouvez vérifier la résilience du déploiement en effectuant dans 2 terminaux :
- Terminal 1
- Terminal 2