Есть несколько способов достичь того, что вы хотите сделать.
Вы можете использовать ресурсы Terraform template_file и null_resource .
Обратите внимание, что я использую триггер для запуска команды kubectl всегда, когда вы изменяете шаблон (вы можете заменить create на apply).
data "template_file" "your_template" {
template = "${file("${path.module}/templates/<.yaml>")}"
}
resource "null_resource" "your_deployment" {
triggers = {
manifest_sha1 = "${sha1("${data.template_file.your_template.rendered}")}"
}
provisioner "local-exec" {
command = "kubectl create -f -<<EOF\n${data.template_file.your_template.rendered}\nEOF"
}
}
Но, возможно, лучшим способом является использование провайдера Kubernetes .
Есть два способа его настройки:
- По умолчанию ваши манифесты будут развернуты в вашем текущем контексте (
kubectl config current-context
)
- Второй способ - статически определить учетные данные сертификата TLS:
provider "kubernetes" {
host = "https://104.196.242.174"
client_certificate = "${file("~/.kube/client-cert.pem")}"
client_key = "${file("~/.kube/client-key.pem")}"
cluster_ca_certificate = "${file("~/.kube/cluster-ca-cert.pem")}"
}
Как только вы это сделаете, вы сможете довольно легко создать собственное развертывание. Для базового модуля это будет так же просто, как:
resource "kubernetes_pod" "hello_world" {
metadata {
name = "hello-world"
}
spec {
container {
image = "my_account/hello-world:1.0.0"
name = "hello-world"
}
image_pull_secrets {
name = "docker-hub"
}
}
}