gpt4 book ai didi

kubernetes - 如何在 terraform 中运行 kubectl apply 命令

转载 作者:行者123 更新时间:2023-12-01 16:15:46 26 4
gpt4 key购买 nike

我开发了一个 terraform 脚本来在 GKE 上创建 k8 集群。

成功创建集群后,我有一组要应用于 k8 集群的 yaml 文件。

如何在我的 terraform 脚本中调用以下命令?

kubectl create <.yaml>

最佳答案

您可以使用 Terraform kubectl第三方提供商。按照此处的安装说明进行操作:Kubectl Terraform Provider

然后简单地定义一个kubectl_manifest指向您的 YAML 文件,例如:

# Get your cluster-info
data "google_container_cluster" "my_cluster" {
name = "my-cluster"
location = "us-east1-a"
}

# Same parameters as kubernetes provider
provider "kubectl" {
load_config_file = false
host = "https://${data.google_container_cluster.my_cluster.endpoint}"
token = "${data.google_container_cluster.my_cluster.access_token}"
cluster_ca_certificate = "${base64decode(data.google_container_cluster.my_cluster.master_auth.0.cluster_ca_certificate)}"
}

resource "kubectl_manifest" "my_service" {
yaml_body = file("${path.module}/my_service.yaml")
}

这种方法有一个很大的优点,即所有内容都是动态获取的,并且不依赖于任何本地配置文件(如果您在 CI/CD 服务器中运行 Terraform 或管理多集群环境,这一点非常重要)。

多对象 list 文件

kubectl提供程序还提供数据源,帮助轻松处理具有多个对象的文件。来自文档kubectl_filename_list :

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

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

额外积分:您可以将您的 yaml 模板化文件。我在多资源自动缩放器 yaml 文件中插入集群名称,如下所示:

resource "kubectl_manifest" "autoscaler" {
yaml_body = templatefile("${path.module}/autoscaler.yaml", {cluster_name = var.cluster_name })
}

关于kubernetes - 如何在 terraform 中运行 kubectl apply 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com