如何在 Terraform 中使用 YAML 文件?

5

我有一个独立的yaml文件,其中包含kubernetes配置信息。我想在运行terraform时使用该yaml文件。我能做到吗?如果可以,如何操作。


Kubernetes配置YAML文件是什么意思? - Charles Xu
包含所有Kubernetes配置信息的文件,包括有关Pods、Services等的信息。 - SiddhiMorajkar
1
如果是这样的话,我认为你可以使用null_resource在本地执行kubectl命令。 - Charles Xu
是的,现在我正在使用 null_resource 来实现这个功能。同时我有个问题。如果我正在使用 kubectl apply -f 命令然后执行 terraform apply,它会应用到环境中。但当我想要销毁所创建的内容时,我该怎么做呢?是继续使用相同的命令,然后执行 terraform destroy 还是将命令更改为 kubectl delete -f 然后执行 terraform apply 呢? - SiddhiMorajkar
1
是的,terraform destroy 命令将删除您部署的所有内容。 - Charles Xu
显示剩余8条评论
4个回答

3

是的,您可以这样做,但需要使用第三方Kubernetes提供商。

# Retrieve an access token as the Terraform runner
data "google_client_config" "provider" {}

# Same parameters as kubernetes provider
data "google_container_cluster" "my-cluster" {
  name      = "my-cluster"
  location  = "europe-west4-a"
}

provider "kubectl" {
  load_config_file       = false
  host                   = "https://${google_container_cluster.my-cluster.endpoint}"
  cluster_ca_certificate = "${base64decode(google_container_cluster.my-cluster.master_auth.0.cluster_ca_certificate)}"
  token = data.google_client_config.provider.access_token
}

data "kubectl_filename_list" "manifests" {
    pattern = "./manifests/*.yml"
}

resource "kubectl_manifest" "test" {
    count     = length(data.kubectl_filename_list.manifests.matches)
    yaml_body = file(element(data.kubectl_filename_list.manifests.matches, count.index))
}

供应商链接 https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs

类似问题 如何在Terraform中运行kubectl apply命令


2

具体来回答原问题,哪些标签包含AzureAKS,同时提问者要求在terraform中使用纯kubernetes yaml清单 - 我使用了gavinbunney/kubectl:

terraform {
  required_providers {

    kubectl = {
      source  = "gavinbunney/kubectl"
      version = "1.14.0"
    }
  }
}

provider "kubectl" {
  load_config_file = false
  host = azurerm_kubernetes_cluster.REDACTED.kube_config.0.host
  cluster_ca_certificate = base64decode(azurerm_kubernetes_cluster.REDACTED.kube_config.0.cluster_ca_certificate)
  token = yamldecode(azurerm_kubernetes_cluster.REDACTED.kube_config_raw).users[0].user.token
}

更多信息可以在Github原帖中找到。


2

你能提供任何文件让我们知道如何在Windows上安装它吗?@Karl - SiddhiMorajkar
我使用Linux。您可以在此处找到所有支持的操作系统的二进制文件:https://github.com/sl1pm4t/k2tf/releases/tag/v0.4.1 - Karl

0

根据我的经验,Terraform支持Kubernetes提供程序,但该提供程序中的所有内容都是分开的,例如部署、Pod、服务等。它没有提供一种从配置文件加载所有内容的方式。

因此,为了从配置文件部署,我建议您将kubectl apply -f config_file放在null_resource中。而且,使用多个mull_resource删除已部署的所有内容也很简单,您只需要使用Terraform命令terraform destroy,它将删除通过Terraform文件部署的所有资源。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接