현상: apply할 때마다 cluster 업데이트로 인해 cluster id가 바뀌면서 node pool들이 모두 replace됨
원인: azureml provider가 업그레이드 되면서 스펙이 바뀜
해결: cluster id를 data로 받아오지 않고 resource에서 직접 받아옴
[Before]
resource "azurerm_kubernetes_cluster_node_pool" "cpu" {
kubernetes_cluster_id = data.azurerm_kubernetes_cluster.this.id
...
}
[After]
resource "azurerm_kubernetes_cluster_node_pool" "cpu" {
kubernetes_cluster_id = azurerm_kubernetes_cluster.this.id
...
}
[cluster] 에는 아래 코드 추가
resource "azurerm_kubernetes_cluster" "this" {
...
lifecycle {
ignore_changes = [ default_node_pool[0].upgrade_settings ]
}
}
log
현상: kubectl provider를 사용하는 resource 들을 apply하니 발생한 에러
원인: gavinbunney/kubectl provider 이슈
해결: fork 버전인 alekc/kubectl 로 대체
apply하기 전에 아래 명령어 실행
terraform state replace-provider registry.terraform.io/gavinbunney/kubectl registry.terraform.io/alekc/kubectl
현상: module의 output 변수를 사용하려고 하니 발생한 에러
원인: module에 count를 붙임
module "mlserver_polyseg" {
count = 0
...
}
에러
╷
│ Error: Unsupported attribute
│
│ on servers.tf line 38, in output "mlserver_bbox_name":
│ 38: value = module.mlserver_bbox.name
│ ├────────────────
│ │ module.mlserver_bbox is a list of object
│
│ Can't access attributes on a list of objects. Did you mean to access
│ attribute "name" for a specific element of the list, or across all elements
│ of the list?
╵
ERRO[0004] Terraform invocation failed in /Users/aimmo/code/ailab-models/testbed/predictors
ERRO[0004] 1 error occurred:
* exit status 1
현상: AKS 에 apply를 하려니 발생한 에러
원인: AKS context 정보가 저장되어 있는 kube config 파일이 ~/.kube/config 경로가 아님(기본으로 보는 경로)
해결: kubernetes provider에 config_path 지정하거나 KUBE_CONFIG_PATH 환경 변수에 경로 지정 → 참고
해결2: client_certificate를 추가함. client_certificate가 없으니 local config값을 가져오려 한것.
provider "kubernetes" {
host = data.azurerm_kubernetes_cluster.this.kube_config[0].host
client_certificate = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].client_certificate)
client_key = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].client_key)
cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].cluster_ca_certificate)
}
참고: Credentials config 방식으로 할 경우, local에 context를 안 불러와도 되지만 AKS는 안되는 것 같음