配置 Valkey 参数

将 Valkey server 指令以字符串值的形式设置在 spec.customConfigs 中。Operator 会渲染配置,将其与上次应用的版本进行比较,并且要么对就绪节点执行 CONFIG SET,要么触发滚动重启。

更改参数之前

  1. 记录当前的 Valkey specification,以及所有可能不同的 architecture role 的有效值。
  2. 验证目标 Valkey 版本中是否存在该指令,并确认其接受的值类型和单位。
  3. 确定该更改是否会影响内存、持久化、网络、客户端超时或数据持久性。
  4. 一次只应用一个一致的参数更改,并等待 Ready
  5. 在需要重启或影响持久化的更改之前,完成外部数据保护。

应用热配置更改

kubectl -n default patch valkey valkey-cluster --type=merge -p '
{
  "spec": {
    "customConfigs": {
      "maxmemory-policy": "allkeys-lfu",
      "timeout": "120",
      "tcp-keepalive": "300"
    }
  }
}'
kubectl -n default get valkey valkey-cluster -w

未列为禁止或需要重启的参数会尝试作为热更新来应用。如果所选 Valkey 版本不允许运行时修改,某个指令仍然可能失败。某个指令未出现在 Operator 的列表中,并不代表它与 Valkey 兼容。请检查 .status.message、Events 和 server logs。

要仅删除一个 map key,而不替换其他自定义配置,请使用带有 null 值的 JSON merge patch:

kubectl -n default patch valkey valkey-cluster --type=merge \
  -p '{"spec":{"customConfigs":{"timeout":null}}}'

需要重启的参数

更改以下任一指令都会触发滚动重启:

  • tcp-backlog
  • databases
  • rdbchecksum
  • io-threads
  • io-threads-do-reads
  • loadmodule

请评估可用性影响,并等待实例返回 Ready

在此 baseline 中不要使用 rename-command。尽管 restart-policy map 将其标记为需要重启,但 Cluster 和 Failover 配置渲染器都会跳过该指令,因此请求的值不会写入 valkey.conf。同样,loadmodule 可能会触发重启逻辑,但由于标准已检查镜像中不包含任何 module 文件,因此无法加载任何内容。

Operator 拥有或被禁止的参数

Operator 会过滤以下指令,因为它负责 networking、TLS、process、storage paths、replication、Cluster membership 或 access control list (ACL) 配置:

include, bind, protected-mode, port, tls-port, tls-cert-file,
tls-key-file, tls-ca-cert-file, tls-ca-cert-dir, unixsocket,
unixsocketperm, daemonize, supervised, pidfile, logfile,
syslog-enabled, syslog-ident, syslog-facility, always-show-logo,
dbfilename, appendfilename, dir, slaveof, replicaof, gopher-enabled,
aclfile, requirepass, masterauth, masteruser, primaryauth,
primaryuser, tls-key-file-pass, tls-client-key-file-pass,
slave-announce-ip, replica-announce-ip, slave-announce-port,
replica-announce-port, cluster-enabled, cluster-config-file

请使用 spec.accessspec.storageUser 和 topology 字段,而不是直接设置这些生成的指令。

该过滤会在所有配置路径上以不区分大小写的方式匹配指令名称,包括 Sentinel,因此像 RequirePass 这样的不同大小写键也会被移除;大小写变体不是覆盖 Operator 拥有的设置的方式。仍应使用完全小写的 server 拼写来写入键:渲染后的配置和官方 Valkey 文档都使用小写指令名称。

配置 Sentinel 监控

对于 Failover 架构,支持的高级监控设置为 down-after-millisecondsfailover-timeoutparallel-syncs

kubectl -n default patch valkey valkey-failover --type=merge -p '
{
  "spec": {
    "sentinel": {
      "monitorConfig": {
        "down-after-milliseconds": "30000",
        "failover-timeout": "180000",
        "parallel-syncs": "1"
      }
    }
  }
}'

这些值会影响故障检测和恢复行为。请根据网络延迟、Pod 重启时间、quorum 和应用重试策略进行验证;不要仅为了让测试 failover 看起来更快而降低计时器。

放入 monitorConfig 的其他键会原样传递给 SENTINEL SET,不经过 Operator 验证。除非 release validation 已批准针对所选 server line 的额外指令,否则仅使用文档中说明的设置。

验证有效配置

选择一个就绪的数据 Pod,并查询目标键:

kubectl -n default get pods -l buf.red/name=valkey-cluster
kubectl -n default exec <pod-name> -c valkey -- \
  valkey-cli CONFIG GET maxmemory-policy timeout tcp-keepalive

如果启用了 ACL authentication,请使用 --user <username> --askpass。使用 TLS 时,请从可获取已签发证书的位置运行 CLI,并添加 Access and TLS 中描述的 TLS 选项。

在交付的 server 镜像中,像 requirepassprimaryauth 这样的 credential 指令会在 CONFIG GET 输出中被隐藏:已设置的 credential 会显示为固定占位符,而不是其值。不要使用 CONFIG GET 读取密码;密码通过 Kubernetes Secrets 和 User resource 管理。

删除一个 map entry 会更新生成的配置,但被检查的热更新路径不会发出补偿性的 CONFIG SET 来恢复正在运行的值。删除后请查询每个受影响的节点。如果运行时值必须更改,请使用单独审查过的重启,并验证重启后的值。

指令名称、可变性和默认值会因具体 server 版本而异。请针对正在运行的版本使用 CONFIG GET 和官方 Valkey command index;Operator 的列表描述的是协调行为,而不是完整的 server 配置契约。