初始化 Cluster 槽位分配

默认情况下,Operator 会将全部 16,384 个 Cluster 哈希槽分配到已配置的各个 shard 中。对于新的 Cluster,spec.replicas.shardsConfig 可以提供显式的初始槽位方案。

在 2.0.0 实现中,该字段仅在创建时生效。控制器仅在子 Cluster 尚未初始化 shard 状态时才会使用它。在现有实例上更改 shardsConfig 不是受支持的重新分配操作;请使用 shard scaling 进行由 Operator 管理的重新平衡。

约束

  • 仅在 spec.arch: cluster 时使用此字段。
  • shardsConfig 条目的数量必须等于 spec.replicas.shards
  • 至少需要三个条目。
  • 槽位值必须是 0 到 16383 之间的整数,并以单个值或用逗号分隔的包含范围表示。
  • 所有条目的并集必须恰好覆盖每个槽位一次。缺口和重叠会被 validating webhook 拒绝。
  • spec.replicas.replicasOfShard 仍然是每个 shard 的成员总数。

使用显式方案创建 Cluster

以下清单将槽位空间分配给三个 shard:

kubectl apply -f - <<'EOF'
apiVersion: rds.valkey.buf.red/v1alpha1
kind: Valkey
metadata:
  name: valkey-slots
  namespace: default
spec:
  version: "8.1"
  arch: cluster
  replicas:
    shards: 3
    replicasOfShard: 2
    shardsConfig:
      - slots: "0-5460"
      - slots: "5461-10922"
      - slots: "10923-16383"
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "500m"
      memory: "1Gi"
  storage:
    storageClassName: standard
    capacity: 10Gi
  access:
    serviceType: ClusterIP
  affinityPolicy: AntiAffinityInShard
EOF

当资源已存在时,server-side dry-run 会测试更新行为,而不是仅限创建的槽位方案验证。请在命名空间中首次创建且名称不存在时先验证该清单:

kubectl apply --dry-run=server -f valkey-slots.yaml

验证分配

等待进入 Ready,然后将高层节点状态与 server 视图进行比较:

kubectl -n default get valkey valkey-slots -w
kubectl -n default get valkey valkey-slots \
  -o jsonpath='{range .status.nodes[*]}{.podName}{"\t"}{.role}{"\t"}{.slots}{"\n"}{end}'
kubectl -n default exec <ready-cluster-pod> -c valkey -- \
  valkey-cli CLUSTER SHARDS
kubectl -n default exec <ready-cluster-pod> -c valkey -- \
  valkey-cli CLUSTER INFO

不要编辑 Operator 所拥有的子 Cluster.status.shards 来修复方案。对于被拒绝的创建,请修正清单并重新应用。对于已经初始化但业务布局不正确的 Cluster,请规划一个受支持的 shard scaling 操作,或者创建替代实例并迁移数据。

CLUSTER SHARDS 是这些受支持的 server 版本线的首选拓扑视图。请参阅其 official command referenceValkey Cluster 规范