当前位置: 首页 > article >正文

Kubernetes ConfigMap 使用方式实验

实验目标

通过具体的实验步骤,展示如何在 Kubernetes 中使用 ConfigMap 的三种方式:

  1. 作为环境变量注入到 Pod 中。

  2. 作为命令行参数传递给容器。

  3. 挂载为卷,将 ConfigMap 的内容作为文件提供给 Pod。

实验环境

  • Kubernetes 集群(可以使用 Minikube 或其他 Kubernetes 环境)。

  • kubectl 命令行工具已配置并可以访问集群。

实验步骤

步骤 1:创建 ConfigMap

首先,创建一个 ConfigMap,用于后续的实验。

创建 ConfigMap 的 YAML 文件
  1. 创建一个名为 my-config.yaml 的文件,内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  key1: value1
  key2: value2

说明

  • apiVersion: v1:指定 Kubernetes API 的版本。

  • kind: ConfigMap:指定资源类型为 ConfigMap。

  • metadata.name:ConfigMap 的名称。

  • data:ConfigMap 中的键值对数据。

  1. 应用 YAML 文件创建 ConfigMap:

kubectl apply -f my-config.yaml
  1. 验证 ConfigMap 是否创建成功:

kubectl get configmap my-config
kubectl describe configmap my-config

步骤 2:将 ConfigMap 作为环境变量注入到 Pod 中

创建 Pod 的 YAML 文件
  1. 创建一个名为 pod-env.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-env
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "env && sleep 3600"]  # 打印环境变量并保持容器运行
    env:
    - name: KEY1
      valueFrom:
        configMapKeyRef:
          name: my-config  # 引用 ConfigMap 名称
          key: key1        # 引用 ConfigMap 中的键
    - name: KEY2
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: key2

说明

  • env:定义环境变量列表。

  • name: KEY1:定义环境变量名为 KEY1

  • valueFrom.configMapKeyRef:从 ConfigMap 中引用键值。

  • name: my-config:引用的 ConfigMap 名称。

  • key: key1:ConfigMap 中的键名。

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-env.yaml
  1. 查看 Pod 的日志,验证环境变量是否注入成功:

kubectl logs pod-env

预期输出
使用了 env 命令,它会打印容器中所有环境变量的键值对

步骤 3:将 ConfigMap 作为命令行参数注入到容器中

创建 Pod 的 YAML 文件
  1. 创建一个名为 pod-cmd.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-cmd
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "echo $KEY1 $KEY2 && sleep 3600"]  # 使用环境变量作为命令行参数
    env:
    - name: KEY1
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: key1
    - name: KEY2
      valueFrom:
        configMapKeyRef:
          name: my-config
          key: key2

说明

  • command:定义容器启动时执行的命令。

  • echo $KEY1 $KEY2:打印环境变量 KEY1KEY2 的值。

  • env:定义环境变量,从 ConfigMap 中引用值。

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-cmd.yaml
  1. 查看 Pod 的日志,验证命令行参数是否注入成功:

kubectl logs pod-cmd

预期输出

使用了 echo $KEY1 $KEY2,它仅打印两个特定环境变量的值

步骤 4:将 ConfigMap 挂载为卷

创建 Pod 的 YAML 文件
  1. 创建一个名为 pod-volume.yaml 的文件,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  containers:
  - name: my-container
    image: busybox
    command: ["sh", "-c", "cat /etc/config/key1 && sleep 3600"]  # 打印挂载的文件内容
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: my-config

说明

  • volumeMounts:定义容器挂载的卷

  • name: config-volume:引用卷的名称。

  • mountPath: /etc/config:挂载路径。

  • volumes:定义卷

  • configMap:指定卷的类型为 ConfigMap。

  • name: my-config:引用的 ConfigMap 名称。

  1. 应用 YAML 文件创建 Pod:

kubectl apply -f pod-volume.yaml
  1. 查看 Pod 的日志,验证挂载的文件内容是否正确:

kubectl describle pod-volume

预期输出

在 Pod 的定义中指定了 volumeMounts,这告诉 Kubernetes 需要将名为 config-volume 的卷挂载到容器的 /etc/config 路径下

步骤 5:清理资源

实验完成后,删除创建的资源:

kubectl delete pod pod-env pod-cmd pod-volume
kubectl delete configmap my-config

实验总结

通过上述实验,我们展示了如何在 Kubernetes 中使用 ConfigMap 的三种方式:

  1. 作为环境变量注入:通过 envconfigMapKeyRef,可以将 ConfigMap 中的键值对注入为 Pod 的环境变量。

  2. 作为命令行参数注入:通过环境变量将 ConfigMap 的值传递给容器的命令行。

  3. 挂载为卷:通过 volumeMountsvolumes,可以将 ConfigMap 的内容作为文件挂载到 Pod 的文件系统中。

这些方式各有用途,可以根据实际需求选择合适的使用方式。


http://www.kler.cn/a/579708.html

相关文章:

  • 1-001:MySQL的存储引擎有哪些?它们之间有什么区别?
  • ECMA Script6新特性(上)
  • 在本地部署DeepSeek等大模型时,需警惕的潜在安全风险
  • 深度学习训练Camp:第R5周:天气预测
  • CEH与OSCP:网络安全认证对比分析
  • QSpinBox 介绍
  • 手写 Promise 的实现
  • 【YOLOv12改进trick】医学图像分割网络CMUNeXt引入YOLOv12中,增强全局上下文信息实现涨点,含创新点Python代码,方便发论文
  • Liunx系统 : 进程间通信【IPC-Shm共享内存】
  • AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录
  • C#实现高性能异步文件下载器(支持进度显示/断点续传)
  • Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
  • 搜广推校招面经四十一
  • 【C】链式二叉树算法题2
  • P2P中NAT穿越方案(UDP/TCP)(转)
  • SQLite与Room持久化
  • 架构思维:高性能架构_01基础概念
  • Github Copilot:企业管理员获取度量数据metrics
  • 深入解析Java包装类型:从基础到高级应用
  • 【Linux docker】关于docker启动出错的解决方法。