redis - 带有 Redis 的 Kubernetes 配置映射

标签 redis kubernetes

我在关注这个 tutorial为 redis.conf 设置配置映射。创建 Redis 部署后,我检查以确保每个 pod 中都有 redis.conf 文件,并且它们都在那里。问题是当进入 redis-cli 并检查那里的配置时,没有使用 redis.conf 值。正在使用默认值,就好像 Redis 没有使用 redis.conf 文件启动一样。

redis.conf

maxclients 2000
requirepass "test"

redis 配置配置图

{
    "apiVersion": "v1",
    "data": {
        "redis-config": "maxclients 2000\nrequirepass \"test\"\n\n"
    },
    "kind": "ConfigMap",
    "metadata": {
        "creationTimestamp": "2018-03-07T15:28:19Z",
        "name": "redis-config",
        "namespace": "default",
        "resourceVersion": "2569562",
        "selfLink": "/api/v1/namespaces/default/configmaps/redis-config",
        "uid": "29d250ea-221c-11e8-969f-06c0c8d545d2"
    }
}

k8 redis list .json

{
    "kind" : "Deployment",
    "apiVersion" : "extensions/v1beta1",
    "metadata" : {
        "name" : "redis-master",
        "creationTimestamp" : null
    },
    "spec" : {
        "replicas" : 2,
        "template" : {
            "metadata" : {
                "creationTimestamp" : null,
                "labels" : {
                    "app" : "redis",
                    "role" : "master",
                    "tier" : "backend"
                }
            },
            "spec" : {
                "hostNetwork" : true,
                "nodeSelector" :{ "role": "cache"},
                "containers" : [{
                        "name" : "master",
                        "image" : "redis",
                        "ports" : [{
                                "containerPort" : 6379,
                                "hostPort" : 6379,
                                "protocol" : "TCP"
                            }
                        ],
                        "volumeMounts" : [{
                                "mountPath" : "/redis-master",
                                "name": "config"
                            }
                        ],
                        "resources" : {},
                        "terminationMessagePath" : "/dev/termination-log",
                        "imagePullPolicy" : "IfNotPresent"
                    }],
                "volumes" : [{
                    "name" : "config",
                    "configMap" : {
                        "name" : "redis-config",
                        "items": [{
                            "key": "redis-config",
                            "path": "redis.conf"
                        }]
                        }
                    }
                ],    
                "restartPolicy" : "Always",
                "terminationGracePeriodSeconds" : 30,
                "dnsPolicy" : "ClusterFirst",
                "securityContext" : {}
            }
        }
    },
    "status" : {}
}

现在我知道教程使用 Pod 类型,而我使用的是 Deployment 类型,但我认为这不是这里的问题。

最佳答案

看起来您正在拉取默认的 redis 容器。如果您检查 redis Dokerfiles,例如 https://github.com/docker-library/redis/blob/d53b982b387634092c6f11069401679034054ecb/4.0/alpine/Dockerfile ,在底部,他们有:

CMD ["redis-server"]

这将使用默认配置启动 redis。

根据 redis 文档: https://redis.io/topics/quickstart 在“启动 Redis”部分下,如果您想提供不同的配置,则需要使用以下命令启动 Redis:

redis-server <config file>

此外,Kubernetes 文档中的示例使用了不同的 redis 容器:

image: kubernetes/redis

来自 Dokerfile:https://github.com/kubernetes/kubernetes/blob/master/examples/storage/redis/image/Dockerfile , 似乎是使用提供的配置启动 Redis。

关于redis - 带有 Redis 的 Kubernetes 配置映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49156985/

相关文章:

spring - 我们可以将单个 JedisConnectionFactory 实例与多个 spring redis 模板一起使用吗?

java - 更改用户对象或 java 对象并影响 Redis 缓存数据

ruby-on-rails - Sidekiq 无法连接到 Redis 服务器

kubernetes - 如何使用变异 webhook 变异 kubernetes 资源 'bindings'

Linux - 仅安装 redis-cli

node.js - Redis - 在事务中使用 Incr 值

docker - Jenkins和Kubernetes在同一虚拟机中

kubernetes - 纠正 GKE 集群中的时钟偏差

mysql - 无法为 wordpress 和 mysql 制作具有持久数据工作的 kubernetes 示例

Kubernetes - 什么是命令式和声明式