我正在使用 terraform,它使用 Bitnami Redis Helm 图表在 Kubernetes 上部署 Redis,并且需要对其进行配置,以便每个 Redis 实例和 Sentinel 在自己单独的 pod 中运行。目前,我有一个设置,其中 Redis 主服务器和从服务器以及 Sentinel 位于同一个 Pod 中。
这是我的 main.tf 文件的片段:
resource "helm_release" "redis" {
name = "redis"
namespace = "redis"
chart = "redis"
repository = "oci://registry-1.docker.io/bitnamicharts"
version = "20.0.5"
create_namespace = true
values = [
<<-EOF
persistence:
enabled: true
existingClaim: ${kubernetes_persistent_volume_claim.longhorn_pvc.metadata[0].name}
master:
persistence:
enabled: false
replica:
persistence:
enabled: false
replicaCount: 2
sentinel:
enabled: true
auth:
password: ${var.redis_password}
ingress:
enabled: true
annotations: {}
hosts:
- host: ${var.redis_host}
paths:
- /
tls: []
EOF
]
depends_on = [rke_cluster.k8s, local_file.kubeconfig]
}
但是,使用此配置进行部署会导致 Redis 主服务器和从服务器与 Sentinel 容器位于同一 pod 中。运行 terraform apply 命令后,k8s 集群包含这些带有 redis 命名空间的 pod:
root@m:~/tf-infra$ kubectl get pods -n redis
NAME READY STATUS RESTARTS AGE
redis-node-0 2/2 Running 0 122m
redis-node-1 2/2 Running 0 122m
我想实现以下pod配置:
如何修改values.yaml或Helm图表以确保每个实例(主实例、副本实例和Sentinel实例)都部署在单独的Pod中?
现在我正在一台linux服务器上测试它。 下一步将使用 terraform 将每个节点部署到不同的 Linux 服务器。
auth:
enabled: true
password: ${var.redis_password}
master:
persistence:
enabled: false
replicaCount: 1
replica:
replicaCount: 1
persistence:
enabled: false
sentinel:
enabled: true
replicaCount: 3
我预计此配置会创建 5 个独立的 pod:
但是,应用此配置后,我只看到两个 pod:redis-node-0 和 redis-node-1。每个 Pod 都包含两个容器:一个用于 Redis(主或副本),一个用于 Sentinel。
查看 Redis Sentinel Gateway — 它有助于管理 Redis 故障转移,而无需在应用程序代码中实现 Sentinel 支持。非常适合需要高可用性的遗留应用程序!