테라폼 + 투구 = ❤️

Terraform으로 IaC를 관리하려고 시도한 적이 있다면 "클라우드 리소스는 괜찮지만 내 Kubernetes 클러스터를 어떻게 처리해야 합니까???"라는 말을 들을 수 있습니다.

이 게시물에서는 각 도구의 장점을 사용하여 Helm을 Terraform과 통합하는 방법에 대한 간단하고 기능적인 예를 공유하고자 합니다.

이 통합 설정은 Helm v3가 출시된 후 훨씬 쉬워졌습니다. 이제 Kubernetes 자격 증명을 Helm 공급자에게 전달하고 Terraform을 사용하여 차트 배포를 시작할 수 있습니다!

provider "helm" {
  kubernetes {
    config_path = "/path/to/kube_cluster.yaml"
  }
}

이제 helm_release 리소스 🎉를 사용하여 차트를 배포할 수 있습니다.

resource "helm_release" "example" {
  name       = "my-redis-release"
  repository = "https://kubernetes-charts.storage.googleapis.com" 
  chart      = "redis"
  version    = "6.0.1"

  values = [
    "${file("values.yaml")}"
  ]

  set {
    name  = "cluster.enabled"
    value = "true"
  }

  set {
    name  = "metrics.enabled"
    value = "true"
  }

  set_string {
    name  = "service.annotations.prometheus\\.io/port"
    value = "9127"
  }
}

좋아, 괜찮아 Lucas, 하지만 기본적으로 Helm 공급자page를 표시했습니다. 여기서 시간을 낭비하는 건가요?



이 게시물에서는 helm_relase 리소스의 이 과도한set {} 매개변수를 모두 처리하고자 합니다. 이러한 변수를 관리하는 더 쉬운 방법이 있어야 합니다.



실제로 튜토리얼에서 이미 그 방법을 보여주었습니다! values 매개변수를 사용하고 모든 변수를 YAML 형식으로 전달할 수 있습니다.

values = [
  "${file("values.yaml")}"
]

파일 함수를 사용하는 대신 EOF 형식으로 전달할 수도 있습니다.




루카스...





알았어 알았어 미안해! 본론으로 들어가겠습니다. 조금만 더 기다려 주세요!



템플릿 파일



terraform에서는 templatefile function 을 사용하여 동적 템플릿을 만들 수 있습니다. 이 함수를 helm_release 리소스의 values 매개변수와 결합하면 많은 유연성을 얻을 수 있습니다!



템플릿 파일 기능은 Terraform과 구문이 약간 다르지만 쉽게 적응할 수 있습니다.



예:



backends.tmpl



%{ for addr in ip_addrs ~}
backend ${addr}:${port}
%{ endfor ~}


그리고 이 템플릿을 렌더링하려면:


templatefile("${path.module}/backends.tmpl", { port = 8080, ip_addrs = ["10.0.0.1", "10.0.0.2"] })


출력 제공:


backend 10.0.0.1:8080
backend 10.0.0.2:8080


그렇습니다. 궁금한 경우 if 문을 사용할 수도 있습니다.



이 모든 유연성을 값 매개변수에 직접 사용할 수 있으며 다음은 동적values.yaml을 만드는 방법의 예입니다.




<script id="gist-ltag"src="https://gist.github.com/souzaxx/c59ad91872ea0e9fef00c72b900e32e3.js?file=aws-vpc-cni.yaml.tpl"/>


Templatefile은 삶을 더 쉽게 만들어주는 테라폼 개체도 허용합니다.




<script id="gist-ltag"src="https://gist.github.com/souzaxx/c59ad91872ea0e9fef00c72b900e32e3.js?file=helm_relase_example.tf"/>


완전한 예를 따르고 싶다면:



<사업부 클래스="readme-개요">

수작스 / EKS-온-스테로이드








다음 게시물에서는 이 프로젝트에 대해 자세히 설명하고 IP 주소가 부족한 eks 클러스터에 어떻게 도움이 되는지 설명하겠습니다.



읽어주셔서 감사합니다.



안전을 유지하세요. 잘 지내세요.



루카스.

좋은 웹페이지 즐겨찾기