Enoncé TP 13

/images/k8s.jpeg

TP13 : Kustomize

🇫🇷 Version Française

Rassembler les Yamls

On va rassembler les fichiers yamls décrivant toutes nos ressources :

  • configuration : secret, configmap, namespace
  • mongo: statefulSet & service
  • frontend: deployment & service
  • backend : deployment & service

l’arborescence d’une archive kustomize est conçu comme cela:

kustomize/
  base/
      resources/
          back-deployment.yaml
          back-service.yaml
          back-ingress.yaml
          front-deployment.yaml
          ...
      kustomization.yaml
  overlay/
      patch/
          back-deployment.yaml
          ...
      resources/
          namespace.yaml
          back-secret.yaml
          ...
      kustomization.yaml

Le dossier overlay est souvent nommé avec le nom de l’environnement qu’on veut déployer; il va contenir les éléments qui doivent changer entre les environnements. Ici overlay peut etre renommer en dev.

Les fichiers kustomization.yaml servent à dire à kustomize “que dois tu faire avec les fichiers qu’il y a dans ce dossier et sous dossier”.

Exemples:

le fichier kustomization.yaml du dossier base va service à lister les manifest yaml qu’il faut appliquer :

 1resources:
 2  - resources/mongo-secret.yaml
 3  - resources/mongo-statefulset-pvc.yaml
 4  - resources/mongo-service.yaml
 5  - resources/back-configmap.yaml
 6  - resources/back-secret.yaml
 7  - resources/back-service.yaml
 8  - resources/back-deployment.yaml
 9  - resources/front-deployment.yaml
10  - resources/front-service.yaml

le kustomization.yaml du dossier overlay va permettre d’appliquer plus de ressources pour l’environnement, ou bien modifier une ressource déclaré dans le dossier base :

 1resources:
 2  - ./../base/ # reférence vers les ressources du dossier base.
 3  - ./resources/namespace.yaml # ajout d'une ressource namespace dédié à l'environement.
 4  - ./resources/back-secret.yaml # ajout d'une ressource secret dédié à l'environnement
 5
 6namespace: form-k8s-dev # ajout automatique de la ligne `namespace: form-k8s-dev` à toutes les ressources.
 7
 8patchesStrategicMerge: # Merge les fichiers afin de les modifier.
 9  - patch/back-configmap.yaml # applique sur le fichier deployment du dossier base les changement présents dans ce fichier là (ce fichier a la priorité en cas de conflit).
10  - patch/front-deployment.yaml # pareil pour un autre fichier

Le patchesStrategicMerge permet d’ajouter des blocs (par exemple un bloc quota), il permet aussi d’override certaines valeurs. il se base sur le nom de la ressource pour faire ça.

kustomization.yaml a de nombreux bloc permettant de faire tout un tas de chose, je vous invite à regarder la doc pour voir si certains peuvent être utile dans notre application.

Lancer kustomize

Kustomize est embarqué dans la CLI kubectl depuis plusieurs versions, grâce à l’option -k

kubectl apply -k kustomize_folder

Kustomize sait dans quel ordre il doit installer les composants (namespace avant tout le reste par exemple)

🇬🇧 English version

Gather the Yamls

We will collect the yaml files describing all our resources:

  • configuration: secret, configmap, namespace
  • mongo: statefulSet & service
  • frontend: deployment & service
  • backend: deployment & service

the tree structure of a kustomize archive is designed like this:

kustomize/
  base/
      resources/
          back-deployment.yaml
          back-service.yaml
          back-ingress.yaml
          front-deployment.yaml
          ...
      kustomization.yaml
  overlay/
      patch/
          back-deployment.yaml
          ...
      resources/
          namespace.yaml
          back-secret.yaml
          ...
      kustomization.yaml

The overlay folder is often named with the name of the environment you want to deploy; it will contain the elements that need to change between environments. Here overlay can be renamed to dev.

The kustomization.yaml files are used to tell kustomize “what should you do with the files in this folder and subfolder”.

Examples:

The kustomization.yaml file in the base folder will list the yaml manifests that must be applied:

 1resources:
 2  - resources/mongo-secret.yaml
 3  - resources/mongo-statefulset-pvc.yaml
 4  - resources/mongo-service.yaml
 5  - resources/back-configmap.yaml
 6  - resources/back-secret.yaml
 7  - resources/back-service.yaml
 8  - resources/back-deployment.yaml
 9  - resources/front-deployment.yaml
10  - resources/front-service.yaml

the kustomization.yaml of the overlay folder will allow you to apply more resources for the environment, or modify a resource declared in the base folder:

 1resources:
 2  - ./../base/ # reference to the resources of the base folder.
 3  - ./resources/namespace.yaml # addition of a namespace resource dedicated to the environment.
 4  - ./resources/back-secret.yaml # addition of a secret resource dedicated to the environment
 5
 6namespace: form-k8s-dev # automatically add the `namespace: form-k8s-dev` line to all resources.
 7
 8patchesStrategicMerge: # Merge files for modification.
 9  - patch/back-configmap.yaml # applies the changes present in this file to the deployment file in the base folder (this file has priority in the event of a conflict).
10  - patch/front-deployment.yaml # same for another file

The patchesStrategicMerge allows you to add blocks (for example a quota block), it also allows you to override certain values. it relies on the name of the resource to do this.

kustomization.yaml has many blocks allowing you to do a whole bunch of things, I invite you to look at the doc to see if some can be useful in our application.

Launch kustomize

Kustomize has been embedded in the kubectl CLI for several versions, thanks to the -k option

kubectl apply -k kustomize_folder

Kustomize knows in what order it must install the components (namespace before everything else for example)

Latest Posts