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

Vik*_*ore 8 kubernetes configmap

我有关于 configmap 的文档:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-container-environment-variables-using-configmap-data
Run Code Online (Sandbox Code Playgroud)

据我所知,我可以从两个文件(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
Run Code Online (Sandbox Code Playgroud)

现在我看到了配置图

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
Run Code Online (Sandbox Code Playgroud)

我如何使用该配置映射?我试过这种方式:

    envFrom:
    - configMapRef:
        name: game-config-2
Run Code Online (Sandbox Code Playgroud)

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

Iva*_*cki 5

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

apiVersion: v1
kind: ConfigMap
metadata:
  name: conf
data:
  game.properties: |
    <paste file content here>
  ui.properties: |
    <paste file content here>
Run Code Online (Sandbox Code Playgroud)

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


Nah*_*paz 5

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

    spec:
      containers:
      - name: encouragement-api
        image: registry-......../....../encouragement.api
        ports:
        - containerPort: 80
        envFrom:
          - configMapRef:
              name: general-config
          - configMapRef:
              name: private-config
Run Code Online (Sandbox Code Playgroud)

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

config_general.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: general-config
data:
  HOSTNAME: Develop_hostname
  COMPUTERNAME: Develop_compname
  ASPNETCORE_ENVIRONMENT: Development
Run Code Online (Sandbox Code Playgroud)

鼓励-api/config_private.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: private-config
data:
  PRIVATE_STUFF: real_private
Run Code Online (Sandbox Code Playgroud)

应用两个配置映射:

kubectl apply -f config_general.yaml
kubectl apply -f encouragement-api/config_private.yaml
Run Code Online (Sandbox Code Playgroud)

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

我将 config_general.yaml 与开发人员的代码放在同一个 repo 中,他们可以随心所欲地更改它。密码和敏感值保存在 config_private.yaml 文件中,该文件位于其他地方(S3 加密存储桶),其中的值经过 base64 编码以提供额外的安全性。

  • 只是一个小注意事项 - 对于密码和敏感数据,最好使用 k8s Secret 而不是 ConfigMap。它们是专门为这种情况设计的 (2认同)