IaC/Terraform

[Terraform] 테라폼과 네이버클라우드 연동해보기

graph-dev 2024. 11. 13. 20:38
728x90

terraform 로고

 

 

가장 편한 방법은 코드로 인프라를 관리하는 것입니다. 그 중에 하나가 이 terraform이 됩니다.

 

 

 

리눅스 서버를 하나 생성해둡니다.

 

이 서버가 일종의 명령 서버가 될 것입니다.

 

provider.tf 파일을 만듭니다. 네이버 클라우드 프로바이더가 되겠습니다.

provider.tf 파일

 

 

그 다음은 테라폼을 초기화해줍니다.

 

문제는 이 terraform 명령어가 바로 안 통한다는 겁니다. 이를 어디서든 접근 가능하도록 만들어줘야하는데, 이 과정에서 간단한 작업이 필요합니다.

 

ncloud는 repository를 설정하는 방식으로 설치하면 잘 통하지 않습니다.

 

그래서 파일 자체를 zip으로 다운로드 받고, 그 압축 파일을 해제한 다음에, 그것을 특정 경로로 이동시키면 됩니다. 아래 링크를 참고했습니다.

[이렇게 사용하세요!] 네이버 클라우드 플랫폼에서 terraform 활용[1] : ansible 연동 : 네이버 블로그

 

[이렇게 사용하세요!] 네이버 클라우드 플랫폼에서 terraform 활용[1] : ansible 연동

네이버 클라우드 플랫폼 terraform(테라폼) 활용하기: ansible 연동 ※본 콘텐츠는 네이버 클라우드 플랫폼...

blog.naver.com

 

wget https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
unzip terraform_0.13.0_linux_amd64.zip 
mv terraform /usr/local/bin/

 

wget으로 받아보기

 

이동하지 않으면 이렇게 에러가 뜹니다.

 

/usr/local/bin으로 저는 이동시켰습니다.

 

 

이렇게 해보니 terraform 명령어가 작동합니다.

 

이제 초기화를 수행합니다.

terraform init

초기화 수행

 

 

이제 main.tf 파일을 만듭니다.

 

variable "zone" {
  type    = string
  default = "KR-1"
}

resource "ncloud_vpc" "kubernetes_vpc" {
  name            = "graph-vpc"
  ipv4_cidr_block = "10.0.0.0/16"
}

resource "ncloud_subnet" "private_node_subnet" {
  vpc_no         = ncloud_vpc.kubernetes_vpc.id
  subnet         = "10.0.1.0/24"
  zone           = var.zone
  network_acl_no = ncloud_vpc.kubernetes_vpc.default_network_acl_no
  subnet_type    = "PRIVATE"
  name           = "private-node-subnet"
  usage_type     = "GEN"
}

resource "ncloud_subnet" "private_lb_subnet" {
  vpc_no         = ncloud_vpc.kubernetes_vpc.id
  subnet         = "10.0.11.0/24"
  zone           = var.zone
  network_acl_no = ncloud_vpc.kubernetes_vpc.default_network_acl_no
  subnet_type    = "PRIVATE"
  name           = "private-lb-subnet"
  usage_type     = "LOADB"
}

resource "ncloud_subnet" "public_lb_subnet" {
  vpc_no         = ncloud_vpc.kubernetes_vpc.id
  subnet         = "10.0.12.0/24"
  zone           = var.zone
  network_acl_no = ncloud_vpc.kubernetes_vpc.default_network_acl_no
  subnet_type    = "PUBLIC"
  name           = "public-lb-subnet"
  usage_type     = "LOADB"
}

resource "ncloud_subnet" "nat_subnet" {
  vpc_no         = ncloud_vpc.kubernetes_vpc.id
  subnet         = "10.0.3.0/24"
  zone           = var.zone
  network_acl_no = ncloud_vpc.kubernetes_vpc.default_network_acl_no
  subnet_type    = "PUBLIC"
  name           = "nat-subnet"
  usage_type     = "NATGW"
}

resource "ncloud_nat_gateway" "kubernetes_nat_gw" {
  vpc_no    = ncloud_vpc.kubernetes_vpc.id
  subnet_no = ncloud_subnet.nat_subnet.id
  zone      = var.zone
  name      = "kubernetes-nat-gw"
}

resource "ncloud_route_table" "kubernetes_route_table" {
  vpc_no                = ncloud_vpc.kubernetes_vpc.id
  supported_subnet_type = "PRIVATE"
  name                  = "kubernetes-route-table"
}

resource "ncloud_route" "kubernetes_route" {
  route_table_no         = ncloud_route_table.kubernetes_route_table.id
  destination_cidr_block = "0.0.0.0/0"
  target_type            = "NATGW"
  target_name            = ncloud_nat_gateway.kubernetes_nat_gw.name
  target_no              = ncloud_nat_gateway.kubernetes_nat_gw.id
}

resource "ncloud_route_table_association" "kubernetes_route_table_subnet" {
  route_table_no = ncloud_route_table.kubernetes_route_table.id
  subnet_no      = ncloud_subnet.private_node_subnet.id
}

resource "ncloud_login_key" "kubernetes_loginkey" {
  key_name = "kubernetes-loginkey"
}

resource "ncloud_nks_cluster" "terraform_cluster" {
  cluster_type         = "SVR.VNKS.STAND.C002.M008.NET.SSD.B050.G002"
  login_key_name       = ncloud_login_key.kubernetes_loginkey.key_name
  name                 = "terraform-cluster"
  lb_private_subnet_no = ncloud_subnet.private_lb_subnet.id
  lb_public_subnet_no  = ncloud_subnet.public_lb_subnet.id
  subnet_no_list       = [ncloud_subnet.private_node_subnet.id]
  vpc_no               = ncloud_vpc.kubernetes_vpc.id
  zone                 = var.zone
}

resource "ncloud_nks_node_pool" "node_pool" {
  cluster_uuid   = ncloud_nks_cluster.terraform_cluster.uuid
  node_pool_name = "terraform-node-1"
  node_count     = 2
  product_code   = "SVR.VSVR.STAND.C002.M008.NET.SSD.B050.G002"
  subnet_no_list = [ncloud_subnet.private_node_subnet.id]
}

 

 

이 파일은 아래 링크를 통해 가져왔습니다.

테라폼을 통해 Ncloud Kubernetes Service (NKS) 클러스터 구축하기 | by NAVER Cloud | NAVER Cloud | Medium

 

테라폼을 통해 Ncloud Kubernetes Service 클러스터 구축하기

네이버 클라우드 플랫폼에서 테라폼(Terraform)을 활용하여 쿠버네티스 클러스터(Kubernetes Cluster)를 생성 및 사용하는 과정을 소개 드립니다.

medium.com

 

 

이제 바로 terraform plan으로 작업 내용을 검토합니다.

 

아직 에러가 뜨네요. 잠시 확인해보고 보완해서 올리겠습니다.