[vpc.tf]
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "3.19.0"
name = var.vpc_name
cidr = var.vpc_cidr
azs = var.azs
public_subnets = [for index in range(2):cidrsubnet(var.vpc_cidr, 8, index+1)]
private_subnets = [for index in range(2):cidrsubnet(var.vpc_cidr, 8, index+11)]
enable_nat_gateway = true
single_nat_gateway = true
enable_dns_hostnames = true
public_subnet_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
"kubernetes.io/role/elb" = 1
}
private_subnet_tags = {
"kubernetes.io/cluster/${var.cluster_name}" = "shared"
"kubernetes.io/role/internal-elb" = 1
}
}
- 서브넷은 24비트로 퍼블릭은 1,2, 프라이빗은 11,12로 생성
- tags = shared 를 넣어줘야 클러스터로 인식하여 네트워크 형성이 가능하다.
[eks.tf]
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "19.5.1"
cluster_name = var.cluster_name
cluster_version = var.cluster_version
cluster_endpoint_private_access = true
cluster_endpoint_public_access = true
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
eks_managed_node_groups = {
default_node_group = {
name = "dhkim-eks-node-group"
disk_size = 10
min_size = 1
max_size = 3
desired_size = 2
instance_types = ["t3.small"]
ami_type = "AL2_x86_64"
tags = {
"k8s.io/cluster-autoscaler/enabled" : "true"
"k8s.io/cluster-autoscaler/${var.cluster_name}" : "true"
}
}
}
}
- EKS생성
- 외부에서도 접근할 수 있도록 Public_access 허용
- tags를 통해 EKS 오토스케일링 활성화
[S3.tf]
resource "aws_s3_bucket" "terraform_bucket" {
bucket = var.s3_bucket_name
}
resource "aws_dynamodb_table" "terraform_lock_table" {
name = var.dynamodb_table_name
hash_key = "LockID"
read_capacity = 5
write_capacity = 5
attribute {
name = "LockID"
type = "S"
}
}
- S3 backend 저장을 위한 s3버킷생성
- 동시작업방지를 위한 dynamoDB에 대한 Lock생성
[variables.tf]
variable "vpc_name" {
description = "VPC Name"
type = string
default = null
}
variable "vpc_cidr" {
description = "VPC CIDR Range"
type = string
default = null
}
variable "region" {
default = "ap-northeast-2"
}
variable "azs" {
description = "A list of availability zones names or ids in the region"
type = list(string)
default = ["ap-northeast-2a", "ap-northeast-2c"]
}
variable "cluster_name" {
description = "Cluster Name"
type = string
default = null
}
variable "cluster_version" {
description = "Cluster Version"
type = string
default = null
}
variable "s3_bucket_name" {
description = "S3 bucket name"
type = string
default = null
}
variable "dynamodb_table_name" {
description = "s3backend_dynmamodb_name"
type = string
default = null
}
[dhkim.auto.tfvars]
vpc_name = "dhkim-vpc-terraform"
vpc_cidr = "20.0.0.0/16"
cluster_name = "dhkim-eks"
cluster_version = "1.24"
s3_bucket_name = "dhkim-terraform-eks-0421"
dynamodb_table_name = "dhkim-terraform-dynamodb-0421"
- 변경이 필요한 리소스들에 대해서는 auto.tfvars로 따로 분류했다
[backend.tf]
terraform {
backend "s3" {
bucket = "dhkim-terraform-eks-0421"
key = "terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "dhkim-terraform-dynamodb-0421"
}
}
- 상기에 설정한 s3버킷과 dynamodb테이블 이름으로 backend를 생성
- backend같은 경우 버킷 및 dynamodb가 생성된 후 init -> apply 과정을 통해 한번 더 작업을
해야하는데 스크립트를 통해서 자동화가 가능하다.
[terraform apply]
- Terraform apply 후 EKS를 시작하기 위한 리소스들이 깔끔하게 생성되었다.
'Kubernetes' 카테고리의 다른 글
[Monitoring] EKS & Prometheus & Grafana (0) | 2023.06.11 |
---|---|
[AWS EKS] 웹 애플리케이션 구축하기 - 5.CI/CD구성 (0) | 2023.04.27 |
[AWS EKS] 웹 애플리케이션 구축하기 - 4.서비스 배포 (0) | 2023.04.25 |
[AWS EKS] 웹 애플리케이션 구축하기 - 3.EKS 클러스터 설정 (0) | 2023.04.24 |
[AWS EKS] 웹 애플리케이션 구축하기 - 1.환경설정 (0) | 2023.04.12 |