Kubernetes ConfigMap 使用方式实验
实验目标
通过具体的实验步骤,展示如何在 Kubernetes 中使用 ConfigMap 的三种方式:
-
作为环境变量注入到 Pod 中。
-
作为命令行参数传递给容器。
-
挂载为卷,将 ConfigMap 的内容作为文件提供给 Pod。
实验环境
-
Kubernetes 集群(可以使用 Minikube 或其他 Kubernetes 环境)。
-
kubectl
命令行工具已配置并可以访问集群。
实验步骤
步骤 1:创建 ConfigMap
首先,创建一个 ConfigMap,用于后续的实验。
创建 ConfigMap 的 YAML 文件
-
创建一个名为
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 中的键值对数据。
-
应用 YAML 文件创建 ConfigMap:
kubectl apply -f my-config.yaml
-
验证 ConfigMap 是否创建成功:
kubectl get configmap my-config
kubectl describe configmap my-config
步骤 2:将 ConfigMap 作为环境变量注入到 Pod 中
创建 Pod 的 YAML 文件
-
创建一个名为
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 中的键名。
-
应用 YAML 文件创建 Pod:
kubectl apply -f pod-env.yaml
-
查看 Pod 的日志,验证环境变量是否注入成功:
kubectl logs pod-env
预期输出:
使用了 env
命令,它会打印容器中所有环境变量的键值对
步骤 3:将 ConfigMap 作为命令行参数注入到容器中
创建 Pod 的 YAML 文件
-
创建一个名为
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
:打印环境变量KEY1
和KEY2
的值。 -
env
:定义环境变量,从 ConfigMap 中引用值。
-
应用 YAML 文件创建 Pod:
kubectl apply -f pod-cmd.yaml
-
查看 Pod 的日志,验证命令行参数是否注入成功:
kubectl logs pod-cmd
预期输出:
使用了 echo $KEY1 $KEY2
,它仅打印两个特定环境变量的值
步骤 4:将 ConfigMap 挂载为卷
创建 Pod 的 YAML 文件
-
创建一个名为
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 名称。
-
应用 YAML 文件创建 Pod:
kubectl apply -f pod-volume.yaml
-
查看 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 的三种方式:
-
作为环境变量注入:通过
env
和configMapKeyRef
,可以将 ConfigMap 中的键值对注入为 Pod 的环境变量。 -
作为命令行参数注入:通过环境变量将 ConfigMap 的值传递给容器的命令行。
-
挂载为卷:通过
volumeMounts
和volumes
,可以将 ConfigMap 的内容作为文件挂载到 Pod 的文件系统中。
这些方式各有用途,可以根据实际需求选择合适的使用方式。