Après avoir vue comment déployer des applications dans un cluster K8s, on va découvrir dans cette partie la configuration de l’ensemble des applications d’un cluster K8s à l’aide des objets « ConfigMap » et « Secrect ».
En général les variables utilisées dans de nombreuses applications (nom d’un bucket, nom d’une file de message, etc.) sont stockées dans un objet de type ConfigMap. Les mots de passe, token ou les clefs sont injectés en utilisant l’objet Secret. Pour manipuler ces aspects on va configurer une base de données « MariaDB »
Créez un dossier « lab07 » et basculez dans ce dossier
mkdir lab07
cd lab07
Générez un mot de passe en base64 avec la commande suivante:
$ echo -n 'K8sTraining!' | base64
Notez la valeur et placez-la dans la définition le secret définie dans le fichier db-secret.yaml suivant:
apiVersion: v1
kind: Secret
metadata:
name: mariadb-root-password
type: Opaque
data:
password: PLACEZ ICI LA VALEUR
Créez la « secret »
kubectl apply -f db-secret.yaml
Affichez la « secret »
kubectl describe secret mariadb-root-password
kubectl get secret mariadb-root-password -o jsonpath='{.data.password}' | base64 -d
On peut aussi utiliser cette deuxième façon pour créer un « secret » nommé « mariadb-user-creds »
kubectl create secret generic mariadb-user-creds \
--from-literal=MYSQL_USER=kubeuser \
--from-literal=MYSQL_ROOT_PASSWORD=K8sTraining
Créez une « configMap» nommée « mariadb-config » à partir du fichier max_allowed_packet.cnf suivant:
[mysqld]
max_allowed_packet = 64M
Complétez cette commande pour créer la « ConfigMap »
kubectl create configmap ...
Éditez la « configMap » pour changer la valeur de « max_allowed_packet » vers 32M
On va déployer la base de donnée mariaDB avec le manifeste mariadb-deployment.yaml suivant:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mariadb
name: mariadb-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: docker.io/mariadb:10.4
ports:
- containerPort: 3306
protocol: TCP
volumeMounts:
- mountPath: /var/lib/mysql
name: mariadb-volume-1
volumes:
- emptyDir: {}
name: mariadb-volume-1
Ajouter les 2 secrets créées précédemment en tant que variables d’environnement au déploiement
Pour vous aider utilisez les sections suivantes à ajouter et à compléter dans le manifeste.
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-root-password
key: password
Et
envFrom:
- secretRef:
name: mariadb-user-creds
Ajoutez la ConfigMap « mariadb-config » en tant que source dans un volume de la spécification du pod.
Ajoutez ensuite un « volumeMount » à la définition du conteneur.
Utilisez le configMap comme volumeMount pour « /etc/mysql/conf.d »
Créez le déploiement
kubectl create -f mariadb-deployment.yaml
Vérifier que les « secrets » et les « configMaps» sont bien utilisés par le pod
kubectl exec -it [pod-name] -- env |grep MYSQL
kubectl exec -it [pod-name] -- ls /etc/mysql/conf.d
kubectl exec -it [pod-name] -- cat /etc/mysql/conf.d/max_allowed_packet.cnf
Vérifiez que ça fonctionne
kubectl exec -it [pod-name] -- /bin/sh
mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e 'show databases;'
mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
Nettoyez les resources
kubectl delete deployment mariadb-deployment
kubectl delete cm mariadb-config
kubectl delete secret mariadb-root-password mariadb-user-creds