你正在查看的文档所针对的是 Kubernetes 版本: v1.31
Kubernetes v1.31 版本的文档已不再维护。你现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。
使用 ConfigMap 来配置 Redis
这篇文档基于配置 Pod 以使用 ConfigMap 这个任务,提供了一个使用 ConfigMap 来配置 Redis 的真实案例。
教程目标
- 使用 Redis 配置的值创建一个 ConfigMap
- 创建一个 Redis Pod,挂载并使用创建的 ConfigMap
- 验证配置已经被正确应用
准备开始
你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:
要获知版本信息,请输入kubectl version. - 此页面上显示的示例适用于
kubectl1.14 及以上的版本。 - 理解配置 Pod 以使用 ConfigMap。
真实世界的案例:使用 ConfigMap 来配置 Redis
按照下面的步骤,使用 ConfigMap 中的数据来配置 Redis 缓存。
首先创建一个配置模块为空的 ConfigMap:
cat <<EOF >./example-redis-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: example-redis-config data: redis-config: "" EOF 应用上面创建的 ConfigMap 以及 Redis Pod 清单:
kubectl apply -f example-redis-config.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml 检查 Redis pod 清单的内容,并注意以下几点:
- 由
spec.volumes[1]创建一个名为config的卷。 spec.volumes[1].configMap.items[0]下的key和path会将来自example-redis-configConfigMap 中的redis-config键公开在config卷上一个名为redis.conf的文件中。- 然后
config卷被spec.containers[0].volumeMounts[1]挂载在/redis-master。
这样做的最终效果是将上面 example-redis-config 配置中 data.redis-config 的数据作为 Pod 中的 /redis-master/redis.conf 公开。
apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: redis:5.0.4 command: - redis-server - "/redis-master/redis.conf" env: - name: MASTER value: "true" ports: - containerPort: 6379 resources: limits: cpu: "0.1" volumeMounts: - mountPath: /redis-master-data name: data - mountPath: /redis-master name: config volumes: - name: data emptyDir: {} - name: config configMap: name: example-redis-config items: - key: redis-config path: redis.conf 检查创建的对象:
kubectl get pod/redis configmap/example-redis-config 你应该可以看到以下输出:
NAME READY STATUS RESTARTS AGE pod/redis 1/1 Running 0 8s NAME DATA AGE configmap/example-redis-config 1 14s 回顾一下,我们在 example-redis-config ConfigMap 保留了空的 redis-config 键:
kubectl describe configmap/example-redis-config 你应该可以看到一个空的 redis-config 键:
Name: example-redis-config Namespace: default Labels: <none> Annotations: <none> Data ==== redis-config: 使用 kubectl exec 进入 pod,运行 redis-cli 工具检查当前配置:
kubectl exec -it redis -- redis-cli 查看 maxmemory:
127.0.0.1:6379> CONFIG GET maxmemory 它应该显示默认值 0:
1) "maxmemory" 2) "0" 同样,查看 maxmemory-policy:
127.0.0.1:6379> CONFIG GET maxmemory-policy 它也应该显示默认值 noeviction:
1) "maxmemory-policy" 2) "noeviction" 现在,向 example-redis-config ConfigMap 添加一些配置:
apiVersion: v1 kind: ConfigMap metadata: name: example-redis-config data: redis-config: | maxmemory 2mb maxmemory-policy allkeys-lru 应用更新的 ConfigMap:
kubectl apply -f example-redis-config.yaml 确认 ConfigMap 已更新:
kubectl describe configmap/example-redis-config 你应该可以看到我们刚刚添加的配置:
Name: example-redis-config Namespace: default Labels: <none> Annotations: <none> Data ==== redis-config: ---- maxmemory 2mb maxmemory-policy allkeys-lru 通过 kubectl exec 使用 redis-cli 再次检查 Redis Pod,查看是否已应用配置:
kubectl exec -it redis -- redis-cli 查看 maxmemory:
127.0.0.1:6379> CONFIG GET maxmemory 它保持默认值 0:
1) "maxmemory" 2) "0" 同样,maxmemory-policy 保留为默认设置 noeviction:
127.0.0.1:6379> CONFIG GET maxmemory-policy 返回:
1) "maxmemory-policy" 2) "noeviction" 配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。 让我们删除并重新创建 Pod:
kubectl delete pod redis kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml 现在,最后一次重新检查配置值:
kubectl exec -it redis -- redis-cli 查看 maxmemory:
127.0.0.1:6379> CONFIG GET maxmemory 现在,它应该返回更新后的值 2097152:
1) "maxmemory" 2) "2097152" 同样,maxmemory-policy 也已更新:
127.0.0.1:6379> CONFIG GET maxmemory-policy 现在它反映了期望值 allkeys-lru:
1) "maxmemory-policy" 2) "allkeys-lru" 删除创建的资源,清理你的工作:
kubectl delete pod/redis configmap/example-redis-config 接下来
- 了解有关 ConfigMap 的更多信息。
- 学习通过 ConfigMap 更新配置的示例。