使用OpenTofu在K8s中部署Elastic Stack时遭遇Helm Chart未找到错误
看起来你在通过OpenTofu用Helm部署Elastic Stack时踩了个小坑——找不到elastic/eck-stack这个chart对吧?我来帮你捋清楚问题出在哪,以及怎么解决:
问题根源
你遇到的错误核心原因很简单:Elastic官方的Helm仓库里从来就没有过eck-stack这个Chart。你通过helm search repo看到的结果也能佐证这一点——只有eck-agent、apm-server这类单一组件的Chart,以及被截断的eck-operator(就是你搜索结果里elastic/eck-agent旁边的e...)。
ECK(Elastic Cloud on Kubernetes)的设计逻辑是通过Operator来统一管理K8s上的所有Elastic栈组件(Elasticsearch、Kibana、Logstash、APM Server等),而不是提供一个打包好的stack Chart一次性部署所有东西。
具体解决步骤
1. 确认并更新Helm仓库
首先确保你的Helm已经正确添加了Elastic官方仓库,并且缓存是最新的:
- 检查现有仓库:
如果看不到helm repo listelastic仓库,就添加它:helm repo add elastic https://helm.elastic.co - 强制更新仓库缓存,避免旧缓存导致的搜索结果不全:
helm repo update - 再次搜索确认,这时候应该能看到完整的
elastic/eck-operator:helm search repo elastic/eck-operator
2. 修正OpenTofu的helm_release配置
把你原来的helm_release.elastic资源里的chart字段从elastic/eck-stack改成elastic/eck-operator,示例配置如下:
resource "helm_release" "elastic_operator" { name = "eck-operator" repository = "https://helm.elastic.co" chart = "eck-operator" version = "2.12.1" # 替换成你需要的稳定版本,比如最新版 namespace = "elastic-system" create_namespace = true # 可选:如果需要自定义Operator配置,这里引入values文件 values = [ file("${path.module}/eck-operator-values.yaml") ] }
3. 用CRD部署具体的Elastic栈组件
部署完ECK Operator之后,你需要通过Kubernetes CRD(自定义资源定义)来创建Elasticsearch、Kibana等具体组件。比如你可以在OpenTofu里用kubernetes_manifest资源来定义:
# 部署一个单节点Elasticsearch实例 resource "kubernetes_manifest" "elasticsearch" { manifest = { apiVersion = "elasticsearch.k8s.elastic.co/v1" kind = "Elasticsearch" metadata = { name = "my-elasticsearch" } spec = { version = "8.12.0" nodeSets = [ { name = "default" count = 1 config = { "node.store.allow_mmap" = false # 适合测试环境的配置,避免内存限制问题 } } ] } } } # 部署对应的Kibana实例 resource "kubernetes_manifest" "kibana" { manifest = { apiVersion = "kibana.k8s.elastic.co/v1" kind = "Kibana" metadata = { name = "my-kibana" } spec = { version = "8.12.0" count = 1 elasticsearchRef = { name = "my-elasticsearch" } } } depends_on = [kubernetes_manifest.elasticsearch] }
这样Operator就会自动帮你创建并管理这些Elastic组件的Pod、Service等资源了。
备注:内容来源于stack exchange,提问作者user3465651

