7 min read

AKS λͺ¨λ“ˆμ„ λ§Œλ“€μ–΄ 보자

Table of Contents

ν˜„μž¬ νšŒμ‚¬μ—μ„œλŠ” 일본 λ¦¬μ „μ˜ VM ν™˜κ²½μ„ AKS둜 μ „ν™˜ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
μΆ”κ°€λ‘œ, λͺ‡λͺ‡ κ³³μ—μ„œ Azure ν™˜κ²½μ„ μš”κ΅¬ν•˜λŠ” κ²½μš°κ°€ 더 μƒκ²ΌμŠ΅λ‹ˆλ‹€.

κΈ°μ‘΄ AKS ν™˜κ²½μ„ κ΅¬μ„±ν–ˆλ˜ Terraform μ½”λ“œλŠ” λ³€μˆ˜ 뢄리 μ •λ„λŠ” λ˜μ–΄ μžˆμ§€λ§Œ, λͺ¨λ“ˆν™”κ°€ λ˜μ–΄ μžˆμ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 거기에 Azure μ§„μ˜μ€ μ°Έκ³ ν•  λͺ¨λ“ˆλ„ λ§Žμ§€ μ•Šκ³ , λͺ‡λͺ‡ κ³³μ—μ„œλŠ” νŠΉλ³„ν•œ 쑰건도 μžˆμ—ˆκΈ° λ•Œλ¬Έμ— λͺ¨λ“ˆμ„ 직접 μž‘μ„±ν•˜κΈ°λ‘œ ν–ˆμŠ΅λ‹ˆλ‹€.

μ΄λ²ˆμ—λŠ” λͺ¨λ“ˆμ„ 직접 λ§Œλ“€λ©΄μ„œ κ³ λ―Όν–ˆλ˜ λ‚΄μš©κ³Ό κ΅¬ν˜„ λ‚΄μš©μ„ κ°„λ‹¨νžˆ 정리해 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

:::warning λ“€μ–΄κ°€κΈ° 전에

κΈ€μ—μ„œ NAT Gateway κ΄€λ ¨ λ‚΄μš©μ΄ λ“±μž₯ν•˜λŠ”λ°, 아직 μ‹€μ œ μ‚¬μš© 사둀가 μ—†μ–΄ μ™„μ „νžˆ κ²€μ¦λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 참고만 ν•΄ μ£Όμ„Έμš”.

:::

Terraform λͺ¨λ“ˆμ˜ ν•„μš”μ„±

λ“€μ–΄κ°€κΈ° 전에도 μž μ‹œ μ„€λͺ…ν–ˆμ§€λ§Œ, Terraform λͺ¨λ“ˆμ΄ ν•„μš”ν•˜λ‹€κ³  νŒλ‹¨ν•œ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μ•˜μŠ΅λ‹ˆλ‹€.
μ‚¬μš©ν•˜λŠ” λ„κ΅¬λ§Œ Terraform일 뿐, ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜λ‚˜ λͺ¨λ“ˆ, ν…œν”Œλ¦Ώμ„ μ‚¬μš©ν•˜λŠ” μ΄μœ μ™€ λΉ„μŠ·ν•©λ‹ˆλ‹€.

  1. λ³€μˆ˜ 뢄리λ₯Ό ν†΅ν•œ ν™•μž₯μ„±
    • λ³€μˆ˜λ₯Ό ν•˜λ“œμ½”λ”©ν•˜λ©΄ 섀정을 λ³€κ²½ν•΄μ•Ό ν•  λ•Œ λ“±μ˜ μƒν™©μ—μ„œ μœ μ—°ν•˜κ²Œ λŒ€μ‘ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” Terraform도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.
    • 특히 Terraform은 λ¦¬μ†ŒμŠ€λͺ…을 ν¬ν•¨ν•œ μ€‘μš” 정보에 변경이 생기면 Replace μ΄λ²€νŠΈκ°€ λ°œμƒν•˜λ―€λ‘œ 쀑간에 인프라 곡백이 생길 수 있고, μ‹ μ€‘ν•˜κ²Œ 섀정을 관리해야 ν•©λ‹ˆλ‹€.
    • 가독성 λ©΄μ—μ„œλ„ μ’‹μŠ΅λ‹ˆλ‹€.
  2. μž¬μ‚¬μš©μ„±
    • λ³€μˆ˜ λΆ„λ¦¬λŠ” λͺ¨λ“ˆμ΄ 없어도 κ°€λŠ₯ν•©λ‹ˆλ‹€. (초기 AKSκ°€ κ·Έλ ‡κ²Œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€)
    • ν•˜μ§€λ§Œ λͺ¨λ“ˆ ν˜•νƒœλ‘œ λ§Œλ“€μ–΄ 두면 둜컬의 경우 μƒλŒ€ 경둜, μ™ΈλΆ€ 곡개된 λͺ¨λ“ˆμ€ 곡개된 μ΄λ¦„μœΌλ‘œ μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ¬Όλ‘  λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ νŒŒμΌμ„ λ³΅μ‚¬ν•˜λŠ” μ‹μœΌλ‘œ ν•  수 μžˆμ§€λ§Œ, λ”°λ‘œ 관리해야 ν•˜λŠ” λ¦¬μ†ŒμŠ€κ°€ μ•„λ‹ˆλΌλ©΄ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 이유둜 λͺ¨λ“ˆμ΄ ν•„μš”ν•˜λ‹€κ³  νŒλ‹¨ν•œ μƒνƒœμ—μ„œ μ΅œλŒ€ν•œ κ°„λ‹¨ν•˜κ³ , 기본적인 κΈ°λŠ₯만 κΉ”λ”ν•˜κ²Œ κ΅¬ν˜„ν•΄ μœ μ§€λ³΄μˆ˜κ°€ μ‰½κ²Œ λ§Œλ“œλŠ” 것이 λͺ©μ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“ˆ μ„€λͺ…

μ‹€μ œλ‘œλŠ” λͺ¨λ“ˆμ„ 2개 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
1κ°œλŠ” CPU, GPU 등에 관계없이 단일 ν΄λŸ¬μŠ€ν„° ν™˜κ²½μ„ κ³ λ €ν•˜κ³  μƒμ„±λ˜μ—ˆκ³ , λ‹€λ₯Έ ν•˜λ‚˜λŠ” CPU와 GPU ν΄λŸ¬μŠ€ν„°λ₯Ό λΆ„λ¦¬ν•˜λŠ” μš”κ΅¬μ‚¬ν•­μ„ κ³ λ €ν•˜μ—¬ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

기본적인 고렀사항은 κ°™κΈ° λ•Œλ¬Έμ—, μ—¬κΈ°μ„œλŠ” 단일 ν΄λŸ¬μŠ€ν„° λͺ¨λ“ˆλ§Œ μ„€λͺ…ν•˜λ € ν•©λ‹ˆλ‹€.
λͺ¨λ“ˆμ€ 총 4개의 파일둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

  • variable.tf : λͺ¨λ“ˆμ— ν•„μš”ν•œ λ³€μˆ˜λ₯Ό μ •μ˜ν•œ νŒŒμΌμž…λ‹ˆλ‹€. μ•„λž˜μ—μ„œ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.
  • provider.tf : ν•„μš”ν•œ Providerλ₯Ό μ •μ˜ν•˜λŠ” κ³³μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œλŠ” azurerm 만 μ‚¬μš©ν•©λ‹ˆλ‹€.
    • ꡬ독이 μ—¬λŸ¬ 개일 경우 μ•Œλ§žμ€ Azure ꡬ독 IDλ₯Ό μ§€μ •ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • output.tf : Terraform λͺ…λ Ήμ–΄ μ‹€ν–‰ ν›„ μ›ν•˜λŠ” 좜λ ₯을 μ •μ˜ν•©λ‹ˆλ‹€.
    • μ—¬κΈ°μ„œ 좜λ ₯된 값은 μ‹€μ œ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” κ³³μ—μ„œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • main.tf : μ‹€μ œ Terraform μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—­μ‹œ μ•„λž˜μ—μ„œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

variable.tf 파일 μ„€λͺ…

총 8개의 λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ³€μˆ˜λͺ…μ„€λͺ…λΉ„κ³ 
rsc_group_nameλ¦¬μ†ŒμŠ€ κ·Έλ£Ή 이름Azure ν¬νƒˆμ—μ„œ 직접 μƒμ„±ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
aks_cluster_nameAKS ν΄λŸ¬μŠ€ν„° 이름
subscription_idAzure ꡬ독 ID
ops_node_vm_sizeκ΄€λ¦¬μš© λ…Έλ“œ ν’€μ˜ VM 크기
ops_node_countκ΄€λ¦¬μš© λ…Έλ“œ ν’€μ˜ λ…Έλ“œ 수
node_poolsλ…Έλ“œ ν’€μ˜ 섀정을 μ •μ˜ν•˜λŠ” 객체 λ°°μ—΄ν•˜λ‹¨ μ„€λͺ… μ°Έκ³ 
connect_natNAT Gateway μ—°κ²° μ—¬λΆ€μ—°κ²°ν•  NAT GatewayλŠ” μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. (μ—†μœΌλ©΄ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.)
nat_gateway_nameμ—°κ²°ν•  NAT Gateway의 μ΄λ¦„μž…λ‹ˆλ‹€.
use_blob_storageBlob Storage μ‚¬μš© μ—¬λΆ€AKSμ—μ„œ 기본적으둜 λΉ„ν™œμ„±ν™”λ˜μ–΄ 있기 λ•Œλ¬Έμ—, λͺ…μ‹œμ μœΌλ‘œ ν™œμ„±ν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  1. λ¦¬μ†ŒμŠ€ 그룹을 직접 μƒμ„±ν•˜λ„λ‘ ν•œ 이유

    • λ¦¬μ†ŒμŠ€ κ·Έλ£Ή 생성도 λ‹Ήμ—°νžˆ μžλ™ν™”κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
      ν•˜μ§€λ§Œ λ¦¬μ†ŒμŠ€ 그룹을 생성할 λ•Œ 이름과 리전 μ •λ„λŠ” ν™•μΈν•˜λŠ” 게 μ’‹κ² λ‹€ νŒλ‹¨ν•˜μ—¬ μΌλΆ€λŸ¬ ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
    • μ΄κ²ƒκΉŒμ§€ μžλ™μœΌλ‘œ μƒμ„±ν•˜κ³  μ‹Άλ‹€λ©΄ data 블둝을 resource λΈ”λ‘μœΌλ‘œλ§Œ λ³€κ²½ν•˜λ©΄ λ©λ‹ˆλ‹€.
  2. κ΄€λ¦¬μš© λ…Έλ“œ 풀을 μ„€μ •ν•œ 이유

    • μž‘μ„±ν•œ λͺ¨λ“ˆμ—μ„œλŠ” 기본적으둜 κ΄€λ¦¬μš© λ…Έλ“œ 풀을 μƒμ„±ν•˜κ³ , Auto-scaling은 λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • μΆ”κ°€ λ…Έλ“œ 풀은 λ³„λ„μ˜ azurerm_kubernetes_cluster_node_pool λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•΄ μ„€μ •ν•©λ‹ˆλ‹€.
    • 이λ₯Ό μ„€μ •ν•œ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
      • azurerm_kubernetes_cluster λ¦¬μ†ŒμŠ€μ—λŠ” default_node_pool μ΄λΌλŠ” ν•­λͺ©μ΄ 있고, 이 값은 ν•„μˆ˜μž…λ‹ˆλ‹€.
      • μ‹œμŠ€ν…œ λ…Έλ“œ 풀을 직접 λ³€κ²½ν•˜λŠ” 것은 μƒλ‹Ήνžˆ μœ„ν—˜ν•©λ‹ˆλ‹€. 특히 운영 쀑인 ν΄λŸ¬μŠ€ν„°λΌλ©΄ λ¦¬μŠ€ν¬κ°€ 더 μ»€μ§‘λ‹ˆλ‹€.
      • λ…Έλ“œ 풀이 μ—¬λŸ¬ κ°œμ΄κ±°λ‚˜ 변동이 λ§Žμ„ λ•Œλ„ μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • AKS μš΄μ˜μ„ ν•΄ λ³΄λ©΄μ„œ AGIC (Application Gateway Ingress Controller) λ“± λ…Έλ“œ 변경이 μžˆμ–΄μ•Ό ν•  λ•Œλ„ μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” λ¦¬μ†ŒμŠ€λ“€μ΄ μžˆλ‹€λŠ” 것을 λ°°μ› μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¦¬μ†ŒμŠ€λ“€μ€ 관리 λ…Έλ“œ λ˜λŠ” κ°€μš©μ„±μ΄ 보μž₯된 λ…Έλ“œμ— μœ„μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μ‚¬μš©μž μ„€μ • λ…Έλ“œ 풀은 λ³„λ„λ‘œ μ„€μ •ν•˜κ³ , κΈ°λ³Έ λ…Έλ“œ 풀은 λ³€ν•˜μ§€ μ•ŠλŠ” μƒνƒœλ‘œ μ‹œμŠ€ν…œμ΄ κ΄€λ¦¬ν•˜λŠ” 것이 κ°€μž₯ λ°”λžŒμ§ν•˜λ‹€κ³  νŒλ‹¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
      • λ…Έλ“œ 풀이 1개이고, VM μ‚¬μ΄μ¦ˆλ„ κ³ μ •μœΌλ‘œ μ‚¬μš©ν•˜λŠ” λ“± κ·Ήν•œμœΌλ‘œ 경직된 ν™˜κ²½μ΄λΌλ©΄ 관리 λ…Έλ“œ 풀이 ν•„μš”ν•˜μ§€ μ•Šκ² μ§€λ§Œ, 그런 μΌ€μ΄μŠ€λ₯Ό κ³ λ €ν•˜μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  3. node_pools λ³€μˆ˜μ— λŒ€ν•œ μ„€λͺ…

    • node_pools λ³€μˆ˜λŠ” 객체 λ°°μ—΄λ‘œ 이루어져 있으며, λ‹€μŒκ³Ό 같은 ν˜•μ‹μž…λ‹ˆλ‹€.

      node_pools = [
        {
          name = "cpupool"                            # 이름
          vm_size = "Standard_D8as_v5"                # VM 크기
          node_count = 1                              # λ…Έλ“œ 수
          auto_scaling_enabled = true                 # Auto-scaling ν™œμ„±ν™” μ—¬λΆ€
          min_count = 1                               # Auto-scaling μ‹œ λ…Έλ“œ μ΅œμ†Œ 개수
          max_count = 5                               # Auto-scaling μ‹œ λ…Έλ“œ μ΅œλŒ€ 개수
          node_labels = {                             # λ…Έλ“œμ— μ„€μ •ν•  Label
            "haulrest.me/usage" = "cpu"
          }
          node_taints = []                            # λ…Έλ“œμ— μ„€μ •ν•  Taint
          enabled = true                              # λ…Έλ“œ ν’€ 자체의 ν™œμ„±ν™” μ—¬λΆ€
        },
        {
          name = "gpupool"
          vm_size = "Standard_NC8as_T4_v3"
          node_count = 1
          auto_scaling_enabled = false
          node_labels = {
            "haulrest.me/usage" = "gpu"
          }
          node_taints = [
            "haulrest.me/app=gpu:NoSchedule"
          ]
          enabled = false
        }
      ]

      λ…Έλ“œ 풀은 μš©λ„μ™€ μ„€μ •, μ •μ±… 등에 따라 λ³€ν•  수 μžˆλŠ” μš”μ†Œκ°€ 맀우 λ§ŽμŠ΅λ‹ˆλ‹€. μ΅œλŒ€ν•œ λ§Žμ€ 뢀뢄을 λͺ¨λ“ˆλ‘œ μ»€λ²„ν•˜κ³  μ‹Άμ—ˆκΈ° λ•Œλ¬Έμ—, 객체 배열을 μ‚¬μš©ν•˜μ—¬ νƒ€μž…μ„ μ •μ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  4. NAT Gateway μ˜΅μ…˜μ— κ΄€ν•˜μ—¬

    • NAT GatewayλŠ” νŠΉμ •ν•œ μ•„μ›ƒλ°”μš΄λ“œ 톡신과 그둜 μΈν•œ μ‘λ‹΅λ§Œ 였갈 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. 일뢀 ν™˜κ²½μ—μ„œ 이에 λŒ€ν•œ μš”κ΅¬μ‚¬ν•­μ΄ μžˆμ„ 수 있기 λ•Œλ¬Έμ—, μ˜΅μ…˜μ„ λΆ„λ₯˜ν•΄ λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
    • NAT Gateway λ¦¬μ†ŒμŠ€λŠ” 이 λͺ¨λ“ˆμ—μ„œ μƒμ„±ν•˜μ§€ μ•Šκ³ , μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λ €λ©΄ 이미 μƒμ„±λœ λ¦¬μ†ŒμŠ€κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•œ μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
      • NAT GatewayλŠ” λΉ„μš©λ„ 있고 곡개 IP 정보 등을 μ „λ‹¬ν•΄μ„œ 방화벽을 κ°œλ°©ν•˜λŠ” μž‘μ—…λ„ 이루어지기 λ•Œλ¬Έμ— λͺ¨λ“ˆμ„ μƒˆλ‘œ μž‘μ„±ν•˜λ”λΌλ„ λ”°λ‘œ κ΄€λ¦¬ν•˜λŠ” 것이 μ’‹λ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.
      • μ‰½κ²Œ 변경이 νž˜λ“€κΈ° λ•Œλ¬Έμ— κΈ°μ‘΄ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€ νŒλ‹¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€. (예λ₯Ό λ“€μ–΄, ν˜„μž¬ SaaS ν™˜κ²½μ˜ AKSλ₯Ό λ‹€μ‹œ κ΅¬μ„±ν•˜κ²Œ λ˜μ–΄λ„ NAT Gateway μͺ½μ€ 이미 ν†΅λ³΄λ˜μ–΄ μžˆλŠ” IP 변경이 쉽지 μ•ŠκΈ° λ•Œλ¬Έμ— μž¬μ‚¬μš©μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.)
    • 쑰건에 따라 importλ₯Ό ν•˜λŠ” 것도 κ³ λ €ν–ˆμ§€λ§Œ Terraformμ—μ„œ νŽΈλ²•μ μΈ 방법을 μ œμ™Έν•˜κ³ λŠ” Conditional importλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— λ°°μ œν–ˆμŠ΅λ‹ˆλ‹€.

main.tf 파일 μ„€λͺ…

μ£Όμš” λ‚΄μš©λ§Œ κ°„λ‹¨νžˆ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

  • λ‹€μŒ ꡬ성 μš”μ†Œλ“€μ„ μ •μ˜ν•΄ λ‘μ—ˆκ³ , λͺ¨λ“ˆμ„ μ„€μΉ˜ν•˜λ©΄ μƒμ„±λ©λ‹ˆλ‹€.
    • ν΄λŸ¬μŠ€ν„°
    • λ…Έλ“œ ν’€ (μ„€μ •ν•œ λŒ€λ‘œ)
    • VNet, Subnet
    • Ingress에 μ“Έ 곡인 IP
    • Network Contributor κΆŒν•œ (가상 λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄ AKSκ°€ ν•„μš”λ‘œ ν•˜λŠ” κΆŒν•œ)
  • NAT Gateway 데이터λ₯Ό λΆˆλŸ¬μ˜€λŠ” 것과 Association 생성은 connect_nat μ˜΅μ…˜μ΄ ν™œμ„±ν™”λ˜μ—ˆμ„ λ•Œλ§Œ μž‘λ™ν•©λ‹ˆλ‹€.
  • AKS의 μ•„μ›ƒλ°”μš΄λ“œ 섀정도 connect_nat μ˜΅μ…˜μ΄ ν™œμ„±ν™”λ˜μ—ˆμ„ λ•Œλ§Œ userAssignedNATGateway 섀정을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • λ…Έλ“œ 풀은 μœ„μ—μ„œ μ„€λͺ…ν•œ λŒ€λ‘œ ν΄λŸ¬μŠ€ν„°μ˜ κΈ°λ³Έ λ…Έλ“œ 풀이 λ”°λ‘œ 있고, μ‚¬μš©μž λ…Έλ“œ 풀은 for_each λ°˜λ³΅λ¬Έμ„ 톡해 μƒμ„±ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    • κΈ°λ³Έ λ…Έλ“œ 풀에 temporary_name_for_rotation μ΄λΌλŠ” μ˜΅μ…˜μ΄ μžˆλŠ”λ°, μ΄λŠ” μ—…λ°μ΄νŠΈ λ“±μœΌλ‘œ λ…Έλ“œ ν’€ ꡐ체가 μ΄λ£¨μ–΄μ§ˆ λ•Œ μž„μ‹œλ‘œ μ‚¬μš©ν•  μ΄λ¦„μž…λ‹ˆλ‹€. (μ μ ˆν•œ 값을 λ„£μœΌλ©΄ λ©λ‹ˆλ‹€.)

κ·Έ μ™Έ

  • λͺ¨λ“ˆ κΈ°λ³Έ μ„ΈνŒ…μ„ μ‰½κ²Œ ν•  수 μžˆλ„λ‘ μ˜ˆμ‹œ μ½”λ“œμ™€ λ¬Έμ„œλ₯Ό νŒ€ 내에 μΆ”κ°€λ‘œ κ³΅μœ ν–ˆμŠ΅λ‹ˆλ‹€.
  • GPUλ‚˜ 일뢀 μ΅œμ‹  CPU VM의 경우 ν• λ‹ΉλŸ‰ λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Azureμ—μ„œ 기본적으둜 적은 수, 특히 GPU의 경우 0으둜 ν• λ‹ΉλŸ‰μ΄ μ„€μ •λ˜μ–΄ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. 특히 GPU의 경우 μžλ™ ν• λ‹ΉλŸ‰ 증가 μš”μ²­μ΄ λΆˆκ°€λŠ₯ν•΄μ„œ, 직접 지원 티켓을 톡해 μš”μ²­ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.
  • AKSμ—μ„œ Ingressλ₯Ό μ„ΈνŒ…ν•˜λŠ” κ³Όμ •μ—μ„œ 2개 Annotation이 ν•„μš”ν•©λ‹ˆλ‹€.
    • service.beta.kubernetes.io/azure-load-balancer-resource-group: λ¦¬μ†ŒμŠ€ κ·Έλ£Ή 이름
    • service.beta.kubernetes.io/azure-pip-name: Ingress에 μ‚¬μš©ν•  곡인 IP λ¦¬μ†ŒμŠ€ 이름
  • μŠ€ν† λ¦¬μ§€ 계정과 같이 μ‹€μ œ ν™˜κ²½μ—μ„œ λͺ¨λ“ˆμ˜ λ²”μœ„λ₯Ό λ„˜μ–΄μ„œλŠ” μΆ”κ°€ μš”κ΅¬μ‚¬ν•­μ΄ ν•„μš”ν•œ 경우 직접 μž‘μ—…μ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이 κΈ€κ³Ό κ΄€λ ¨λœ λ‚΄μš©μ€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— λ„˜μ–΄κ°€λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

마치며

μœ„μ— 적은 λͺ‡ κ°€μ§€ λ‚΄μš©λ§Œ μ£Όμ˜ν•˜λ©΄, λ³€μˆ«κ°’ λͺ‡ κ°œλ§Œμ„ 적절히 μ‘°μ •ν•˜λŠ” κ²ƒμœΌλ‘œ λͺ¨λ“ˆμ„ 톡해 AKS ν™˜κ²½μ„ κ΅¬ν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ λ§Œλ“€μ–΄μ§„ 2개의 λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜μ—¬ μš”κ΅¬μ‚¬ν•­μ— λ§žλŠ” AKS ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ κ΅¬μ„±ν•˜μ—¬ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

AWS에도 Kubernetes ν™˜κ²½μ„ ꡬ성해야 ν•˜λŠ”λ°, 이 λ•ŒλŠ” terraform-aws-modules에 λ§Žμ€ λͺ¨λ“ˆμ΄ μžˆμ–΄ ν™œμš©ν•˜κΈ° μ’‹μŠ΅λ‹ˆλ‹€.
Azure에도 λͺ‡λͺ‡ λͺ¨λ“ˆμ΄ μžˆμ§€λ§Œ AWS μ§„μ˜μ— λΉ„ν•΄μ„œλŠ” λΆ€μ‘±ν•˜λ‹€κ³  λŠκΌˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ λͺ¨λ“ˆμ„ 직접 λ§Œλ“€μ–΄ λ³΄λŠ” 것도 쒋은 κ²½ν—˜μ΄ λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μœ„μ—μ„œ μ„€λͺ…ν•œ Terraform μ½”λ“œλŠ” μ•„λž˜μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

GitHub

참고 자료