반응형
지난번엔 azure modules 를 구성하고 aks_cluster를 프로비저닝 해 봤다
이번엔 aks-cluster에 helm 과 yaml 배포 namespace 등등 각종 초기세팅에 필요한것을 구성해봤다
기존 모듈에 새로운 모듈을 추가 구성했다
모듈의 디렉토리 구조
modules
├── base
│ └── resource_group
├── ETC
│ ├── helm
│ ├── kube
│ ├── kube_tpl
│ └── output_file
├── kubernetes
│ └── core
│ ├── configmap
│ └── namespace
└── network
├── publicIP
├── subnets
└── virtual_network
helm modules
resource "helm_release" "values_set" {
count = length(var.values_set) > 0 ? 1 : 0
name = var.name
repository = var.repository
chart = var.chart
namespace = var.namespace
version = var.chart_version
create_namespace = var.create_namespace
dependency_update = true
repository_username = var.repository_username
repository_password = var.repository_password
dynamic "set" {
for_each=var.values_set
content{
name=set.value["name"]
value=set.value["value"]
type=set.value["type"]
}
}
}
resource "helm_release" "values_file" {
count = length(var.values_file) > 0 ? 1 : 0
name = var.name
repository = var.repository
chart = var.chart
namespace = var.namespace
version = var.chart_version
create_namespace = var.create_namespace
dependency_update = true
repository_username = var.repository_username
repository_password = var.repository_password
values = [
templatefile(var.chart_Path,var.values_file)
]
}
resource "helm_release" "values_empty" {
count =(length(var.values_file) ==0 && length(var.values_set)==0)?1:0
name = var.name
repository = var.repository
chart = var.chart
namespace = var.namespace
version = var.chart_version
create_namespace = var.create_namespace
dependency_update = true
repository_username = var.repository_username
repository_password = var.repository_password
}
- helm 배포시 간단하게 set 을 써서 배포할 수도 있고 values.yaml 을 써서 배포할 수도 있고 아무것도 없이 배포할 수있다 모든 경우에서 배포 가능하도록 구성하였다
kube_manifests modules
terraform {
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
locals {
manifest_files = fileset(var.manifests_Path, "*.yaml")
}
resource "kubectl_manifest" "yaml_list" {
for_each = { for file in local.manifest_files : file => "${var.manifests_Path}/${file}" }
yaml_body = file(each.value)
}
resource "kubectl_manifest" "yaml" {
count = length(var.manifest_file) > 0 ? 1 : 0
yaml_body = file(var.manifest_file)
}
- kubernetes 공식 모듈의 manifests 리소스를 사용하면 cluster 생성 후에 배포 해야하는 버그? 가 있다
왜 그런지 모르겠다 왜 고쳐주질 않는것인지 ㅠ 그래서 gavinbunney 의 kubectl 모듈을 사용하였다 이것을 사용하면 aws 던 azure던 클러스터 생성과 동시에 manifests 배포가 가능하다 이 모듈을 쓰면 위 처럼 required_providers 를 모듈안에서 꼭 지정해 주어야 한다! - 이 manifests 모듈 역시 여러개를 배포할 수 있고 단일로도 배포 할 수있도록 구성하였다
kube_manifests_template modules
data "template_file" "k8s_manifest" {
template = file("${var.manifests_Path}")
vars = var.yaml_var
}
resource "kubectl_manifest" "test" {
yaml_body= data.template_file.k8s_manifest.rendered
}
terraform {
required_providers {
kubectl = {
source = "gavinbunney/kubectl"
version = ">= 1.7.0"
}
}
}
- templates 형식의 manifests 모듈이다 이게 왜 필요 했냐 하면... AWS에서 EFS스토리지 클래스 배포 할 때 EFS 관련정보를 넣어주기도 했고 ingress 에서 인증서 arn도 붙여주기 위해서 였던거 같다 azure 에서 지금 당장은 쓰지 않겠지만 일단 만들었던게 있으니 구성했다
output_file modules
resource "local_file" "value_input" {
content = var.value
filename = var.out_path
}
- 이 모듈은 README 작성을 위해 만들었다
다음 게시글에서 프로비저닝을 구성 합니다
반응형
'클라우드 > Azure-Terraform' 카테고리의 다른 글
terraform 명령어 랩핑 스크립트 (0) | 2024.06.18 |
---|---|
aks 생성시 helm 과 yaml 배포 (0) | 2024.06.18 |
Azure terraform provisioning 구현 (0) | 2024.06.18 |
Azure terraform modules 구성 (0) | 2024.06.17 |