9

我有关于 configmap 的文档:

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

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

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

现在我看到了配置图

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

我如何使用该配置映射?我试过这样:

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

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

4

6 回答 6

6

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

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

最好从 yaml 文件中为 k8s 法律和秩序创建它们:

config_general.yaml

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

鼓励-api/config_private.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: private-config
data:
  PRIVATE_STUFF: real_private

应用两个配置映射:

kubectl apply -f config_general.yaml
kubectl apply -f encouragement-api/config_private.yaml

运行并执行到 pod 中并运行env |grep PRIVATE && env |grep HOSTNAME

我将 config_general.yaml 与开发人员的代码放在同一个仓库中,他们可以随意更改它。密码和敏感值保存在 config_private.yaml 文件中,该文件位于其他位置(S3 加密存储桶),其中的值采用 base64 编码以增加安全性。

于 2020-07-01T10:24:46.377 回答
5

此问题的一种解决方案是创建一个具有多个数据键/值的 ConfigMap:

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

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

于 2019-02-12T14:03:38.680 回答
1

不允许使用多个 --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
于 2020-09-12T09:35:54.230 回答
0

不确定您是否可以从配置映射中的特定文件加载所有键:值对作为 pod 中的环境变量。您可以将特定配置映射中的所有键:值对作为环境变量加载到 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 是否显示在 env 变量下方

SPECIAL_LEVEL=very
SPECIAL_TYPE=charm
于 2019-02-13T08:18:58.390 回答
0

如果你使用 Helm,那就简单多了。创建这样的ConfigMap模板

kind: ConfigMap
apiVersion: v1
metadata:
  name: {{ .Values.configMapName }}
data:
  {{ .Values.gameProperties.file.name }}: |
  {{ tpl (.Files.Get .Values.gameProperties.file.path) }}
  {{ .Values.uiProperties.file.name }}: |
  {{ tpl (.Files.Get .Values.uiProperties.file.path) }}

和两个带有键的文件:像这样的值对game.properties

GAME_NAME: NFS

和另一个文件ui.properties

GAME_UI: NFS UI

应该values.yaml喜欢这个

configMapName: game-config-2
gameProperties:
  file:
    name: game.properties
    path: "properties/game.properties"
uiProperties:
  file:
    name: ui.properties
    path: "properties/ui.properties"

您可以验证模板是否将values.yaml文件中的值插入helm template .,您可以将其作为输出

kind: ConfigMap
apiVersion: v1
metadata:
  name: game-config-2
data:
  game.properties: |
    GAME_NAME: NFS
  ui.properties: |
    GAME_UI: NFS UI
于 2022-01-27T14:50:27.577 回答
-2

正如@Emruz_Hossain 提到的,如果 game.properties 和 ui.properties 只有环境变量,那么这对你有用

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
于 2019-04-09T09:24:03.673 回答