Pour effectuer cette partie j'ai utilisé un cluster kubernetes DigitalOcean. Vous pouvez vous inscrire et obtenir 100$ de crédit à partir de ce lien (lien affilié).
Nous allons déployer notre première chart Wordpress à partir du dépot Bitnami. Il y a 3 manières de déployer une chart dans un cluster :
Via la CLI la commande ressemblerait à cela :
$ helm install --set service.type=NodePort,ingress.enabled=true,ingress.hostname=wordpress.test,wordpressUsername=admin,wordpressPassword=password,mariadb.mariadbRootPassword=password,mariadb.primary.persistence.enabled=false,persistence.enabled=false,allowEmptyPassword=false bitnami/wordpress --generate-name
Etant un wordpress de test, je n'ai pas activé la persistence des volumes. Pour rappel, tous ces paramètres ont été trouvés dans le fichier values.yaml
$ kubectl get pod,deploy,svc,ingress -l app.kubernetes.io/instance=wordpress-1627828947
NAME READY STATUS RESTARTS AGE
pod/wordpress-1627828947-85474887df-s279v 1/1 Running 0 2m32s
pod/wordpress-1627828947-mariadb-0 1/1 Running 0 2m32s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress-1627828947 1/1 1 1 2m32s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress-1627828947 NodePort 10.245.135.169 <none> 80:32540/TCP,443:31768/TCP 2m32s
service/wordpress-1627828947-mariadb ClusterIP 10.245.214.79 <none> 3306/TCP 2m32s
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/wordpress-1627828947 <none> wordpress.test 68.183.240.182 80 2m32s
Pour pouvoir accéder au wordpress je vais modifier mon fichier hosts et rajouter la ligne 68.183.240.182 wordpress.test (/etc/hosts).
Je peux ensuite accéder au wordpress via http://wordpress.test
.
$ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
wordpress-1627828947 default 1 2021-08-01 16:42:32.751418 +0200 CEST deployed wordpress-12.0.0 5.8.0
Cette méthode est cependant à éviter le plus possible car très verbeux et pas très lisible.
Dans cette partie nous allons générer un fichier values.yaml identique à notre commande CLI. Pour se faire nous allons créer un fichier values.yaml et écrire nos paramètres sous forme YAML. Ce qui donne :
ingress:
enabled: true
hostname: wordpress.test
mariadb:
mariadbRootPassword: password
primary:
persistence:
enabled: false
persistence:
enabled: false
service:
type: NodePort
wordpressPassword: password
wordpressUsername: admin
allowEmptyPassword: false
Comme on peut le voir, le fichier est bien plus lisible et celui-ci peut-être versionné sur un git.
On va donc sauvegarder puis installer wordpress à partir de ce fichier :
$ helm install my-wordpress --values values.yaml bitnami/wordpress
NAME: my-wordpress
LAST DEPLOYED: Sun Aug 1 17:06:53 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
...
Si jamais on perd le fichier values.yaml, il est tout à fait possible de récupérer les valeurs d'une chart :
$ helm get values my-wordpress
USER-SUPPLIED VALUES:
allowEmptyPassword: false
ingress:
enabled: true
hostname: wordpress.test
mariadb:
mariadbRootPassword: password
primary:
persistence:
enabled: false
persistence:
enabled: false
service:
type: NodePort
wordpressPassword: password
wordpressUsername: admin
On peut aussi récupérer TOUTES les valeurs par défaut :
$ helm get values my-wordpress --all
COMPUTED VALUES:
...
Mais aussi les values d'une révision spécifique :
$ helm get values my-wordpress --revision 1
$ helm get manifest my-wordpress
---
# Source: wordpress/charts/mariadb/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-wordpress-mariadb
...
Pour effectuer une mise à jour de chart, nous allons déployer une ancienne version de wordpress, puis la mettre à jour. Pour se faire, reprendre le fichier values.yaml utilisé plus haut, créer un namespace wordpress kubectl create ns wordpress
puis installer la chart bitnami/wordpress :
$ helm search repo bitnami/wordpress --versions
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/wordpress 12.0.0 5.8.0 Web publishing platform for building blogs and ...
bitnami/wordpress 11.1.5 5.7.2 Web publishing platform for building blogs and ...
# D'après le readme du github de la chart bitnami/wordpress, aucun problème pour upgrade de 11.1.5 --> 12.0.0
$ helm install -n wordpress -f values.yaml --version 11.1.5 bitnami/wordpress
$ kubectl config set-context wordpress
$ helm list # -n wordpress si on n'a pas set-context avant
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
my-wordpress wordpress 1 2021-08-01 17:35:19.90706 +0200 CEST deployed wordpress-11.1.5 5.7.2
$ helm history my-wordpress # -n wordpress si pas set-context
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Aug 1 17:35:19 2021 deployed wordpress-11.1.5 5.7.2 Install complete
$ helm upgrade -n wordpress -f values.yaml --version 12.0.0 my-wordpress bitnami/wordpress
*Release "my-wordpress" has been upgraded. Happy Helming!
$ helm history my-wordpress
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Aug 1 17:35:19 2021 superseded wordpress-11.1.5 5.7.2 Install complete
2 Sun Aug 1 17:45:37 2021 deployed wordpress-12.0.0 5.8.0 Upgrade complete
La commande history peut prendre différents paramètres :
$ helm history my-wordpress -o yaml-cluster-test/wordpress ⎈
- app_version: 5.7.2
chart: wordpress-11.1.5
description: Install complete
revision: 1
status: superseded
updated: "2021-08-01T17:35:19.90706+02:00"
- app_version: 5.8.0
chart: wordpress-12.0.0
description: Upgrade complete
revision: 2
status: deployed
updated: "2021-08-01T17:45:37.525491+02:00"
$ helm history my-wordpress --max 1
Il existe différents status dans l'historique :
Nous pouvons réutiliser les mêmes values que la version précédente avec le paramètre --reuse-values :
$ helm upgrade -n wordpress -f values.yaml --version 12.0.0 --reuse-values my-wordpress bitnami/wordpress
Nous allons maintenant faire un rollback de version.
Nous allons rollback notre application à la révision 1 :
$ helm rollback -n wordpress my-wordpress 1
Rollback was a success! Happy Helming!
On vérifie que tout est bon au niveau du cluster :
$ kubectl get pod,deploy,svc,ingress -l app.kubernetes.io/instance=my-wordpress
NAME READY STATUS RESTARTS AGE
pod/my-wordpress-6677d74996-84xqx 1/1 Running 0 2m2s
pod/my-wordpress-mariadb-0 1/1 Running 0 115s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-wordpress 1/1 1 1 23h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/my-wordpress NodePort 10.245.183.103 <none> 80:32090/TCP,443:32576/TCP 23h
service/my-wordpress-mariadb ClusterIP 10.245.39.180 <none> 3306/TCP 23h
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/my-wordpress <none> wordpress.test 68.183.240.182 80 23h
$ helm history my-wordpress
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Aug 1 17:35:19 2021 superseded wordpress-11.1.5 5.7.2 Install complete
2 Sun Aug 1 17:45:37 2021 superseded wordpress-12.0.0 5.8.0 Upgrade complete
3 Mon Aug 2 17:18:56 2021 deployed wordpress-11.1.5 5.7.2 Rollback to 1
En se connectant sur wordpress, la version a bien été downgrade.