Terraform에서 MetalLB 설정 시 유의사항

Terraform의 planapply 전략 상 k8s 클러스터에 설치되어 있지 않은 CRD (CustomResourceDefinitions)를 포함하는 kubernetes_manifest를 사용하는 경우 helm_release로 선행하여 helm chart를 설치하도록 하더라도 CRD를 인식하지 않아 에러가 발생한다.

Terraform repo에 이미 이슈로 등록되어 있지만 해결해줄 의지가 없는 것으로 보인다.

문제가 해결되기 전까지는 Helm Chart를 테라포밍하지 말고, k8s 클러스터에 수동으로 설치해주어야 문제가 발생하지 않는다.

# resource "helm_release" "metallb" {
#   name             = "metallb"
#   namespace        = "metallb-system"
#   create_namespace = true

#   repository = "https://metallb.github.io/metallb"
#   chart      = "metallb"
#   version    = "0.14.9"

#   skip_crds = false
# }

resource "kubernetes_manifest" "metallb_ip_pool" {
#   depends_on = [helm_release.metallb]

  manifest = {
    apiVersion = "metallb.io/v1beta1"
    kind       = "IPAddressPool"
    metadata   = {
      name      = "default-address-pool"
      namespace = "metallb-system"
    }
    spec       = {
      addresses = var.ip_pool_addresses
    }
  }
}

resource "kubernetes_manifest" "metallb_advertisement" {
#   depends_on = [helm_release.metallb]

  manifest = {
    apiVersion = "metallb.io/v1beta1"
    kind       = "L2Advertisement"
    metadata   = {
      name      = "l2"
      namespace = "metallb-system"
    }
  }
}

K8s 클러스터에 다음과 같이 직접 설치하거나 Helm Chart로 설치한다.

kubectl create namespace metallb-system
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.9/config/manifests/metallb-native.yaml

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다