我有一个独立的yaml文件,其中包含kubernetes配置信息。我想在运行terraform时使用该yaml文件。我能做到吗?如果可以,如何操作。
我有一个独立的yaml文件,其中包含kubernetes配置信息。我想在运行terraform时使用该yaml文件。我能做到吗?如果可以,如何操作。
是的,您可以这样做,但需要使用第三方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
具体来回答原问题,哪些标签包含Azure
和AKS
,同时提问者要求在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原帖中找到。
根据我的经验,Terraform支持Kubernetes提供程序,但该提供程序中的所有内容都是分开的,例如部署、Pod、服务等。它没有提供一种从配置文件加载所有内容的方式。
因此,为了从配置文件部署,我建议您将kubectl apply -f config_file
放在null_resource
中。而且,使用多个mull_resource删除已部署的所有内容也很简单,您只需要使用Terraform命令terraform destroy
,它将删除通过Terraform文件部署的所有资源。
null_resource
在本地执行kubectl
命令。 - Charles Xu