구성 환경
사전 준비
: AWS 계정, EC2 접속을 위한 SSH 키 페어, IAM 계정 생성 후 액세스 키 발급
전체 구성도
: VPC 1개(퍼블릭 서브넷 3개, 프라이빗 서브넷 3개), EKS 클러스터(Control Plane), 관리형 노드 그룹(EC2 3대), Add-on
그림에 EKS Control Plane 구성은 별도 표기하지 않았습니다
- CloudFormation 스택 실행 시 파라미터를 기입하면, 해당 정보가 반영되어 배포됩니다.
- 실습 환경을 위한 VPC 1개가 생성되고, 퍼블릭 서브넷 3개와 프라이빗 서브넷 3개(+NATGW)가 생성됩니다.
- CloudFormation 에 EC2의 UserData 부분(Script 실행)으로 Amazon EKS **설치(with OIDC, Endpoint Public)**를 진행합니다.
- 관리형 노드 그룹(워커 노드)는 AZ1~AZ3를 사용하여, 기본 3대로 구성됩니다.
- Add-on 같이 설치됩니다 : 최신 버전 - kube-proxy, coredns, aws vpc cni - 링크
- 다양한 컨트롤러등의 설치에 편리를 위해서 EC2 Instance Profile(IAM Role)에 다양한 Policy를 연동해두었습니다 → 물론 보안상 IRSA 설정을 권장합니다.
배포
CloudFormation 으로 자동 배포 - 서울리전 → 클릭 후 아래 파라미터 입력 후 스택 생성! 스택 이름은 기본 myeks가 입력됩니다!
- 파라미터 입력은 크게 3가지 종류로 구분됩니다
- eks-oneclick-new.yaml 내용:
curl -O <https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/**eks-oneclick-new.yaml**
>
파라미터
: 아래 빨간색 부분은 설정해주는어야 할 것, 그외 부분은 기본값 사용을 권장
- <<<<< Deploy EC2 >>>>>
- KeyName : bastion ec2에 SSH 접속을 위한 SSH 키페어 선택 ← 미리 SSH 키 생성 해두자!
- MyIamUserAccessKeyID : 관리자 수준의 권한을 가진 IAM User의 액세스 키ID 입력
- MyIamUserSecretAccessKey : 관리자 수준의 권한을 가진 IAM User의 시크릿 키ID 입력 ← 노출되지 않게 보안 주의
- SgIngressSshCidr : bastion 작업용 EC2에 SSH 접속 가능한 IP 입력 (집 공인IP/32 입력), 보안그룹 인바운드 규칙에 반영됨
- MyInstanceType: bastion 작업용 EC2 인스턴스의 타입 (기본 t2.micro) ⇒ 변경 가능
- LatestAmiId : bastion 작업용 EC2에 사용할 AMI는 아마존리눅스2 최신 버전 사용
- <<<<< EKS Config >>>>>
- ClusterBaseName : EKS 클러스터 이름이며, myeks 기본값 사용을 권장 → 이유: 실습 리소스 태그명과 실습 커멘드에서 사용
- KubernetesVersion : EKS 호환, 쿠버네티스 버전 (기본 v1.25, 실습은 1.24 버전 사용) ⇒ 변경 가능
- WorkerNodeInstanceType: 관리형 노드 그릅 - 워커 노드 EC2 인스턴스의 타입 (기본 t3.medium) ⇒ 변경 가능
- WorkerNodeCount : 관리형 노드 그릅 - 워커노드의 갯수를 입력 (기본 3대) ⇒ 변경 가능
- WorkerNodeVolumesize : 관리형 노드 그릅 - 워커노드의 EBS 볼륨 크기 (기본 80GiB) ⇒ 변경 가능
- <<<<< Region AZ >>>>> : 리전과 가용영역을 지정, 기본값 그대로 사용
- Tip.
CloudFormation 스택 배포 한줄 실행!
← 실행하는 PC에 aws cli 설치되어 있고, aws configure 자격증명 설정 상태.
EC2 생성 수량 부족 실패 발생 시
: 해당 사용자 계정의 해당 리전에 EC2 최대 갯수 제한 일 경우, Service Quotas (EC2) 증설 요청으로 해결 가능 - 링크 EC2 요청
- Limit Type(EC2 Instances) ⇒ 서울 리전, All Standard (A, C, D, H, I, M, R, T, Z) Instances, New limit value(40 정도)
배포 확인
- 작업용 EC2 에 SSH 접속 (SSH 키 파일 사용) : 쿠버네티스 정상 설치 확인 ← 스택 생성 시작 후 20분 후 접속 할 것
- Add-on 정보확인 : 최신 버전 - kube-proxy, coredns, aws vpc cni - 링크 mgmt
- Tip. 자리 이동으로 인해 작업용EC2에 접속하는 공인IP가 변경 시 보안 그룹에 추가하는 방법
(실습 완료 후) 자원 삭제
삭제 방안 : 삭제 명령 실행 후 완료까지 SSH 세션 유지 필요 ← 삭제 까지 10분 정도 소요
**eksctl delete cluster --name $CLUSTER_NAME && aws cloudformation delete-stack --stack-name $CLUSTER_NAME**