0
点赞
收藏
分享

微信扫一扫

K8s使用ConfigMap配置Redis


按照下面的步骤,使用 ConfigMap 中的数据来配置 Redis 缓存。
首先创建一个配置模块为空的 ConfigMap:

cat <<EOF >./example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: ""

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

kubectl apply -f example-redis-config.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/pods/config/redis-pod.yaml

检查 Redis pod 清单的内容,并注意以下几点:

  • 由 spec.volumes[1] 创建一个名为 config 的卷。
  • spec.volumes[1].items[0] 下的 key 和 path 会将来自 example-redis-config ConfigMap 中的 redis-config 密钥公开在 config 卷上一个名为 redis-config 的文件中。
  • 然后 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:

检查创建的对象: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
====

使用 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>

它也应该显示默认值 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
====

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

127.0.0.1:6379>

它保持默认值 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/master/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


举报

相关推荐

0 条评论