我正在尝试在 Kubernetes 环境中启动并运行 redis。我已经完成了许多教程,阅读了文档等。我需要将 .rdb 文件和 .aof 文件保存在持久卷中,以便数据可以在 Pod(或容器)故障/删除/等情况下持久保存。我有一个 redis 实例正在启动,并且我正在试使用自定义配置文件。所有 pod 都已创建并正常运行,自定义配置文件中的save
和变量也已更新/更正(其他变量为默认值)。但是,和变量均未更新。无论我做什么,它们都保持默认值。appendonly
daemonize
dir
自定义配置文件:
daemonize yes
cluster-enabled no
dir /redis/storage
port 6397
save 60 5
save 300 1
appendonly yes
我尝试使用配置映射来创建自定义配置文件,然后使用spec.template.spec.containers.command/spec.template.spec.containers.args
将自定义配置文件(名为 redis-stack.conf)复制到/etc/
,其中有一个 redis-stack.conf 文件,该文件会被自定义配置文件中的数据覆盖。执行复制命令后,我得到了redis-stack-server /etc/redis-stack.conf
。当我执行时kubectl apply -f <filename>.conf
,然后获取其中一个创建的 pod 的 bash shell 并执行redis-cli CONFIG GET DIR
它返回默认目录。
我尝试redis-cli CONFIG SET DIR <custom dir>
在字符串末尾添加spec.template.spec.containers.command/spec.template.spec.containers.args
,但也没有用。日志中没有错误,只有成功事件。
我搜索过网络,但找到的解决类似问题的答案却不能解决我的问题。
任何帮助都将受到赞赏。
答案1
我找到了答案。让它使用自定义持久性目录的唯一方法是在 spec.template.spec.containers.args 中启动 redis-stack-server 时将该目录添加为命令行参数(其中 spec.template.spec.containers.command 为 [“sh”, “-c”])。所以 spec.template.spec.container.args 是redis-stack-server /path/to/custom-config.conf --dir /path/to/mounted/persistent-volume
。这会从自定义配置文件中加载所有内容(守护进程除外,我认为在我的情况下它实际上需要为 no),并正确设置自定义持久性目录。
令人惊奇的是,在工作中休息两周可以大大有助于解决问题。;-)
答案2
你可以这样做
redis-stack-server redis-stack.conf --dir /path/to/data --daemonize yes