# 🇫🇷 Kit de survie K8S pour les dévs avec K3S - Partie 5: Les Volumes
Dans le précédent article (opens new window), je vous expliquais comment utiliser une Docker registry "unsecure" avec notre cluster K3S. Nous allons donc nous servir de cette registry pour cette nouvelle partie.
🤔 je suis en train de chercher un moyen plus simple pour la Docker registry - le seul que j'ai trouvé pour le moment est d'utiliser directement l'IP de la VM plutôt qu'un "nom de domaine". Une piste serait d'installer la registry directement dans le cluster, mais pour le moment je bataille encore sur certains points.
Mais revenons à nos 🐑🐑🐑. Comme vous le savez, les containers sont par nature éphémères/immutables, c'est donc une très mauvaise idée de vouloir persister des données dans ces containers. Nous allons donc utiliser la notion de Volume afin de pouvoir sauver nos données et les retrouver après un redémarrage de cluster, une suppression de pod, ...
# Préalable
# Une image "utilitaires"
Mais avant, nous allons nous créer une image "utilitaires" qui nous permettra de faire des tests facilement. Donc quelque part sur votre machine, dans un répertoire, créez un fichier Dockerfile
avec ce contenu:
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
nano \
curl \
nodejs \
redis
bien sûr vous pouvez ajouter tous les outils dont vous avez besoin
# Build et Push de l'image
version="0.0.0"
registry_domain="registry.dev.test"
docker build -t mytools .
docker tag mytools ${registry_domain}:5000/mytools:${version}
docker push ${registry_domain}:5000/mytools:${version}
Vous pouvez vérifier:
curl http://registry.dev.test:5000/v2/mytools/tags/list
Vous devriez obtenir: {"name":"mytools","tags":["0.0.0"]}
# Création d'un volume
Avec K3S vous avez par défaut ce que l'on appelle le "Local Path Provisioner" qui vous permet d'activer la possibilité de création de volume.
📘 Ref: https://rancher.com/docs/k3s/latest/en/storage/ (opens new window)
Pour créer notre premier volume, créez un fichier pvc.yaml
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-path-pvc
namespace: training
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 10Mi
Puis tapez la commande:
kubectl create -f pvc.yaml
✋ N'oubliez pas de préciser votre variable
KUBECONFIG
# Création d'un pod pour utiliser le volume
Pour utiliser notre premier volume, créez un fichier pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: volume-test
namespace: training
spec:
containers:
- name: volume-test
image: registry.dev.test:5000/mytools:0.0.0
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: volv
mountPath: /data
volumes:
- name: volv
persistentVolumeClaim:
claimName: local-path-pvc
Puis tapez la commande:
kubectl create -f pod.yaml
Et enfin, la commande ci dessous pour accéder au shell de notre pod:
kubectl exec -n training -it volume-test -- /bin/bash
Une fois dans le pod:
echo "hello world" > /data/hello.txt
Pour "sortir", tapez exit
.
Puis créez un 2ème pod grâce à un fichier pod.bis.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: volume-test-bis
namespace: training
spec:
containers:
- name: volume-test-bis
image: registry.dev.test:5000/mytools:0.0.0
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
volumeMounts:
- name: volv
mountPath: /data
volumes:
- name: volv
persistentVolumeClaim:
claimName: local-path-pvc
Puis tapez les commandes:
kubectl create -f pod.bis.yaml
# une fois le pod créé
kubectl exec -n training -it volume-test-bis -- /bin/bash
Une fois dans le pod:
cat /data/hello.txt
Et vous obtiendrez un splendide hello world
🎉
Si vous redémarrez votre cluster, vous pourrez vérifiez que le fichier texte est encore présent. Il en sera de même si vous supprimez et recréez les 2 pods.
✋ ce volume n'est accessible qu'au sein du même namespace
Nous avons donc maintenant ce qu'il faut pour passer à la suite (une base Redis avec des sonnées persistantes)
Last Articles
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇬🇧 Every GitLab Page deserves a real CI/CD | 2020-07-23 | GitLab CI
- 🇫🇷 Lit-Element, commencer doucement | 2020-07-20 | WebComponent
- 🇬🇧 Build quickly and host easily your Docker images with GitLab and GitLab CI | 2020-06-02 | GitLab CI
- 🇬🇧 Deploy quickly on Clever Cloud with GitLab CI | 2020-05-31 | GitLab CI
- 🇫🇷 Borg Collective, mes jouets pour apprendre Knative | 2020-05-30 | Knative
- 🇬🇧 Borg Collective, Toys to learn Knative | 2020-05-30 | Knative
- 🇫🇷 M5Stack, une petit device IOT bien sympathique, programmable en Python | 2020-05-09 | IOT
- 🇫🇷 Knative, l'outil qui rend Kubernetes sympathique | 2020-05-02 | kubernetes