AWS

[AWS 실습] EKS cluster와 Node Group 생성 및 삭제

Kishi 2022. 7. 12. 21:35

▪  주제: 쿠버네티스 기반의 EKS 환경 구성과 웹 서비스 구축

1. 쿠버네티스 환경을 구축합니다.

2. 이용하여 EKS 클러스터와 노드그룹을 생성합니다.

3. 구축된 쿠버네티스 환경에 Nginx 서비스를 배포합니다.

 1) EKS cluster 생성

 2) Worker node group 생성

 3) Nginx 서비스 배포

 


 

1. Bastion에 kubectl 설치(리눅스)

1. Bastion을 kubectl 명령어를 수행하는 workspace로 사용 참고 https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html

 

kubectl 설치 - Amazon EKS

Amazon EKS 클러스터 제어 영역과 마이너 버전이 하나 다른 kubectl 버전을 사용해야 합니다. 예를 들어, 1.20 kubectl 클라이언트는 Kubernetes 1.19, 1.20 및 1.21 클러스터로 작업해야 합니다.

docs.aws.amazon.com

 

//1.8버전의 kubectl 다운로드
# curl -o kubectl https://amazon-eks.s3.us-west2.amazonaws.com/1.19.6/2021-01- 05/bin/linux/amd64/kubectl
# chmod +x ./kubectl //실행권한 추가

//PATH가 설정된 디렉터리로 변경
# sudo mv ./kubectl /usr/local/bin/kubectl
# kubectl version --client //설치 확인

 

 

2.  EC2 Role 생성 후 Bastion ec2(=1주차 과제에서 생성한 NAT 인스턴스)에 부여 

역할이름 지어서 역할 생성

인스턴스 보안 -> IAM 역할 수정 

 

2-1 . yum update

# sudo yum update -y

2-2 aws cli version 확인

 

2-3 eksctl 설치

# curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname - s)_amd64.tar.gz" | tar xz -C /tmp // eksctl 설치파일 다운로드
# sudo mv /tmp/eksctl /usr/local/bin // PATH가 설정된 디렉터리로 변경
# eksctl version //설치 확인

 

3. WorkerNode용 Key 생성

aws configure set region ap-northeast-2 //region 설정
cd .ssh //.ssh 폴더로 이동
ssh-keygen //키 생성
모두 enter 누르기

생성된 키 확인

 

4. 생성된 공개키를 사용중인 EC2 리전으로 업로드

aws ec2 import-key-pair --key-name "workernode-key" --public-key-material file://~/.ssh/id_rsa.pub

ec2 > key pairs에 키 업로드 확인

 

5. eksctl 명령어 이용하여 eks cluster와 workerNode 생성

eksctl create cluster --name mission-cluster --version 1.19 --region ap-northeast-2 --nodegroup-name mission-wn --node-type t3.medium --nodes 1 --nodes-min 1 --nodes-max 1 --ssh-access --ssh-public-key workernode-key --managed
// key 생성 실패했다면 기존의 bastion 키 사용
// 10~15분 걸림

 

빨간 밑줄 - 생성 성공 메시지

4. workerNode- cluster 조인 확인 / 생성된 노드 확인

 


2. Nginx 서비스 배포

1. Nginx deployment 배포

  1. Nginx-Deployment 생성(아래의 내용 복사 및 인스턴스에 붙여넣기)

$cat < ~/nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
 name: my-nginx
spec:
 selector:
  matchLabels:
   run: my-nginx
 replicas: 2
 template:
  metadata:
   labels:
    run: my-nginx
  spec:
   containers:
   - name: my-nginx
     image: nginx
     ports:
     - containerPort: 80
EOF

 

2. Nginx deployment 배포 – deployment.yaml

A. label은 쿠버네티스의 리소스(=오브젝트)를 선택하는데 사용됩니다.(=꼬리표) 각 리소스는 label 을 가질 수 있고, label 검색 조건에 따라서 특정 label을 가지고 있는 리소스만을 선택할 수 있습니 다. Label 선택을 통해

①특정 리소스만 배포하거나 업데이트

②label로 선택된 리소스만 Service에 연결

③선택된 리소스에만 네트워크 접근 권한을 부여하는 등의 행위를 할 수 있습니다.

 

Deployment는 Pod를 관리하는 설계서라고 할 수 있습니다. Pod에 app:nginx라는 label을 붙여서 생성하면, 이 deployment는 selector(선택자)에 정의된 대로 label이 app:nginx인 pod만 관리하게 됩니다. (참고 : https://kubernetes.io/ko/docs/concepts/workloads/controllers/deployment/#%EB%94%94%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%A8%BC%ED%8A%B8- %EC%8A%A4%EC%BC%80%EC%9D%BC%EB%A7%81)

 

nginx-deployment.yaml

 

 3. Nginx 파드 배포

kubectl apply –f nginx-deployment.yaml //배포
kubectl get pod //생성된 파드 확인

[ec2-user@ip-10-0-0-180 ~]$ vi nginx-deployment.yaml

이 결과값이 나오지않고 오류가 뜬다면 제대로 안쓴 것이다. 저도 고치는데 20분은 걸렸음..

$ vi nginx-deployment.yaml로 띄어쓰기나 철자를 꼼꼼히 확인해서 수정합니다

 

yaml 문법 검사기 yamlint를 쓰면 어디가 틀렸는지 알 수 있다.

http://www.yamllint.com/

 

4. Nginx service 배포

1. Nginx -Service.yaml 생성 (type : loadbalancer) (아래의 내용 복사 및 인스턴스에 붙여넣기 )

$ cat <<EOF> ~/nginx -service.yaml
apiVersion: v1
kind: Service
metadata:
 name: my-nginx
 labels:
  run: my-nginx
spec:
 ports:
 - port: 80
   protocol: TCP
 selector:
  run: my-nginx
 type: LoadBalancer
EOF

 

 

2. Service 배포

kubectl apply –f nginx-service.yaml //배포
kubectl get service //배포된 서비스 확인 로드밸런서 타입으로 생성했기 때문에 CLB 타입의 ELB 생성됨

 

3. web에서 EXTERNAL-IP:80으로 Nginx 접속 확인

DNS이름(URL) 복사해서 브라우저에서 실행


5. Cluster와 NodeGroup 삭제

실습은 마쳤으니 이제 돈나가는건 삭제하자

1. Nginx-service, Nginx-deployment 삭제

kubectl delete –f nginx-service.yaml //nginx-service 삭제
kubectl delete –f nginx-deployment.yaml //nginx-deployment 삭제

 

2. 콘솔에서 CLB 삭제 확인

    - EC2>로드밸런서>CLB 삭제 확인

3. EKS cluster와 Node Group 삭제

eksctl delete cluster --region ap-northeast-2 --name=mission-cluster

삭제 성공 메시지 확인

콘솔에서 EKS cluster와 Node Group 삭제 확인

- EKS Cluster 삭제 확인

- Nodegroup 삭제 확인(EC2 > Autoscalingroup > autoscaling group 삭제 확인