이 래퍼 스크립트는 워크플로우 실행을 돕기 위해 몇 가지 기본 변수만 사용하지만, 내부적으로는 두 개의 Terraform 프로젝트가 사용됩니다. 하나는 필요한 인프라 구성을 담당하고, 다른 하나는 EKS-D 배포를 담당합니다. 이 두 Terraform 프로젝트는 다양한 사용 사례와 구성 방식을 지원하기 위해 수많은 변수를 제공합니다.
전체 변수 목록은 두 프로젝트의 변수 파일, 즉 infra와 eksd 프로젝트의 변수 파일에서 확인할 수 있습니다. 우선 여기서는 그중 몇 가지 주요 변수를 살펴보겠습니다.
- infra-terraform의 expose_k8s_api_publicly API
Server의 NLB를 외부에 공개할지 여부를 제어합니다. 기본값은 true입니다.
- infra-terraform의 vpc_cidr
VPC의 CIDR을 제어합니다. 기본값은 192.168.0.0/16입니다.
- eksd-terraform의 masters_count
초기 Control Plane 노드 수를 제어합니다. 기본값은 1이며, 고가용성 Control Plane 구성을 위해서는 3으로 설정합니다.
- eksd-terraform의 workers_addition
초기 Data Plane 노드 외에 추가로 생성할 Data Plane 노드 수를 제어합니다. 이는 ASG의 최대 크기(max-size) 인자로 사용되며, 기본값은 3입니다.
- eksd-terraform의 ebs_csi_volume_type
EBS CSI에서 사용할 VolumeType을 지정합니다. 기본값은 gp2입니다.
- eksd-terraform의 workers_instance_type
Data Plane 인스턴스 타입을 지정합니다. 기본값은 z8.large입니다.
변수의 기본값을 변경하려면 해당 프로젝트의 variables.tf 파일 안에서 값을 변경하거나, 실행 전에 Terraform 기반 환경 변수로 값을 설정해야 합니다.
예를 들면 다음과 같습니다.
- $ TF_VAR_masters_count=3 ./apply-all.sh
환경 변수를 사용하는 방식은 파일을 직접 수정하지 않고도 배포에 영향을 줄 수 있는 간단한 방법입니다. 다만 변경한 값을 프로젝트 내부에 영구적으로 반영하지 않은 상태에서, 나중에 해당 환경 변수 없이 배포를 다시 실행하면 원래 값으로 덮어써질 수 있습니다. 이 경우 배포에 부정적인 영향을 줄 수 있으므로, 일반적으로는 변수 파일을 직접 수정하는 방식이 권장됩니다. 사용자 정의 변수의 또 다른 활용 사례는 eksd-terraform 변수들을 통해 배포 시 선택적 Add-on 설치 여부를 제어하는 것입니다.
AWS EBS CSI Driver 설치 여부를 제어합니다. 기본값은 true입니다.
AWS Load Balancer Controller 설치 여부를 제어합니다. 기본값은 true입니다.
Cluster Autoscaler 설치 여부를 제어합니다. 기본값은 true입니다.
- install_kasten_k10 Kasten
K10 설치 여부를 제어합니다. 기본값은 false입니다.
선택적 Add-on과 달리, EKS-D 배포 과정에서는 몇 가지 필수 Add-on도 암묵적으로 설치됩니다. 예를 들어 Kubernetes용 AWS Cloud Provider 역할을 하는 CCM(Cloud Controller Manager), 그리고 EKS-D에 포함된 필수 구성 요소인 CoreDNS와 kube-proxy가 이에 해당합니다.
일부 Add-on은 EKS-D 이미지를 수정하여 제어할 수 있습니다. 이 부분은 뒤에서 더 자세히 다룹니다. 하지만 일부 구성 요소는 cloud-init 스크립트에 대한 더 깊은 수준의 변경이 필요할 수 있습니다.
마지막으로, 선택 사항은 아니지만 Terraform을 통해 관리할 수 있는 Add-on이 하나 더 있습니다. 바로 CNI(Container Network Interface)입니다. CNI는 Kubernetes의 전체 네트워킹 스택을 담당하는 핵심 구성 요소이므로, CNI 없이는 클러스터가 초기화되지 않습니다.
다만 cni_provider 변수를 사용하면 아래 지원 목록 중에서 EKS-D 클러스터에 사용할 CNI 구현체를 선택할 수 있습니다.
기본 CNI입니다. 빠르고 단순하며 안정적인 Layer 3 구현체입니다.
라우팅 및 보안 기능을 추가로 제공하는 고급 멀티레이어 CNI입니다. cilium 실험적으로 지원되는 CNI입니다. eBPF 기반의 고급 멀티레이어 CNI로, 향상된 라우팅, 보안, 관측성 기능을 제공합니다.
Cilium의 경우, Zadara는 테스트 절차상 필수 네트워킹 기능만 검증하기 때문에 실험적 지원으로 간주됩니다. 다만 배포 시 Hubble UI 관측성 기능도 함께 활성화되며, cilium CLI에서 해당 네임스페이스를 참조해 접근할 수 있습니다.
- $ cilium hubble ui –namespace cilium-system
이 명령을 실행하면 hubble-ui 서비스가 로컬호스트로 포트 포워딩됩니다. 이를 통해 클러스터의 네트워크 트래픽 흐름을 모니터링할 수 있습니다.