【问题标题】:Helm Chart will install manually, will not install via TerraformHelm Chart 将手动安装,不会通过 Terraform 安装
【发布时间】:2022-02-09 17:50:37
【问题描述】:

我在使用 Minikube 通过 Terraform 安装 ingress-nginx Helm Chart 时遇到问题,但我可以通过命令行成功安装它。这是我的香草 Terraform 代码 -

provider "kubernetes" {
  host                   = "https://127.0.0.1:63191"
  client_certificate     = base64decode(var.client_certificate)
  client_key             = base64decode(var.client_key)
  cluster_ca_certificate = base64decode(var.cluster_ca_certificate)
}

provider "helm" {
  kubernetes {

  }
}

resource "helm_release" "nginx" {
  name        = "beta-nginx"
  repository  = "https://kubernetes.github.io/ingress-nginx"
  chart       = "ingress-nginx"
  namespace   = "default"
}

当我应用上面的 Terraform 代码时,我得到以下日志 -

helm_release.nginx: Still creating... [4m31s elapsed]
2022-01-26T14:32:49.623-0600 [TRACE] dag/walk: vertex "root" is waiting for "provider[\"registry.terraform.io/hashicorp/helm\"] (close)"
2022-01-26T14:32:49.624-0600 [TRACE] dag/walk: vertex "meta.count-boundary (EachMode fixup)" is waiting for "helm_release.nginx"
2022-01-26T14:32:49.624-0600 [TRACE] dag/walk: vertex "provider[\"registry.terraform.io/hashicorp/helm\"] (close)" is waiting for "helm_release.nginx"
2022-01-26T14:32:51.299-0600 [INFO]  provider.terraform-provider-helm_v2.4.1_x5: 2022/01/26 14:32:51 [DEBUG] Service does not have load balancer ingress IP address: default/beta-nginx-ingress-nginx-controller: timestamp=2022-01-26T14:32:51.299-0600
2022-01-26T14:32:53.302-0600 [INFO]  provider.terraform-provider-helm_v2.4.1_x5: 2022/01/26 14:32:53 [DEBUG] Service does not have load balancer ingress IP address: default/beta-nginx-ingress-nginx-controller: timestamp=2022-01-26T14:32:53.302-0600
2022-01-26T14:32:54.626-0600 [TRACE] dag/walk: vertex "provider[\"registry.terraform.io/hashicorp/helm\"] (close)" is waiting for "helm_release.nginx"

Warning: Helm release "beta-nginx" was created but has a failed status. Use the `helm` command to investigate the error, correct it, then run Terraform again.

  with helm_release.nginx,
  on main.tf line 21, in resource "helm_release" "nginx":
  21: resource "helm_release" "nginx" {


Error: timed out waiting for the condition

  with helm_release.nginx,
  on main.tf line 21, in resource "helm_release" "nginx":
  21: resource "helm_release" "nginx" {

当我尝试通过命令行helm install beta-nginx ingress-nginx/ingress-nginx 安装 Helm Chart 时,它安装图表没问题。

这里有几个版本号:

Terraform 1.0.5
Minikube 1.25.1
Kubernetes 1.21.7
Helm 3.7.2

【问题讨论】:

    标签: nginx kubernetes terraform kubernetes-helm kubernetes-ingress


    【解决方案1】:

    这是因为 Terraform 等待 LoadBalancer 获取公共 IP 地址,但这种情况从未发生,所以出现 Error: timed out waiting for the condition 错误:

    $ kubectl get svc
    NAME                                            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    beta-nginx-ingress-nginx-controller             LoadBalancer   <PRIVATE_IP>    <pending>     80:30579/TCP,443:30909/TCP   7m32s
    

    您可以安装MetalLB 来获得负载平衡器实现,或者创建一个NodePort 而不是LoadBalancer。我将简要演示第二个选项。

    您所要做的就是修改 values.yaml 文件中的 controller.service.type 值:

    $ cat beta-nginx.tf 
    provider "helm" {
      kubernetes {
        config_path = "~/.kube/config"
      }
    }
    
    resource "helm_release" "nginx" {
      name        = "beta-nginx"
      repository  = "https://kubernetes.github.io/ingress-nginx"
      chart       = "ingress-nginx"
      namespace   = "default"
      set {
        name  = "controller.service.type"
        value = "NodePort"
      }
    }
    
    
    $ terraform apply
    ...
          + set {
              + name  = "controller.service.type"
              + value = "NodePort"
            }
    ...
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    
    $ kubectl get svc
    NAME                                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
    beta-nginx-ingress-nginx-controller             NodePort    <PRIVATE_IP>     <none>        80:32410/TCP,443:31630/TCP   74s
    

    正如您在上面看到的,已经创建了 NodePort 服务而不是 LoadBalancer。

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 1970-01-01
      • 2021-04-12
      • 2022-08-18
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2018-05-30
      • 2020-08-02
      相关资源
      最近更新 更多