【问题标题】:Deployment invalid Terraform + Kubernetes: spec.template.spec.containers[0].envFrom: Invalid value: ""部署无效的 Terraform + Kubernetes:spec.template.spec.containers[0].envFrom:无效值:“”
【发布时间】:2021-04-23 03:11:07
【问题描述】:

我正在尝试使用 terraform 来部署 k8s 资源。

我创建了一个 mongodb 部署

provider "kubernetes" {
  config_context = "kubernetes-admin@kubernetes"
}

resource "kubernetes_namespace" "demo-namespace" {
  metadata {
    name = "my-demo-namespace"
  }
}
// mongodb
resource "kubernetes_deployment" "mongodb" {
  metadata {
    name = "mongodb"
    namespace = kubernetes_namespace.demo-namespace.metadata[0].name
    labels = {
      app = "mongodb"
    }
  }

  spec {
    replicas = 1

    selector {
      match_labels = {
        app = "mongodb"
      }
    }

    template {
      metadata {
        labels = {
          app = "mongodb"
        }
      }

      spec {
        container {
          image = "mongo"
          name  = "mongodb"

          env_from { 
            secret_ref {
              name = kubernetes_secret.scrt-mongodb.metadata[0].name
            }
            config_map_ref {
              name = kubernetes_config_map.cm-mongodb.metadata[0].name  
            }
          }

          resources {
            limits {
              cpu    = "500m"
              memory = "1Gi"
            }
            requests {
              cpu    = "150m"
              memory = "256Mi"
            }
          }

          liveness_probe {
            exec {
              command =  ["bash", "-c", "mongo -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --eval db.adminCommand(\"ping\")"]
            }
            initial_delay_seconds = 3
            period_seconds        = 1
          }
        }
      }
    }
  }
}

// mongodb configmap
resource "kubernetes_config_map" "cm-mongodb" {
  metadata {
    name = "cm-mongodb"
    namespace = kubernetes_namespace.demo-namespace.metadata.0.name
  }

  // improve creds with secret
  data = {
    MONGO_INITDB_DATABASE = "movies"
  }
}

// monbodb secret
resource "kubernetes_secret" "scrt-mongodb" {
  metadata {
    name = "mongodb-creds"
  }

  data = {
    MONGO_INITDB_ROOT_USERNAME = "root-user"
    MONGO_INITDB_ROOT_PASSWORD = "secret"
  }

  type = "opaque"
}

这失败了:

kubernetes_config_map.cm-mongodb: Creation complete after 0s [id=my-demo-namespace/cm-mongodb]
kubernetes_deployment.mongodb: Creating...

Error: Failed to create deployment: Deployment.apps "mongodb" is invalid: spec.template.spec.containers[0].envFrom: Invalid value: "": may not have more than one field specified at a time

  on template.tf line 12, in resource "kubernetes_deployment" "mongodb":
  12: resource "kubernetes_deployment" "mongodb" {

这里有什么问题?

【问题讨论】:

    标签: mongodb kubernetes terraform


    【解决方案1】:

    你错过了这一行:

    namespace = kubernetes_namespace.demo-namespace.metadata.0.name
    

    您没有在所需的命名空间中定义资源,因此 terraform 未能“找到”所需的值。


    // monbodb secret
    resource "kubernetes_secret" "scrt-mongodb" {
      metadata {
        name = "mongodb-creds"
        # -------------------------------------------------------------
        # -------------------------------------------------------------
        # Add the namespace here
        namespace = kubernetes_namespace.demo-namespace.metadata.0.name
        # -------------------------------------------------------------
        # -------------------------------------------------------------
        }
    
      data = {
        MONGO_INITDB_ROOT_USERNAME = "root-user"
        MONGO_INITDB_ROOT_PASSWORD = "secret"
      }
    
      type = "opaque"
    }
    

    【讨论】:

    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 2021-03-22
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2022-09-25
    • 2021-12-31
    相关资源
    最近更新 更多