如何使用Terraform通过YAML部署Kubernetes服务?

如何使用Terraform通过YAML部署Kubernetes服务?,kubernetes,terraform,Kubernetes,Terraform,我正在学习Kubernetes,我的目标是部署Kubernetes,但通过terraform()使用Yaml文件。让我举例说明: 据我所知,我可以将ConfigMap作为资源,如: resource "kubernetes_config_map" "config" { metadata { namespace = "metallb_system" name = "config" } dat

我正在学习Kubernetes,我的目标是部署Kubernetes,但通过terraform()使用Yaml文件。让我举例说明:

据我所知,我可以将ConfigMap作为资源,如:

resource "kubernetes_config_map" "config" {
  metadata {
    namespace = "metallb_system"
    name = "config"
  }
  data {
    config = "${file(${path.module}/config.yml)}"
  }
}
现在我想部署一个服务,它在HCL中看起来像:

resource "kubernetes_service" "nginx" {

  metadata {
    name = "nginx-example-bla"
  }
  spec {
    selector = {
      App = kubernetes_pod.airflow.metadata[0].labels.App
    }
    port {
      port        = 80
      target_port = 8080
    }

    type = "LoadBalancer"
  }
}
但是我想用yaml而不是HCL

所以(假设),我想做一些事情,比如:

resource "kubernetes_service" "nginx" {
  file = kubernetes_config_map.config  # Not sure if ConfigMap is the right usage here but I want to be able to deploy a service through Yaml
}

Terraform仅跟踪使用HCL添加的资源,使用
file()
仅添加内容。因此,如果您希望terraform管理您的k8s资源(检测这些资源的更改或删除),您必须坚持这一点

如果您只是想使用terraform部署YAML文件,则可以使用“null_资源”运行命令:


如果你这样做,请记住,地形现在没有任何变化检测。所以如果YAML改变了,terraform不知道。您必须通过快速、不干净地更改资源名称或使用一些经常更改的值(例如,随机ID)重新运行脚本来触发它。

Terraform仅跟踪使用HCL添加的资源,使用
file()
仅添加内容。因此,如果您希望terraform管理您的k8s资源(检测这些资源的更改或删除),您必须坚持这一点

如果您只是想使用terraform部署YAML文件,则可以使用“null_资源”运行命令:

如果你这样做,请记住,地形现在没有任何变化检测。所以如果YAML改变了,terraform不知道。您必须通过快速而直接地更改资源名称或使用一些经常更改的值(例如随机_uuid)重新运行脚本来触发它

resource "null_resource" "deploy-yaml" {

  provisioner "local-exec" {
      command = "kubectl apply -f xxx.yaml"
  }
}