Alexandre Garnier ( zigarn)
Présentation aimablement prêtée
par Christophe Furmaniak
Ou speaker warmup ?
Elle est pas belle ma matrice ?
YEAH !!! Des containers partout !
La réalité
Les containers ne sont pas (au premier abord) le facilitateur pour vos problématiques de configuration d'environnement
De quoi parle-t-on au fait ?
Tout ce qui permet à vos apps d'intéragir avec leur écosystème !
En rapport avec les containers... ou pas
De nos jours ?
Un super guestbook
Frontend → Gateway ↔ Filter Service
Solution #0 : variables d'environnement
Apporter la configuration par le biais de variables d'environnement
Solution #0 : variables d'environnement
docker run -t -d \
-w /home/user/dev/work-dir \
-v /home/user/dev/work-dir:/work:rw \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
-e ******** -e ******** -e ******** -e ******** -e ******** \
mycompany/myimage:v1.0.2
Solution #0
Solution #1 : images "tout-en-un"
Intégrez votre app et sa configuration dans la même image
FROM myapp:1.3.2
⇒ myapp-prod:1.3.2
PAS BIEN !!
Solution #1
Solution #2 : configuration sur le "host" docker
Fournissez la config par le biais des volumes "mappés" sur le host docker
docker run -v /data/env/prod:/data ...
PAS BIEN !!
Êtes vous sur de vouloir préférer les animaux de compagnie au bétail ?
Solution #2
Solution #3 : data containers
Créez des containers dédiés pour la configuration
--volumes-from
(ou équivalent)Solution #3
Solution #4 : configuration distante
Utilisons un service de configuration
Solution #4 : configuration distante
Solution #4
Solution #5 : solution native orchestrateur
/{config-name}
pour les configs (ou autre via target
)/run/secrets/{secret-name}
pour les secretsSolution #5 : solution native orchestrateur
Kubernetes (et dérivés) ConfigMaps
Solution #5
Avant de présenter la config au container
Nous avons besoin :
Proposition
Note : Un dépôt git peut contenir la configuration d'une ou plusieurs applications
Confd avec la source de valeurs "env"
Les utilisateurs collaborent sur la configuration par le biais de git et de la structure hiérarchisée
├── data
│ ├── dev-local (rep)
│ ├── acc-1 (rep)
│ ├── prod (rep)
│ └── common (rep)
└── dictionaries
├── dev-local (rep)
├── acc-1 (rep)
├── prod (rep)
└── common.dict (fic)
Confd avec la source de valeurs "env"
Les tags Git permettent de figer
une "version pour un env"
v0.2.3_dev-local
v0.2.4_acc-1
v0.2.4_dev-local
v0.2.4_prod
v0.2.5_acc-1
Confd avec la source de valeurs "env"
Les images des apps embarquent les modèles de fichier
└── src
├── main
│ ├── confd
│ │ ├── conf.d
│ │ └── templates
│ ├── java
│ │ └── net
│ ├── resources
│ └── scripts
└── test
└── java
└── net
Exemple de template
filter:
sanitize:
url: /api/v1/filter/sanitize
guestbook:
messages:
url: /api/v1/guestbook/messages
info:
custom:
env: {{ getv "/guestbook/shared/info/custom/env" }}
message: {{ getv "/guestbook/filter/info/custom/message" }}
Confd avec la source de valeurs "env"
Les images de configuration embarquent les fichiers bruts et les valeurs pour les modèles sous la forme de vars d'environnement
└── config
├── dictionnaries
│ └── env.sh
└── data
├── dummy.txt
└── filterDefinition.properties
Confd avec la source de valeurs "env"
Containers d’application :
Croisons les doigts
Coupure introspection
Étapes suivantes pour confd-data-container-generator
/config/dict/prod/v1.3.1/guestbook/...
Étapes suivantes
Servez-vous