728x90
반응형
NCP 와 k8s
nks 는 애플리케이션 컨테이너화, 배포, 스케일링 그리고 관리를 자동화하는 오픈 소스 플랫폼이다. kubernetes 환경을 구축하고, 배포 및 관리 그리고 클러스터 자동 확장이 가능하다.
# Resource: ncloud_nks_cluster
https://registry.terraform.io/providers/NaverCloudPlatform/ncloud/latest/docs/resources/nks_cluster
기본적인 작업을 마치고 plan 하는 과정에서 계속 에러가 발생했는데, NCP 에서 k8s 기능을 사용하려면 우선 동의를 하고 시작해야한다.
# error
│ Error: Status: 403 Forbidden, Body: {"error":{"errorCode":403,"message":"Please agree to the terms of service."},"timestamp":"2023-09-05T02:22:36.212Z"}
│
│ with data.ncloud_nks_versions.version,
│ on main.tf line 63, in data "ncloud_nks_versions" "version":
│ 63: data "ncloud_nks_versions" "version" {
│
클러스터 리소스 생성 feat. terraform
Naver Cloud Provider
terraform {
required_providers {
ncloud = {
source = "NaverCloudPlatform/ncloud"
}
ssh = {
source = "loafoe/ssh"
version = "2.6.0"
}
}
required_version = ">= 0.13"
}
provider "ncloud" {
access_key = var.NCP_ACCESS_KEY
secret_key = var.NCP_SECRET_KEY
region = var.region
site = var.site
support_vpc = var.support_vpc
}
ncloud, ssh
provider "ncloud" {
access_key = var.NCP_ACCESS_KEY
secret_key = var.NCP_SECRET_KEY
region = var.region
site = var.site
support_vpc = var.support_vpc
}
provider "ssh" {}
vpn & subnet
resource "ncloud_vpc" "vpc" {
name = "vpc"
ipv4_cidr_block = "10.10.0.0/16" # staging & production 과 겹치지 않게
}
resource "ncloud_subnet" "subnet" {
vpc_no = ncloud_vpc.vpc.id
subnet = cidrsubnet(ncloud_vpc.vpc.ipv4_cidr_block, 8, 5)
zone = "KR-1"
network_acl_no = ncloud_vpc.vpc.default_network_acl_no
subnet_type = "PUBLIC"
name = "k8s-subnet-01"
usage_type = "GEN"
}
resource "ncloud_subnet" "subnet_lb" {
vpc_no = ncloud_vpc.vpc.id
subnet = cidrsubnet(ncloud_vpc.vpc.ipv4_cidr_block, 8, 6)
zone = "KR-1"
network_acl_no = ncloud_vpc.vpc.default_network_acl_no
subnet_type = "PRIVATE"
name = "k8s-subnet-lb"
usage_type = "LOADB"
}
cidrsubnet 를 사용하여 주소값을 자동으로 돌려서 설정할 수 있게 할 수 있다. 복잡하게 하나하나 설정하지 않아도 된다. be 서브넷과 로드 밸런서 서브넷은 네트워크 번호로 구분 지어서 설정한다.
cidrsubnet(prefix, newbits, netnum)
<https://developer.hashicorp.com/terraform/language/functions/cidrsubnet>
이해하기 쉽게 사진은 AWS 에서 제공하는 아키텍쳐 그림을 참고하자.
nks version, login key
# k8s 는 업데이트가 잦고 이전 버전은 지원하지 않기 때문에 최신버전을 사용하는게 좋다.
data "ncloud_nks_versions" "version" {
filter {
name = "value"
values = ["1.25.8"]
regex = true
}
}
resource "ncloud_login_key" "loginkey" {
key_name = "k8s-login-key"
}
version release
<https://guide.ncloud-docs.com/docs/k8s-k8srelease>
nks cluster
resource "ncloud_nks_cluster" "cluster" { # minikube 로 했었던 클러스터
cluster_type = "SVR.VNKS.STAND.C002.M008.NET.SSD.B050.G002"
k8s_version = data.ncloud_nks_versions.version.versions.0.value
login_key_name = ncloud_login_key.loginkey.key_name
name = "ncp-k8s-cluster"
lb_private_subnet_no = ncloud_subnet.subnet_lb.id
kube_network_plugin = "cilium"
subnet_no_list = [ ncloud_subnet.subnet.id ]
public_network = true
vpc_no = ncloud_vpc.vpc.id
zone = "KR-1"
log {
audit = true
}
}
node pool >> image, product
data "ncloud_server_image" "image" {
filter {
name = "product_name"
values = ["ubuntu-20.04"]
}
}
data "ncloud_server_product" "product" {
server_image_product_code = data.ncloud_server_image.image.product_code
filter {
name = "product_type"
values = [ "STAND" ]
}
filter {
name = "cpu_count"
values = [ 2 ]
}
filter {
name = "memory_size"
values = [ "8GB" ]
}
filter {
name = "product_code"
values = [ "SSD" ]
regex = true
}
}
resource "ncloud_nks_node_pool" "node_pool" {
cluster_uuid = ncloud_nks_cluster.cluster.uuid
node_pool_name = "k8s-node-pool"
node_count = 1
product_code = data.ncloud_server_product.product.product_code
# subnet_no = [ ncloud_subnet.subnet.id ]
autoscale {
enabled = true
min = 1
max = 2
}
lifecycle {
ignore_changes = [ node_count, subnet_no_list ]
}
}
nks, 쿠버네티스의 클러스터 생성은 상당히 오랜 시간이 걸리기 때문에 테라폼에서 재생성 되는 시간을 줄여야 한다.
lifecycle {
ignore_changes = [ node_count, subnet_no_list ]
}
terraform init
terraform plan
terraform apply
네이버 클라우드 플랫폼 - 서버에 클러스터가 생성된 것을 확인 할 수 있다.
728x90
반응형
'Dev. > Terraform' 카테고리의 다른 글
Terraform: AWS 서버구축2 (0) | 2023.09.10 |
---|---|
Terraform: AWS ssh connection (0) | 2023.09.09 |
Terraform: AWS 서버구축 (0) | 2023.09.08 |
Terraform: Status 가 꼬이는 현상 (0) | 2023.09.07 |
Terraform: Separating (0) | 2023.09.06 |
댓글