kubernetes:如何从多个文件创建和使用configmap

时间:2019-02-12 11:43:28

标签: kubernetes configmap

我有关于configmap的文档:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-container-environment-variables-using-configmap-data

据我了解,我可以从两个文件创建一个配置映射(game-config-2) (game.properties和ui.properties)使用

kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/kubectl/game.properties --from-file=configure-pod-container/configmap/kubectl/ui.properties

现在我看到configmap

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

如何使用该configmap?我尝试过这种方式:

    envFrom:
    - configMapRef:
        name: game-config-2

但这不起作用,env变量未从configmap中选取。或者我可以在envFrom下有两个configMapRef?

5 个答案:

答案 0 :(得分:3)

是的,pod或部署可以从一堆configMapRef条目中获取环境:

python.exe

最好从Yaml文件中为k8s法治创建它们:

config_general.yaml

Anaconda3

encouragement-api / config_private.yaml:

    spec:
      containers:
      - name: encouragement-api
        image: registry-......../....../encouragement.api
        ports:
        - containerPort: 80
        envFrom:
          - configMapRef:
              name: general-config
          - configMapRef:
              name: private-config

应用两个configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: general-config
data:
  HOSTNAME: Develop_hostname
  COMPUTERNAME: Develop_compname
  ASPNETCORE_ENVIRONMENT: Development

运行并执行到pod中,然后运行apiVersion: v1 kind: ConfigMap metadata: name: private-config data: PRIVATE_STUFF: real_private

我将config_general.yaml与开发人员的代码放置在相同的存储库中,他们可以随意更改它。密码和敏感值保存在config_private.yaml文件中,该文件位于其他位置(S3加密存储区),其中的值都经过base64编码,从而提高了安全性。

答案 1 :(得分:1)

解决此问题的一种方法是使用多个数据键/值创建ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
  game.properties: |
    <paste file content here>
  ui.properties: |
    <paste file content here>

在粘贴文件内容之前,请不要忘记|符号。

答案 2 :(得分:0)

不确定是否可以从configmap中的特定文件中加载所有key:value对作为pod中的环境变量。您可以将特定配置图中的所有key:value对作为环境变量加载到pod中。见下文

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  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

验证pod是否在环境变量下面显示

SPECIAL_LEVEL=very
SPECIAL_TYPE=charm

答案 3 :(得分:0)

如@Emruz_Hossain所述,如果game.properties和ui.properties仅具有env变量,那么它可以为您工作

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

答案 4 :(得分:0)

不允许多个--from-env-file。 多个--from-file将为您工作。

例如:

cat config1.txt 
    var1=val1

cat config2.txt 
    var3=val3
    var4=val4

kubectl create cm details2 --from-env-file=config1.txt --from-env-file=config2.txt -o yaml --dry-run

输出

apiVersion: v1
data:
  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:
  config1.txt: |
    var1=val1
  config2.txt: |
    var3=val3
    var4=val4
kind: ConfigMap
  name: details2