使用 ConfigMap 来配置 Redis

    • 使用 Redis 配置的值创建一个 ConfigMap
    • 创建一个 Redis Pod,挂载并使用创建的 ConfigMap
    • 验证配置已经被正确应用

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 .

    • 此页面上显示的示例适用于 kubectl 1.14 及以上的版本。
    • 理解。

    按照下面的步骤,使用 ConfigMap 中的数据来配置 Redis 缓存。

    首先创建一个配置模块为空的 ConfigMap:

    应用上面创建的 ConfigMap 以及 Redis pod 清单:

    1. kubectl apply -f example-redis-config.yaml
    2. 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].items[0] 下的 keypath 会将来自 example-redis-config ConfigMap 中的 redis-config 密钥公开在 config 卷上一个名为 redis.conf 的文件中。
    • 然后 config 卷被 spec.containers[0].volumeMounts[1] 挂载在 /redis-master

    这样做的最终效果是将上面 example-redis-config 配置中 data.redis-config 的数据作为 Pod 中的 /redis-master/redis.conf 公开。

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: redis
    5. spec:
    6. containers:
    7. - name: redis
    8. image: redis:5.0.4
    9. command:
    10. - redis-server
    11. - "/redis-master/redis.conf"
    12. env:
    13. - name: MASTER
    14. value: "true"
    15. ports:
    16. - containerPort: 6379
    17. resources:
    18. limits:
    19. volumeMounts:
    20. - mountPath: /redis-master-data
    21. name: data
    22. name: config
    23. volumes:
    24. - name: data
    25. emptyDir: {}
    26. - name: config
    27. configMap:
    28. name: example-redis-config
    29. items:
    30. - key: redis-config
    31. path: redis.conf

    检查创建的对象:

    1. kubectl get pod/redis configmap/example-redis-config

    你应该可以看到以下输出:

    1. NAME READY STATUS RESTARTS AGE
    2. pod/redis 1/1 Running 0 8s
    3. NAME DATA AGE
    4. configmap/example-redis-config 1 14s
    1. kubectl describe configmap/example-redis-config

    你应该可以看到一个空的 redis-config 键:

    1. Name: example-redis-config
    2. Namespace: default
    3. Labels: <none>
    4. Annotations: <none>
    5. Data
    6. ====
    7. redis-config:

    使用 kubectl exec 进入 pod,运行 redis-cli 工具检查当前配置:

    1. kubectl exec -it redis -- redis-cli

    查看 maxmemory

    1. 127.0.0.1:6379> CONFIG GET maxmemory

    它应该显示默认值 0:

    同样,查看 maxmemory-policy

    1. 127.0.0.1:6379> CONFIG GET maxmemory-policy

    它也应该显示默认值 noeviction

    1. 1) "maxmemory-policy"
    2. 2) "noeviction"

    现在,向 example-redis-config ConfigMap 添加一些配置:

    pods/config/example-redis-config.yaml 使用 ConfigMap 来配置 Redis - 图2

    1. metadata:
    2. name: example-redis-config
    3. data:
    4. redis-config: |
    5. maxmemory 2mb
    6. maxmemory-policy allkeys-lru

    应用更新的 ConfigMap:

    1. kubectl apply -f example-redis-config.yaml

    确认 ConfigMap 已更新:

    1. kubectl describe configmap/example-redis-config
    1. Name: example-redis-config
    2. Namespace: default
    3. Labels: <none>
    4. Annotations: <none>
    5. Data
    6. ====
    7. redis-config:
    8. ----
    9. maxmemory 2mb
    10. maxmemory-policy allkeys-lru

    通过 kubectl exec 使用 redis-cli 再次检查 Redis Pod,查看是否已应用配置:

    1. kubectl exec -it redis -- redis-cli

    查看 maxmemory

    1. 127.0.0.1:6379> CONFIG GET maxmemory

    它保持默认值 0:

    同样,maxmemory-policy 保留为默认设置 noeviction

    1. 127.0.0.1:6379> CONFIG GET maxmemory-policy

    返回:

    1. 1) "maxmemory-policy"
    2. 2) "noeviction"

    配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。 让我们删除并重新创建 Pod:

    1. kubectl delete pod redis
    2. kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml

    现在,最后一次重新检查配置值:

    1. kubectl exec -it redis -- redis-cli

    查看 maxmemory

    1. 127.0.0.1:6379> CONFIG GET maxmemory

    现在,它应该返回更新后的值 2097152:

    1. 1) "maxmemory"
    2. 2) "2097152"

    同样,maxmemory-policy 也已更新:

    1. 127.0.0.1:6379> CONFIG GET maxmemory-policy
    1. 1) "maxmemory-policy"

    删除创建的资源,清理你的工作: