Monter le fichier sur le pod Kubernetes, sans supprimer le fichier existant dans le conteneur docker dans la…

Monter le fichier dans le pod Kubernetes sans supprimer le fichier existant dans le conteneur docker situé dans le même répertoire

Ce que j'ai appris sur Kubernetes lors de la tentative de montage de mappes de configuration dans un conteneur Docker qui contient déjà un fichier dans le même répertoire.

photo par Patrick Lindenberg sur Unsplash

Il y a quelques semaines, j'ai créé une application simple nommée tweetor il s’agissait d’un simple tutoriel pour créer des clusters Kubenernetes dans Google Cloud Platform (GCP). C'était la partie d'un projet que j'ai fait et qui s'appelle «Kube X-mas». Ce projet est une série d'articles rédigés en bahasa indonésien pour créer une application en direct dans Kubernetes à GCP. Vous pouvez voir la série ici: https://medium.com/easyread/christmas-tale-of-sofware-engineer-project-kube-xmas-9167ebca70d2

Dans ce projet, je déploierai une application Golang dans un cluster Kubernetes dans GCP. Comme nous le savons, lors du développement d’une application, il doit séparer son fichier de configuration, qu’il soit dans la variable Environment ou simplement dans un fichier de configuration (.json, .yaml, .toml, etc.). Donc, cela peut être plus flexible, nous pouvons changer la mise en place, la production ou les tests de l'environnement.

Dans mon cas, je dockériserai mon application dans une image Docker, puis lors de son déploiement sur Kubernetes, j'utiliserai le contrôleur Kubernetes pour injecter le fichier de configuration, afin qu'il puisse être exécuté avec le fichier de configuration injecté.

Donc, fondamentalement, dans Kubernetes, nous pouvons injecter (monter) un fichier dans un conteneur. Dans mon cas, je vais monter un fichier de configuration de mon application dans mes conteneurs Docker. Pour ce faire, je peux utiliser les cartes de configuration Kubernetes, cela nous permet d’injecter des fichiers de configuration dans nos conteneurs d’applications de menu fixe.

Le problème

Pour être clair, j'ai une application Go (Golang) qui construit et conteneurisée dans une image de menu fixe. Cette application déjà compilée et construite et enregistrée dans une image de menu fixe.

Ceci est mon Dockerfile.

https://medium.com/media/9e07c8fb1723b176d5260565e243d34e/href

Donc, il va créer une image Docker qui contiendra l’application go compilée dans / app / engine. Mais cette application aura besoin d'un fichier de configuration pour pouvoir s'exécuter et vivre. J'ai besoin d'injecter le fichier de configuration pour qu'il puisse fonctionner.

injecter la configuration dans le conteneur de docker

Et puis, j'utilise les cartes de configuration Kubernetes pour injecter mon fichier de configuration d'application.

https://medium.com/media/8a09266a3fa0ec02fafcbbf82510eae8/href

Mais le problème se pose alors. Ce que je pense, c’est lors de l’injection de ce fichier de configuration sur le même chemin. Disons que mon répertoire de travail dans le conteneur est / app

Précédent:

app
└── moteur

Ce à quoi je m'attends après avoir injecté les cartes de configuration avec le volume de montage:

app
├── config.toml
└── moteur

Qu'est-ce qu'il se passe vraiment:

app
└── config.toml

Au lieu d'ajouter un nouveau fichier, le volume de montage Kubernetes remplacera tout le fichier et supprimera le fichier existant.

Je suis coincé dans ce numéro pendant 4 heures car je ne le réalise pas d’abord. Mes pods continuent à planter et à redémarrer. Jusque-là, j'essaie de le déboguer lentement et me suis rendu compte que si je monte un fichier, il supprimera également le fichier existant s'il contient le même répertoire.

Solutions

Après avoir réalisé le problème, je peux choisir deux options.

  • Séparez mon répertoire de travail dans le conteneur Docker par le répertoire de mon application dans le conteneur. Donc, utilisez plutôt / app comme répertoire de travail dans le conteneur, je vais créer un nouveau répertoire qui sera mon WORKDIR. Et je vais mettre mon fichier de configuration dans ce dossier.
  • Essayer de le comprendre jusqu'à ce qu'il soit résolu.

L'option 1 est vraiment évidente et résout les problèmes. Mais par simple curiosité, j’essaie de relire de nombreuses ressources (documentation officielle) et des articles de blog, si jamais un problème de ce type se produit, et comment y remédier.

Mais, je n'ai rien trouvé, sauf ce https://blog.sebastian-daschner.com/entries/multiple-kubernetes-volumes-directory. Dans cet article, il explique plusieurs répertoires de volumes Kubernetes. Je suis donc curieux de savoir si cela pourra également résoudre mon problème.

Dans cet article, il a dit qu'il fallait utiliser subPath, et qu'il en soit ainsi, puis j'essaie également d'utiliser subPath dans le déploiement de mes applications pour Kubernetes.

Précédemment:

- nom: configs          
mountPath: / app

Et changé en:

- nom: configs
mountPath: /app/config.toml
subPath: config.toml

Et voila, ça marche. Il ne remplace plus et ne supprime plus mon fichier existant dans le conteneur. Et cela peut fonctionner sans problème.

Mon fichier Kubernetes deployment.yaml complet:

https://medium.com/media/dfbb7985f4344641f8e677502c7510d3/href

Eh bien, en résolvant cela, j'apprends quelque chose d'important. Même si je suis resté coincé pendant 4 à 6 heures lorsque j'ai résolu ce problème «seul», j'ai appris une leçon précieuse ici. Et nous ne pouvons pas nous attendre à la prochaine aventure.

Quoi qu'il en soit, si vous trouvez cela utile, cela vous dérangerait-il de partager cette histoire pour que tout le monde ne tombe pas dans le même trou. Et suivez-moi pour garder les mises à jour de mon parcours d'apprentissage en génie logiciel 🙂

Références:

  • https://blog.sebastian-daschner.com/entries/multiple-kubernetes-volumes-directory


Monter le fichier sur le pod Kubernetes, sans supprimer le fichier existant dans le conteneur docker dans la… a été publié à l'origine dans Hacker midi sur Medium, où les gens poursuivent la conversation en soulignant et en répondant à cette histoire.

Source

A propos newstrotteur-fr

Découvrez également

Les derniers éléments de la fuite de Google Pixel 4a, et il a une prise casque!

Comme tous les téléphones Pixel, le Google Pixel 4a a déjà beaucoup fuité, mais aujourd’hui …

Laisser un commentaire