创建实例

对于应用实例,请使用高级别的 Valkey 自定义资源。下一个主要版本 2.0.0 在 spec.version 中仅支持 7.28.19.1

开始之前

  • 选择 clusterfailoverreplica 架构。
  • 设置 CPU 和内存的 request 与 limit。相同的 request 和 limit 值可避免 validating-webhook 警告;启用 exporter sidecar 时,请单独设置其大小。
  • 为必须在 Pod 重建后仍可保留的数据配置持久存储。
  • 每个分片至少使用两个成员,以实现主从冗余。

选择主要字段

字段必要决策
spec.version在 2.0.0 版本中仅使用 7.28.19.1
spec.arch选择 clusterfailoverreplica;不要计划就地进行架构转换。
spec.replicas.shardsCluster 使用 3–128;Failover 或 Replica 必须恰好为 1。
spec.replicas.replicasOfShard数据成员总数:1–5。要实现主从冗余,至少使用 2。
spec.resources设置 CPU 和内存的 request 与 limit;相同值可避免 webhook 警告。
spec.storage若使用临时存储则省略;否则设置容量和 StorageClass。生成的 persistent volume claim 始终请求 ReadWriteOnce 访问模式。
spec.access选择 ClusterIP、NodePort 或 LoadBalancer,以及 Internet Protocol (IP) 地址族;可选启用 TLS。
spec.affinityPolicy选择一个可由可用节点数满足的策略。
spec.customConfigs仅设置 Operator 不拥有或禁止的指令。
spec.exporter默认启用;请单独设置 sidecar 的大小,或显式禁用它。

如果在未指定 capacity 的情况下指定了 storageClassName,webhook 会推导出一个等于 data-container 内存限制两倍的容量。请显式设置容量,以便进行可预测的存储规划。

创建 Cluster 实例

此示例创建三个分片,每个分片包含两个成员:

kubectl apply -f - <<'EOF'
apiVersion: rds.valkey.buf.red/v1alpha1
kind: Valkey
metadata:
  name: valkey-cluster
  namespace: default
spec:
  version: "8.1"
  arch: cluster
  replicas:
    shards: 3
    replicasOfShard: 2
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "500m"
      memory: "1Gi"
  storage:
    storageClassName: standard
    capacity: 10Gi
  access:
    serviceType: ClusterIP
  exporter:
    resources:
      requests:
        cpu: "50m"
        memory: "128Mi"
      limits:
        cpu: "100m"
        memory: "384Mi"
  affinityPolicy: AntiAffinityInShard
  customConfigs:
    maxmemory-policy: allkeys-lru
    appendonly: "yes"
EOF

创建 Failover 实例

此示例创建两个数据成员和三个 Sentinel:

kubectl apply -f - <<'EOF'
apiVersion: rds.valkey.buf.red/v1alpha1
kind: Valkey
metadata:
  name: valkey-failover
  namespace: default
spec:
  version: "8.1"
  arch: failover
  replicas:
    shards: 1
    replicasOfShard: 2
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "500m"
      memory: "1Gi"
  storage:
    storageClassName: standard
    capacity: 10Gi
  access:
    serviceType: ClusterIP
  sentinel:
    replicas: 3
    quorum: 2
    resources:
      requests:
        cpu: "200m"
        memory: "256Mi"
      limits:
        cpu: "200m"
        memory: "256Mi"
    monitorConfig:
      down-after-milliseconds: "30000"
      failover-timeout: "180000"
      parallel-syncs: "1"
  customConfigs:
    maxmemory-policy: allkeys-lru
    appendonly: "yes"
EOF

创建 Replica 实例

此示例创建一个主节点和一个从节点,不使用 Sentinel:

kubectl apply -f - <<'EOF'
apiVersion: rds.valkey.buf.red/v1alpha1
kind: Valkey
metadata:
  name: valkey-replica
  namespace: default
spec:
  version: "8.1"
  arch: replica
  replicas:
    shards: 1
    replicasOfShard: 2
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "500m"
      memory: "1Gi"
  storage:
    storageClassName: standard
    capacity: 10Gi
  access:
    serviceType: ClusterIP
  customConfigs:
    maxmemory-policy: allkeys-lru
    appendonly: "yes"
EOF

仅当您明确希望只有一个数据节点,并接受缺少主从冗余时,才将 replicasOfShard: 1 设为 1。

验证实例

持续观察高层状态,直到 PHASE 变为 Ready

kubectl -n default get valkey -w

然后检查已观测到的节点、子资源、Pod、Service 和持久卷声明(PVC):

kubectl -n default get valkey valkey-cluster -o yaml
kubectl -n default get cluster,failover,sentinel
kubectl -n default get pods,service,pvc -l buf.red/name=valkey-cluster
kubectl -n default describe valkey valkey-cluster

如果协调失败,请在修改 manifest 之前先阅读 .status.message、命名空间 Events 和 Operator 日志。

kubectl get valkey 的主要列如下:

含义
ARCH来自 spec.arch 的目标架构。
VERSION来自 spec.version 的目标服务端版本。
ACCESS来自 spec.access.serviceType 的 Service 类型。
STORAGE CLASS配置后请求的持久 StorageClass。
STATUS高层协调阶段。
MESSAGE当前诊断或操作详情。

Ready 之后,请验证架构,而不要只依赖阶段:

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

# Failover or Replica
kubectl -n default exec <ready-data-pod> -c valkey -- \
  valkey-cli INFO replication

如需显式设置初始 Cluster 槽位分布,请参阅 初始化 Cluster 槽位分布