升级 Valkey

通过在所属的 Valkey 资源上增加 spec.version 来执行升级。validating webhook 会拒绝版本降级。

2.0.0 产品支持 Valkey 7.2、8.1 和 9.1。源代码只能证明 webhook 会拒绝较低的目标版本;它既没有定义经过测试的源到目标矩阵,也不能证明顺序升级或跳级升级是安全的。在更改生产实例之前,请从交付的 release validation 中获取该矩阵。

开始前

  1. 确认该实例处于 Ready 状态,并且没有正在运行的扩缩容、重启、访问、证书、调度或配置更改。
  2. 完成并验证外部备份或导出。Operator 没有集成的备份或回滚控制器。
  3. 检查应用程序和 module 与目标 Valkey 版本线的兼容性。
  4. 检查 spec.customConfigs,确认目标版本移除或变更的指令。
  5. 确认有足够的可调度容量,以便进行滚动 Pod 替换。

记录当前状态:

kubectl -n default get valkey valkey-cluster -o yaml > valkey-before-upgrade.yaml
kubectl -n default get pods,pvc,service -l buf.red/name=valkey-cluster -o wide
kubectl -n default get events --sort-by=.lastTimestamp

对于 Cluster 架构,还要从一个处于 Ready 状态的 Pod 验证 slot 和成员健康状况:

kubectl -n default exec <ready-cluster-pod> -c valkey -- \
  valkey-cli CLUSTER INFO
kubectl -n default exec <ready-cluster-pod> -c valkey -- \
  valkey-cli CLUSTER NODES

应用升级

示例:从 7.2 升级到 8.1。

kubectl -n default patch valkey valkey-cluster --type=merge \
  -p '{"spec":{"version":"8.1"}}'

监视高层级资源、Pods 和 Events:

kubectl -n default get valkey valkey-cluster -w
kubectl -n default get pods -l buf.red/name=valkey-cluster -w
kubectl -n default get events --sort-by=.lastTimestamp

在 Pods 正在替换或 phase 不是 Ready 时,不要再应用其他更改。

验证结果

读取期望值和最后记录的值,然后检查每个 server Pod:

kubectl -n default get valkey valkey-cluster \
  -o jsonpath='{.spec.version}{"\t"}{.status.lastVersion}{"\t"}{.status.phase}{"\n"}'
kubectl -n default get pods -l buf.red/name=valkey-cluster \
  -o custom-columns='NAME:.metadata.name,IMAGE:.spec.containers[?(@.name=="valkey")].image,READY:.status.containerStatuses[?(@.name=="valkey")].ready'
kubectl -n default exec <ready-pod> -c valkey -- valkey-cli INFO server

status.lastVersion 会在高层级 reconciliation 期间从期望版本复制而来。它并不是对每个正在运行的进程的观测结果。请在每个 data Pod 上验证 image 和 INFO server 输出;在 Cluster 架构中,不要假设一个 Pod 代表每个 shard。

然后验证应用程序的读写、访问控制列表(ACL)认证、复制或 Cluster slot 覆盖率、适用时的故障转移发现以及 exporter 指标。

故障边界

不要将 spec.version patch 回之前的值;降级会被拒绝,并且对于持久化数据可能不安全。保留日志和 Events,停止进一步更改,并遵循产品支持恢复计划。降级需要单独创建一个兼容实例,并经过验证的数据迁移或恢复流程。

在检查命令、配置和运行时兼容性时,请使用目标版本对应的 command indexINFO reference