k8s中,configMap与环境变量的关系

总结

在Kubernetes中,ConfigMap和环境变量都可以用于向容器传递配置信息。以下是它们的区别:

  • 环境变量:这是一种将配置信息直接注入到容器中的方法。它们在容器启动时被设置,并且在容器的生命周期内保持不变。
  • ConfigMap:这是一种在Kubernetes集群中存储和管理非机密配置信息的方法。ConfigMap可以被多个Pod共享,并且可以在运行时更新。可以将ConfigMap数据注入到容器中作为环境变量或挂载到文件系统中的文件。

一个使用ConfigMap和环境变量的Kubernetes示例

  1. 创建一个ConfigMap:
yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap
data:
  my_key: my_value
  another_key: another_value

将此配置保存为configmap.yaml,然后使用kubectl命令创建ConfigMap:

bash 复制代码
kubectl apply -f configmap.yaml
  1. 创建一个Deployment,其中包含使用ConfigMap和环境变量的Pod:
yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image
          env:
            - name: MY_ENV_VAR
              value: my_env_value
            - name: MY_CONFIGMAP_KEY
              valueFrom:
                configMapKeyRef:
                  name: my-configmap
                  key: my_key
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config
      volumes:
        - name: config-volume
          configMap:
            name: my-configmap

在此示例中,我们创建了一个Deployment,其中包含一个使用ConfigMap和环境变量的Pod。Pod中的容器有两个环境变量:

  • MY_ENV_VAR:这是一个直接设置的环境变量,值为my_env_value
  • MY_CONFIGMAP_KEY:这是一个从ConfigMap中获取值的环境变量。它使用my-configmap中的my_key键的值。

此外,我们还将整个ConfigMap挂载到容器的文件系统中,位于/etc/config目录下。这意味着容器中的/etc/config/my_key文件的内容将是my_value/etc/config/another_key文件的内容将是another_value

将此配置保存为deployment.yaml,然后使用kubectl命令创建Deployment:

bash 复制代码
kubectl apply -f deployment.yaml

总之,在Kubernetes中,可以使用环境变量直接将配置信息注入到容器中,或者使用ConfigMap在集群中存储和管理配置信息。可以将ConfigMap数据作为环境变量或挂载到文件系统中的文件来使用。

上面代码中volumeMounts与volumes中,name的关系

在Kubernetes中,volumeMountsvolumes之间的name字段表示它们之间的关联关系。volumeMounts中的name需要与volumes中对应的name相等,以便将指定的卷挂载到容器中的正确位置。

简而言之,volumeMounts定义了容器中的挂载点,而volumes定义了要挂载的实际存储卷。它们之间通过相同的name字段建立关联。

在上面的示例中,volumeMountsvolumesname字段都设置为config-volume。这意味着名为config-volume的卷将被挂载到容器中的/etc/config目录。由于config-volume卷是从名为my-configmap的ConfigMap创建的,因此/etc/config目录将包含ConfigMap中的键值对作为文件。

相关推荐
海兰3 小时前
Kibana Dashboard as Code:Elastic 9.4 如何用 Terraform 和类型化 API 终结“JSON 垃圾袋“
云原生·json·terraform
geshifei5 小时前
K8s 容器运行 UnixBench — 代理机器执行记录
云原生·容器·kubernetes
Albert Edison7 小时前
【Docker】Ubuntu22.04 安装 Docker 教程
运维·docker·容器
codefan※8 小时前
一键部署私人 LLM:Ollama + Docker 极简指南
运维·docker·容器·大模型·llm·本地部署·ollama
阿里云云原生8 小时前
可观测性的终局?从“面向数据”到“面向对象”,UModel 如何为 AI Agent 注入认知地图
云原生·agent
李南想做条咸鱼9 小时前
k8s集群容器访问域名第一次不通,第二次必通如何解决
云原生·容器·kubernetes
FelixBitSoul10 小时前
K8s 调度器黑盒全拆解:拓扑约束数学陷阱 + Go 插件二开实战(避坑全记录)
容器·kubernetes
叶~小兮10 小时前
K8s常用组件学习笔记
笔记·学习·kubernetes
ん贤10 小时前
Volcano 详细笔记
云原生·volcano
IT策士10 小时前
Docker 网络进阶:容器间通信与 DNS 解析
网络·docker·容器