J'ai la documentation concernant la configuration:
envFrom: - configMapRef: name: game-config-2
D'après ce que je comprends, je peux créer une carte de configuration (game-config-2) à partir de deux fichiers (game.properties et ui.properties) en utilisant
kubectl describe configmaps game-config-2 Name: game-config-2 Namespace: default Labels: <none> Annotations: <none> Data ==== game.properties: 158 bytes ui.properties: 83 bytes
Maintenant, je vois le configmap
kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/kubectl/game.properties --from-file=configure-pod-container/configmap/kubectl/ui.properties
Comment puis-je l'utiliser configmap? J'ai essayé de cette façon:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-container-environment-variables-using-configmap-data
Mais cela ne fonctionne pas, la variable env ne sélectionne pas dans la configmap. Ou puis-je avoir deux configMapRef sous envFrom?
5 Réponses :
Une solution à ce problème consiste à créer un ConfigMap avec plusieurs clés / valeurs de données:
apiVersion: v1 kind: ConfigMap metadata: name: conf data: game.properties: | <paste file content here> ui.properties: | <paste file content here>
N'oubliez pas le symbole |
avant de coller le contenu de fichiers.
J'ai créé cette carte de configuration mais lorsque je l'utilise dans le pod yaml. Il ne reprend pas les valeurs env. J'ai souligné la même chose dans la question.
dans pod.yaml vous avez envFrom: - configMapRef: name: conf?
pouvez-vous publier la sortie de kubectl describe pod
?
Je ne sais pas si vous pouvez charger toutes les paires clé: valeur d'un fichier spécifique dans une configuration en tant que variables d'environnement dans un pod. vous pouvez charger toutes les paires clé: valeur d'une configuration spécifique en tant que variables d'environnement dans un pod. voir ci-dessous
SPECIAL_LEVEL=very SPECIAL_TYPE=charm
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] envFrom: - configMapRef: name: special-config restartPolicy: Never
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: SPECIAL_LEVEL: very SPECIAL_TYPE: charm
Comme @Emruz_Hossain l'a mentionné, si game.properties et ui.properties n'ont que des variables env, cela peut fonctionner pour vous
kubectl create configmap game-config-2 --from-env-file=configure-pod-container/configmap/kubectl/game.properties --from-env-file=configure-pod-container/configmap/kubectl/ui.properties
Oui, un pod ou un déploiement peut obtenir env À partir d'un tas d'entrées configMapRef:
kubectl apply -f config_general.yaml kubectl apply -f encouragement-api/config_private.yaml
Il est préférable de les créer à partir de fichiers yaml pour la loi et l'ordre de k8:
config_general.yaml
apiVersion: v1 kind: ConfigMap metadata: name: private-config data: PRIVATE_STUFF: real_private
encouragement-api / config_private.yaml:
apiVersion: v1 kind: ConfigMap metadata: name: general-config data: HOSTNAME: Develop_hostname COMPUTERNAME: Develop_compname ASPNETCORE_ENVIRONMENT: Development
applique les deux configmaps:
spec: containers: - name: encouragement-api image: registry-......../....../encouragement.api ports: - containerPort: 80 envFrom: - configMapRef: name: general-config - configMapRef: name: private-config
Exécutez et exécutez dans le pod et exécutez env | grep PRIVATE && env | grep HOSTNAME
J'ai config_general.yaml qui traîne dans le même dépôt que le code des développeurs, ils peuvent le modifier comme ils le souhaitent. Les mots de passe et les valeurs sensibles sont conservés dans le fichier config_private.yaml qui se trouve ailleurs (un compartiment chiffré S3) et les valeurs y sont encodées en base64 pour un peu plus de sécurité.
Les fichiers multiples --from-env-file ne sont pas autorisés. Plusieurs --from-file fonctionneront pour vous.
Par exemple:
apiVersion: v1 data: config1.txt: | var1=val1 config2.txt: | var3=val3 var4=val4 kind: ConfigMap name: details2
k create cm details2 --from-file=config1.txt --from-file=config2.txt -o yaml --dry-run
apiVersion: v1 data: var3: val3 var4: val4 kind: ConfigMap name: details2
kubectl create cm details2 --from-env-file=config1.txt --from-env-file=config2.txt -o yaml --dry-run
cat config2.txt var3=val3 var4=val4
XXX
vos variables d'environnement attendues se trouvent-elles dans ces fichiers sous forme de paire clé-valeur? Si tel est le cas, vous devez utiliser
--from-env-file
au lieu de--from-file
.