6
votes

kubernetes: Comment créer et utiliser configmap à partir de plusieurs fichiers

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?


1 commentaires

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 .


5 Réponses :


4
votes

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.


3 commentaires

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 ?



0
votes

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

Vérifiez que le pod affiche les variables d'environnement ci-dessous

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  SPECIAL_LEVEL: very
  SPECIAL_TYPE: charm


0 commentaires

-1
votes

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


0 commentaires

3
votes

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é.


0 commentaires

0
votes

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


0 commentaires