https://aws.amazon.com/ko/eks/
ECR 이란?
Amazon Elastic Container Registry(ECR) 은 Docker 컨테이너 레지스토리
서비스 입니다. 도커 컨테이너의 이미지를 저장하는 서비스로 기능은
Docker hub 의 repository 와 거의 비슷합니다. ECR 컨테이너의 이미지는
S3 에 저장되고 AWS 에 매니지되어 구축과 관리가 편한 것이 장점입니다.
또한 다른 AWS 서비스와 호환성도 높습니다.
EKS 이란?
Amazon Elastic Kubernetes Service (EKS) 는 쿠버네티스 운용에 필요한 제어 영역과, 작업자 노드 설치 및 운영 할 필요 없이 AWS 에서 쿠버네티스를 손쉽게 이용하게 도와줍니다.
AWS 에는 컨테이너 오케스트레이션 서비스로 ECS / EKS 가 있습니다.
ECS 는 AWS-ONLY 서비스로 좀 더 간단한 기능을 할 수 있는 반면에
EKS 는 어떤 환경에도 작동할 수 있으며 많은 컨테이너 사용시 효율적으로 자원을 관리 할 수 있습니다.
따라서 이번 챕터에서는
AWS Repository 서비스인 ECR + Management 서비스인 EKS + EC2 호스팅으로 기본 Deployment 를 해 보겠습니다.
1. 기본 설정하기
EKS 를 위한 EC2 를 생성 해 보겠습니다. 아마존 리눅스 AMI, 이름은 k8s 로 설정 해 주었습니다.
이후 앞선 챕터를 참고하여 EC2 네트워크 설정, 보안그룹, 키 설정을 해 줍니다. 저는 기본으로 해 두었습니다.
CLI 를 바로 실행시키기 위해 유저데이터에 관련 명령어를 설치 해 빠르고 편하게 EC2 생성을 해 봅니다.
마지막 문장에는 도커를 실행시키기위해 본인의 도커 아이디의 주소를 입력 해 줍니다.
#!/bin/bash
timedatectl set-timezone Asia/Seoul
cd /tmp
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
./aws/install
amazon-linux-extras install docker -y
systemctl enable --now docker
curl https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
usermod -a -G docker ec2-user
docker run -d -p 80:80 --name=test-site dockerid/web-site:v2.0
Mobaxerm 에 EC2 생성 후 받은 퍼블릭 IP 를 입력하고 접속 해 줍니다.
aws 에 접속이 안되있으니 aws configure 명령어로 크리덴셜 정보를 넣어줍니다.
쿠버네티스를 위한 iam 을 다시 생성 해 보도록 하겠습니다.
k8s-user 란 이름으로 액세스키와 패스워드 둘다 선택 해 줍니다.
그리고 전체 어드민 권한 을 주고 생성한 뒤 액세스 키 파일을 다운 받아 입력 해 보겠습니다.
액세스 키 정보와 지역, 아웃풋 포멧을 입력하면 다음과 같이 aws 에 접속 가능합니다.
2. ECR 생성하기
ECR 생성을 위해 Get Started 버튼을 눌러 줍니다.
퍼블릭 권한을 주고 리포지토리 이름을 설정 해 줍니다.
바로 생성 된 리포지토리를 눌러 상단의 View push commands 를 눌러 줍니다.
첫번째 명령어를 ec2 ssh 명령어에 복사 붙여 넣어 주겠습니다.
docker images 명령어로 생성된 이미지를 확인 할 수 있습니다.
# sudo usermod -aG docker $USER
실행 조정 권한에 문제가 생겨 permission denied 가 떠서 위 명령어로 권한을 부여 해 주고 진행 해 주었습니다.
리포지토리 URI 주소를 계속 이용해서 추가 명령어를 진행 해 보겠습니다.
docker tag dockerid/web-site:v2.0 public.ecr.aws/r9e3h1s1/web-site:tagname
마지막 원하는 태그이름을 주고 도커 기본 주소와 ECR 주소를 입력해서 설정 해 보고 이미지를 다시 확인 해 보겠습니다.
docker push public.ecr.aws/r9e3h1s1/web-site:cloudbim
도커 태그 된 주소로 도커 푸쉬 명령어를 진행 합니다.
Docker push 이후로 ECR 리포지로티 안에 이미지태그와 함께 이미지가 생성된 것을 확인 할 수 있습니다.
세부사항으로 가면 도커 이미지 배포를 위한 주소를 확인할 수 있습니다.
3. EKS 생성하기
EKS 생성에 앞서 다른 브라우저 창을 열어 앞서 생성한 k8s 계정으로 접속 해 보겠습니다.
Account ID 12 자리는 기본 루트 계정의 우측 상단에 나와있는 숫자 12자리 입니다.
* root 계정으로 eks 를 생성 할 경우 크리덴셜 문제로 진행하기 어렵게 됩니다.
iam 계정으로 접속시 간혹 region 이 랜덤하게 변경되는 경우가 있어 잘 확인 해 줍니다.
EKS 로 가서 클러스터를 추가 해 줍니다/ 새로 생성하기로 클릭 해 줍니다.
EKS 클러스터 이름과 버전을 선택 해 줍니다.
클러스터 롤을 지정해야하는데 없다면 IAM role 생성하기로 가 줍니다.
AWS service 옵션의 EKS- Cluster 를 선택 해 줍니다.
해당하는 Policy name 은 다음과 같으며 역할에 대한 이름도 지정 해 줍니다.
그리고 EKS 클러스터 화면으로 가서 새로고침을 하면 역할을 지정할 수 있고 다음단계로 넘어갑니다.
step 2 단계에서는 네트워킹 설정인데 ec2 와 같은 vpc 를 설정해 주었으며 서브넷은 PublicA/C 두가지만 선택 하였습니다.
보안그룹도 마찬가지로 동일하게 설정해주고 나머지는 기본값으로 두었습니다.
로깅 설정은 추후 클라우드 워치에서 확인 할 수 있는 부분인데 일단 다 체크 해 두었습니다.
생성한 지 10분만에 상태가 active 로 변경되었습니다. 따라서 eks 노드그룹 생성이 가능 해 졌습니다.
Compute 로 가서 노드그룹을 새로 생성 해 보겠습니다.
노드 그룹 이름과 노드 그룹 역할을 지정 해 줍니다. 노드그룹 역할이 없다면 새로 생성 해 보도록 합니다.
이번 역할에서는 aws service - ec2 로 설정 해주고 다음과 같은 3가지 policy 를 직접 선택해서 역할을 지정 해 주었습니다.
AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy
다음과 같이 Compute 사양을 조정 해 줍니다.
생성 할 노드그룹에 노드들이 5개를 가지도록 설정 해 두고
필요 시10개까지 늘어날 수 있도록 최대사이즈를 지정 해 주었습니다.
기본으로 설정되있는 서브넷 선택에 이어 노드 SSH 접근을 허용해주고 키를 선택 해 줍니다.
모든 IP 주소에서 접근이 가능하도록 ALL 을 선택 합니다.
약 3분 뒤에 생성된 노드그룹의 상태가 active 로 변경 되었습니다.
$ aws eks --region ap-northeast-2 update-kubeconfig --name EKS-CLUSTER
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ kubectl version --short --client
$ kubectl get svc
$ kubectl get nodes
다음 EKS cli 명령어로 권한 설정과 자동완성 설정을 해 봅니다.
첫번째 줄 명령어 이름에서는 본인이 설정한 EKS 클러스터의 이름으로 변경 해 줍니다.
eks 설치는 운영체제와 버전에 따라 달리 진행 해 줍니다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
모든 작업 이후에 다음과 같이 kubectl 서비스와 5개 노드들에 정보를 확인 할 수 있습니다.
ec2 대시보드에 가면 마스터 노드인 k8s 외에도
새롭게 추가된 5개의 워커노드가 생성되어 작동되는 모습을 확인 할 수 있습니다.
노드그룹에 있는 노드들 중 하나를 클릭하면 실시간으로 할당된 용량을 확인 할 수 있습니다.
4개의 pods 중 2개가 사용되고 있는데 파드를 추가 해 보겠습니다.
kubectl run nginx-pod1 --image=nginx
kubectl run nginx-pod2 --image=nginx
kubectl run nginx-pod3 --image=nginx
kubectl get po -o wide
각각 pod1,2,3 의 이름으로 nginx 이미지와 함께 추가를 해 줍니다.
생성된 파드들은 하나씩 각각 다른 노드들에 할당이 된것을 노드 ip 주소를 보면 확인 할 수 있습니다.
다시 같은 노드 상태화면을 가면 기존2개에서 1개가 추가되어 3개가 할당 됨을 확인합니다.
* 삭제 시 노드그룹을 먼저 삭제 한 후, EKS 클러스터를 삭제 할 수 있습니다.
'AWS - KOR' 카테고리의 다른 글
# 020) AWS EC2 ( + Tomcat 서버 ) CI/CD 기초 (0) | 2022.07.31 |
---|---|
# 019 ) AWS EC2 ( + Jenkins 서버/ Maven ) CICD 기초 (0) | 2022.07.30 |
#017 ) 가상머신으로 쿠버네티스 (Kubernetes) 설치 (0) | 2022.07.29 |
#016 ) AWS ACM SSL/TLS 와 ALB 생성하기 (0) | 2022.07.28 |
#015 ) AWS Cloudfront 생성 및 S3 연결 (0) | 2022.07.25 |