Aller au contenu

Mon premier manifest

Les manifests permettent de décrire l’état souhaité des ressources déployées dans un cluster (approche déclarative). Il est recommandé d'utiliser des fichiers yaml ou des déploiements Helm pour déployer les applications afin de minimiser les erreurs.

Description d'un manifest

Les manifests sont constitués de la version de l'API, du type de ressource (pod, service, déploiement...), de métadonnées et des caractéristiques.

Issu d'un exemple générique d'un tuto DevSecOps

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: mon-label
  name: mon-premier-pod
  namespace: mon-ns
spec:
  containers:
  - name: conteneur-simple
    image: hello-world

Manifests de l'application Jupyter

Nous allons utiliser le même pod Jupyter et service NodePort de la partie précédente.

Manifest du pod

Exercice

A partir de l'exemple ci-dessus, écrire un manifest myjupyter.yaml qui utilise l'image Jupyter de base et s'applique dans le namespace tuto.

Solution
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: myjupyter
  name: myjupyter
  namespace: tuto
spec:
  containers:
  - name: myjupyter
    image: jupyter/base-notebook

Application d'un manifest

k apply -f myjupyter.yaml &&\
k get pods -w

Manifest du service

Comme précédemment dans le cas d'un service web, il reste à créer le service NodePort correspondant en le décrivant dans un autre manifest myjupyter-svc.yaml et l'appliquer :

apiVersion: v1
kind: Service
metadata:
  name: myjupyter-service
  namespace: tuto
spec:
  type: NodePort
  selector:
    app: myjupyter
  ports:
    - protocol: TCP
      port: 8888
      nodePort: 30007

Nous remarquons que cette fois le port NodePort a été fixé à 30007. Vous pouvez vérifier que l'application Jupyter fonctionne comme précédement avec le port-forwarding.

Labels

Le label permet d'attacher les objets pour les identifier et les organiser.

  labels:
    ver: "1"
    app: jupyter
    env: test

Exercice

Ajouter au manifest myjupyter.yaml les 3 labels de version, du nom d'application et d'environnement et réappliquer le pod.

Solution
apiVersion: v1
kind: Pod
metadata:
  labels:
    ver: "1"
    app: myjupyter
    env: test
  name: myjupyter
  namespace: tuto
spec:
  containers:
  - name: myjupyter
    image: jupyter/base-notebook

Nous pouvons noter que l'update du pod est effectué automatiquement lorsque nous voyons pod/myjupyter configured.

Il est aussi possible d'ajouter des labels à la volée :

k label pod/myjupyter color=blue &&\
k describe pod/myjupyter

La commande k edit permet aussi de faire cette opération. Il est possible d'afficher les labels avec :

k get pods --show-labels

Les sélecteurs sont utilisés pour sélectionner un ensemble de ressources en fonction de leurs labels. Il est possible d'obtenir les logs d'une application grâce aux labels :

k logs --selector app=myjupyter

Si plusieurs pods de la même application sont en cours d'execution (comme nous verrons lors des déploiemenst), nous pouvons accéder à leurs logs simultanément.

Authors: Cécile Cavet