【发布时间】:2022-01-17 17:35:27
【问题描述】:
我正在使用 Terraform helm_release 资源在我的 K8s 集群中安装 bitnami/redis 实例。
代码如下所示:
resource "helm_release" "redis-chart" {
name = "redis-${var.env}"
repository = "https://charts.bitnami.com/bitnami"
chart = "redis"
namespace = "redis"
create_namespace = true
set {
name = "auth.enabled"
value = "false"
}
set {
name = "master.containerPort"
value = "6379"
}
set {
name = "replica.replicaCount"
value = "2"
}
}
它成功完成并在一个单独的目录中我有我的app terraform 配置。
在app的配置中,我想从上面的helm_release获取redis主机。
我是这样做的:
data "kubernetes_service" "redis-master" {
metadata {
name = "redis-${var.env}-master"
namespace = "redis"
}
}
然后在kubernetes_secret 资源中,我将数据传递给我的app 部署:
resource "kubernetes_secret" "questo-server-secrets" {
metadata {
name = "questo-server-secrets-${var.env}"
namespace = kubernetes_namespace.app-namespace.metadata.0.name
}
data = {
REDIS_HOST = data.kubernetes_service.redis-master.metadata.0.name
REDIS_PORT = data.kubernetes_service.redis-master.spec.0.port.0.port
}
}
但不幸的是,当我运行应用程序 deployment 时,我得到了以下日志:
[ioredis] 未处理的错误事件:错误:getaddrinfo ENOTFOUND redis-dev-master 在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) [ioredis] 未处理的错误事件:错误:getaddrinfo ENOTFOUND
这表明redis-dev-master 不是redis 实例的正确主机。
如何从helm_release 或release 创建的任何底层服务获取redis 主机?
我已尝试从我的 app 部署中调试并 pinging 一个特定的 pod。
作为参考,这些是我的redis资源:
NAME READY STATUS RESTARTS AGE
pod/redis-dev-master-0 1/1 Running 0 34m
pod/redis-dev-replicas-0 1/1 Running 1 34m
pod/redis-dev-replicas-1 1/1 Running 0 32m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-dev-headless ClusterIP None <none> 6379/TCP 34m
service/redis-dev-master ClusterIP 172.20.215.60 <none> 6379/TCP 34m
service/redis-dev-replicas ClusterIP 172.20.117.134 <none> 6379/TCP 34m
NAME READY AGE
statefulset.apps/redis-dev-master 1/1 34m
statefulset.apps/redis-dev-replicas 2/2 34m
【问题讨论】:
-
你为什么不试试
data.kubernetes_service.redis-master.spec.cluster_ip? -
听起来 DNS 在 Terraform 执行的任何地方都无法为您解析。该错误消息也看起来像 Redis 抛出的错误,而不是 Terraform 或 Terraform-Kubernetes 提供者抛出的错误,这有助于缩小根本原因。
-
是的,@Hackerman,我就是这么做的,如果你把它写成答案,我很乐意为可能偶然发现它的其他人投票。
标签: kubernetes redis terraform