-
AWS 환경에서 Kubernetes 구축 따라하기(EKS)IT/Kubernetes 2021. 4. 15. 15:38
1. ec2 bastion host에서 eks 구성
1) kubectl 다운로드
Amazon EKS 클러스터 제어 플레인 버전 1.16 배포를 위해 kubectl 유틸리티 1.16을 다운로드한다. kubectl 버전은 EKS 클러스터 제어플레인 버전과 마이너버전 차이가 위아래로 1개 이내여야 한다.
sudo curl --location -o /usr/local/bin/kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.8/2020-04-16/bin/linux/amd64/kubectl
2) kubectl을 실행파일로 만들기
sudo chmod +x /usr/local/bin/kubectl
3) eksctl 커맨드라인 유틸리티 설치
eksctl은 EKS에서 Kubernetes 클러스터를 생성하고 관리하는 유틸리티이다.
curl --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
4) eksctl 을 /usr/local/bin 으로 이동 및 path 추가, 동작확인
sudo mv -v /tmp/eksctl /usr/local/bin eksctl version
5) AWS region 환경변수 설정
export AWS_REGION=AwsRegion
6) EKS 클러스터 배포
실제 EKS 클러스터(제어플레인) 을 생성한다.
eksctl을 사용하여 EKS 클러스터를 생성하면 기본적으로 EKS 제어플레인 클러스터 및 노드에 사용할 VPC, 퍼블릭서브넷3개, 새 프라이빗 서브넷3개가 생성된다. 기존 VPC 및 서브넷을 사용하도록 수정도 가능하다.
eksctl create cluster 명령은 ~/.kube/config 에 구성파일을 생성한다. kubeconfig 에는 클러스터이름, 인증 방법 등 EKS 클러스터에 대한 세부 정보가 포함되어 있다.
eksctl create cluster \ --name dev-cluster \ --nodegroup-name dev-nodes \ --node-type t3.small \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed \ --version 1.16 \ --region ${AWS_REGION}
클러스터를 생성하는 IAM Role 또는 사용자는 자동으로 Kubernetes RBAC 구성의 system:masters 그룹에 추가되어 Kubernetes 클러스터의 전체 관리자가 된다. 또한 추가 권한이 부여될 때까지 클러스터에 액세스 할 수 있는 유일한 Role 또는 사용자이다. 이경우 배스천호스트가 수임하는 IAM Role은 클러스터를 생성하는 역할이다.
모든 작업이 끝나는데는 15분 또는 그 이상이 소요될 수 있다.
7) CloudFormation 에서 스택 확인
8) EKS 콘솔에서 생성된 클러스터 확인 (Active)
9) Cluster configuration 섹션에서 Compute 탭을 선택하여 클러스터와 연관된 노드그룹의 세부 정보 확인
10) 콘솔의 EC2 에서 Auto Scaling Group 확인
최대값, 최소값 및 원하는 값이 노드그룹에서 지정되어 있는 값과 같다. EKS는 EC2 Auto Scaling Group을 확인하여 컴퓨팅 리소스의 부하가 변경되면 자동으로 노드수를 늘리거나 줄인다. (k8s쪽은 CA 설정 필요)
11) Kubenetes 노드 생성 확인
kubectl get nodes
12) 애플리케이션 배포 및 구성
다음과 같은 애플리케이션을 구성한다.
13) Hithub의 샘플 소스 복제
git clone https://github.com/brentley/ecsdemo-frontend.git git clone https://github.com/brentley/ecsdemo-nodejs.git git clone https://github.com/brentley/ecsdemo-crystal.git
14) ecsdemo-nodejs 배포
cd ~/ecsdemo-nodejs
kubectl apply -f kubernetes/deployment.yaml kubectl apply -f kubernetes/service.yaml
kubectl get deployment ecsdemo-nodejs
15) ecsdemo-crystal 배포
cd ~/ecsdemo-crystal
kubectl apply -f kubernetes/deployment.yaml kubectl apply -f kubernetes/service.yaml
kubectl get deployment ecsdemo-crystal
16) ecsdemo-frontend 배포
cd ~/ecsdemo-frontend
kubectl apply -f kubernetes/deployment.yaml kubectl apply -f kubernetes/service.yaml
kubectl get deployment ecsdemo-frontend
17) deployments 확인
kubectl get deployments
18) elb 정보 확인 및 접속
아래 명령어를 입력하고 로드밸런서의 주소를 복사하여 browser에 입력하면 페이지 확인이 가능하다.
kubectl get service ecsdemo-frontend -o wide
19) 애플리케이션 배포 확장
replica 를 3개로 하여 배포되는 pod의 수를 3개로 늘린다.
kubectl scale deployment ecsdemo-nodejs --replicas=3 kubectl scale deployment ecsdemo-crystal --replicas=3
kubectl get deployments
시간이 지나고 pod가 구동 완료되면 AVAILABLE 이 3으로 바뀐다.
20) ruby frontend 확장
kubectl scale deployment ecsdemo-frontend --replicas=3
kubectl get deployments
브라우저에서 elb 주소를 갱신하면 데이터의 흐름이 확장되는것을 확인할 수 있다.
21) 배포 요소 조정
replica 를 2개로 축소
kubectl scale deployment ecsdemo-nodejs --replicas=2 kubectl scale deployment ecsdemo-crystal --replicas=2 kubectl scale deployment ecsdemo-frontend --replicas=2
kubectl get deployments
browser 에서 elb 주소를 갱신하면 3개중 2개로만 연결되는것을 확인할 수 있다.