Dans cet exercice, vous allez créer un Deployment et l’exposer à l’extérieur du cluster via un service de type NodePort.

1. Création d’un Deployment

Créez un fichier ghost_deployment.yaml définissant un Deployment ayant les propriétés suivantes:

  • nom: ghost
  • nombre de replicas: 3
  • définition d’un selector sur le label app: ghost
  • spécification du Pod:
    • label app: ghost
    • un container nommé ghost basé sur l’image ghost:4 et exposant le port 2368

Créez ensuite la ressource spécifiée.

2. Status du Deployment

A l’aide de kubectl, examinez le status du Deployment ghost.

A partir de ces informations, que pouvez-vous dire par rapport au nombre de Pods gérés par ce Deployment ?

3. Status des Pods associés

A l’aide de kubectl, lister les Pods associés à ce Deployment.

4. Exposition des Pods du Deployment

Créez un Service permettant d’exposer les Pods du Deployment à l’extérieur du cluster

Conseils:

  • vous pourrez commencer par créer une spécification pour le Service, en spécifiant que le selector doit permettre de regrouper les Pods ayant le label app: ghost.

  • utilisez un service de type NodePort, vous pourrez par exemple le publier sur le port 31001 des nodes du cluster

  • le container basé sur l’image ghost:4 tourne sur le port 2368, ce port devra donc être référencé en tant que targetPort dans la spécification du Service.

Note: n’hésitez pas à vous reporter à l’exercice sur les Services de type NodePort que nous avons vu précédemment

Une fois le service créé, vous pourrez accéder à l’interface de l’application ghost sur http://IP:31001 ou IP est l’adresse IP d’une machine du cluster Kubernetes.

Note: vous pouvez récupérer les IPs des machines de votre cluster avec la commande $ kubectl get nodes -o wide

Interface de l’application ghost

5. Cleanup

Supprimez le Deployment ainsi que le Service créés précédemment.


Solution

1. Création d’un Deployment

La spécification, définie dans le fichier ghost_deployment.yaml est la suivante:

ghost_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ghost
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ghost
  template:
    metadata:
      labels:
        app: ghost
    spec:
      containers:
      - name: ghost
        image: ghost:4
        ports:
        - containerPort: 2368

La commande suivante permet de créer le Deployment

kubectl apply -f ghost_deployment.yaml

2. Status du Deployment

La commande suivante permet d’obtenir le status du Deployment

$ kubectl get deploy
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
ghost   3/3     3            3          51s

3. Status des Pods associés

La commande suivante permet de lister les Pods qui tournent sur le cluster

$ kubectl get po
NAME                    READY   STATUS    RESTARTS   AGE
ghost-548879c755-7kmpz   1/1     Running   0          68s
ghost-548879c755-m5pjt   1/1     Running   0          68s
ghost-548879c755-nwl9l   1/1     Running   0          68s

On voit que les 3 Pods relatifs au Deployment ghost sont listés. Ils sont tous les 3 actifs.

4. Exposition des Pods du Deployment

Dans un fichier ghost_service.yaml nous définissons la spécification suivante:

ghost_service.yaml
apiVersion: v1
kind: Service
metadata:
  name: ghost
spec:
  selector:
    app: ghost
  type: NodePort
  ports:
  - port: 80
    targetPort: 2368
    nodePort: 31001

On crée ensuite le Service:

kubectl apply -f ghost_service.yaml

5. Cleanup

Supprimez le Deployment et le Service:

kubectl delete deploy/ghost
kubectl delete svc/ghost