클라우드/Azure-Terraform

Azure terraform provisioning 구현

Hoony.Song 2024. 6. 18. 08:38
반응형
간단하게 aks를 생성하는 provisioning 코드를 구성
RS 그룹에 한 서비스를 통으로 넣어서 관리할 수 있도록 디렉토리 구조를 구성했다 

 

provisoning 코드의 디렉토리 구조 

main
├── common
│   ├── manifests
│   │   ├── config_map
│   │   ├── helm
│   │   ├── kube_list
│   │   └── kube_yaml
│   ├── user_templates
│   └── wrapper
└── provision
    ├── RS1 ( 실제 프로비저닝 위치) 
    └── RS2

 

리소스 그룹 목록

RS1
├── aks_cluster.tf
├── network.tf
├── output.tf
├── provider.tf
├── resource_group.tf
└── variables.tf

 

global.tfvars

location = "koreacentral"
  • 실제 작업디렉토리의 전역변수 말고도 global 전역 변수를 만들었다 

terraform.tfvars

resource_group_name = "test-hoony-rs"
resource_tag= {
    resource_group_name = "test-hoony-rs"
    Project = "edu"
  }

variables.tf

variable "location" {}
variable "resource_tag" {}
variable "resource_group_name" {}

provider.tf

provider "azurerm" {
  features {}
}

terraform {
  backend "local" {}

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.99.0"
    }
    kubernetes = {
       source  = "hashicorp/kubernetes"
    }
  }
}

data "azurerm_kubernetes_cluster" "aks" {
  name                = module.aks_kubernetes_cluster.name
  resource_group_name = module.resource_group.resource_group_name
  depends_on = [ 
    module.resource_group,
    module.aks_kubernetes_cluster
    ]
}

provider "kubernetes" {
  config_path = "~/.kube/config"
  host                   = data.azurerm_kubernetes_cluster.aks.kube_config[0].host
  client_certificate     = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config[0].client_certificate)
  client_key             = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config[0].client_key)
  cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config[0].cluster_ca_certificate)
}
  • backend 는 따로 구성하지 않았다 

 

resource_group.tf

module "resource_group" {
  source   = "../../../modules/base/resource_group"
  name     = var.resource_group_name
  location = var.location
  tags     = var.resource_tag
}

 

aks_cluster.tf

locals {
  dns_prefix = "test-hoony-dns"
  node_pool_name = "hoonypool2"
  cluster_name = "test-hoony-3"
  default_node_pool_name = "hoonypool"
}

module "aks_kubernetes_cluster" {
  source              = "../../../modules/container/kubernetes_cluster"
  dns_prefix          = local.dns_prefix
  name                = local.cluster_name
  location            = var.location
  resource_group_name = var.resource_group_name
  default_nodepool_name = local.default_node_pool_name
  enable_auto_scaling = true
  vm_size = "Standard_DS2_v2"
  max_count = 4
  min_count = 2
  depends_on = [
    module.resource_group
  ]
}

# module "node_pool" {
#   source = "../../../modules/container/kubernetes_node_pool"
#   name = local.node_pool_name
#   cluster_id = module.aks_kubernetes_cluster.id
#   max_count = 2
#   min_count = 1
#   vm_size = "Standard_DS2_v2"
#   enable_auto_scaling = true
# }

 

이렇게 aks를 구성해 봤다 

 

잘 생성 된다 

반응형