EKS는 Fully Managed Kubernetes 이다. 즉, Data Plane, Control Plane 관리를 AWS에서 해준다.
EKS 클러스터 구성도 Module로 구성을 하게 되면 EKS -> 클러스터 생성 -> Node Group 생성이 된다.
Node Group 페이지에서 Worker Node를 관리할 수 있다.
본 포스팅은 해당 Node Group에 Worker Node를 추가하는 방법을 사용한다.
이번 포스팅에는 공식적으로 제공하는 terraform-aws-eks 모듈을 사용하고 약간의 커스터마이징을 하여 사용한다.
Bastion Host와 마찬가지로 Github에서 제공하는 input값을 사용하여 커스터마이징을 할 것이고 제공하는 Input 값이 무려 56개가 되니 상세하게 커스터마이징을 할 수 있다.
data "aws_eks_cluster" "cluster" {
name = module.my-cluster.cluster_id
}
data "aws_eks_cluster_auth" "cluster" {
name = module.my-cluster.cluster_id
}
provider "kubernetes" {
host = data.aws_eks_cluster.cluster.endpoint
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)
token = data.aws_eks_cluster_auth.cluster.token
load_config_file = false
version = "~> 1.9"
}
module "my-cluster" {
source = "terraform-aws-modules/eks/aws"
cluster_name = "my-cluster"
cluster_version = "1.18"
subnets = ["subnet-abcde012", "subnet-bcde012a", "subnet-fghi345a"]
vpc_id = "vpc-1234556abcdef"
worker_groups = [
{
instance_type = "m4.large"
asg_max_size = 5
}
]
}
이 모듈을 애초에 Input 값이 56개가 되므로 이 Usage Sample은 정말 다양하게 사용하는 방법 중 하나이다. 또 Bastion Host를 위한 설정도 안되어 있으므로 커스터마이징을 하자
module "eks" {
source = "git::https://github.com/terraform-aws-modules/terraform-aws-eks.git?ref=v12.1.0"
cluster_name = local.cluster_name
vpc_id = module.vpc.aws_vpc_id
subnets = module.vpc.private_subnets
cluster_version = "1.18"
node_groups = {
eks_nodes = {
desired_capacity = 3
max_capacity = 5
min_capacity = 3
key_name = aws_key_pair.seunghyeon-eks.key_name
instance_type = "t3.micro"
source_security_group_ids = [
aws_security_group.seunghyeon-bastion-sg.id
]
}
}
manage_aws_auth = false
}
############ Local Variable ######################
locals {
cluster_name = "seunghyeon-eks-cluster"
region = "ap-northeast-2"
}
source
: 모듈의 위치
cluster_name
: 생성될 클러스터의 이름을 지정
vpc_id
: 클러스터, 노드가 생성될 vpc를 지정
subnets
: 클러스터, 노드가 생성될 서브넷 지정
cluster_version
: 클러스터의 버전(K8S)을 지정
eks_nodes
: 노드그룹의 이름을 지정
desired_capacity
: Autoscaling으로 생성되는 노드의 기본 개수 지정max_capacity
: 노드의 최대 개수 지정min_capacity
: 노드의 최소 개수 지정key_name
: 노드의 키를 지정instance_type
: 노드의 인스턴스 타입을 지정 (인스턴스 타입은 제한되어 있으므로 사용 가능한 타입을 확인해야 한다.)source_security_group_ids
: Bastion Host의 Security Group을 추가한다. (Bastion Host에서 접속을 하기위함)EKS에서 kubectl
명령어를 사용하려면 IAM을 사용하여 K8S 클러스터에 인증을 제공해주는 파일인 aws-iam-authenticator 설치가 되어있어야 한다. AWS 공식 Docs를 참조하여 설치를 하는데 현재 다운로드 링크가 잘못되어 있어서 해당 다운로드 링크로 설치한다.
~/.kube/
에 이동시키면 kubectl
명령을 사용 할 수 있다.