Cloud

Amazon EKS Tutorial - Part.2

Operation CWAL 2021. 3. 15. 22:52

EKS 클러스터 생성

지난 시간에 이어 eksctl을 사용하여 AWS에 EKS 클러스터를 생성하는 과정에 대해 설명한다.

 

Amazon EKS Tutorial - Part.1

Kubernetes on AWS AWS에서 Kubernetes 클러스터를 구축 및 운영하는 방법은 다양하다. EC2 인스턴스로부터 k8s를 직접 설정하거나 Kops를 통해 구축을 자동화하되 사용자가 직접 운영하는 방식, 그리고 EKS

cwal.tistory.com

우선 우리가 생성하고자 하는 클러스터의 스펙은 다음과 같다.

  • Region: ap-northeast-2 (Seoul)
  • 1 Nodegroup
  • 3 Worker nodes
    • Instance Type: t2.small
  • SSH 접근 허용

eksctl에서 클러스터를 생성할 수 있는 방법은 크게 하나는 명령어와 옵션을 입력하는 명령형(Imperative) 방식과 YAML 파일에 스펙을 정의하고 이를 읽어오는 선언형(Declarative) 방식이다. 전자는 클러스터 구성이 단순한 경우, 사용이 쉬운 반면 복잡한 클러스터에는 부적합하다. 후자는 처음엔 작성이 번거롭지만 한번 익숙해지면 다양한 구성의 클러스터를 정의할 수 있으며 Git으로 관리할 경우, 이력 추적과 복원이 용이하다. 이번 시간엔 선언형 방식으로 진행하며 아래와 같은 YAML 파일(eks-tutorial-cluster.yaml)을 추가한다.

 

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: eks-tutorial
  region: ap-northeast-2

nodeGroups:
  - name: ng-1
    instanceType: t2.small
    desiredCapacity: 3
    ssh:
      publicKeyName: eks-access
  • metadata
    • name: 생성할 EKS 클러스터 이름
    • region: EKS 클러스터가 생성될 region
  • nodeGroups: ASG(Auto Scaling Group)으로 EKS 클러스터 Worker node의 Provisioning과 Lifecycle 관리를 담당한다. 자세한 설명은 링크를 참고하도록 하자.
    • name: Node Group의 이름
    • instanceType: 해당 Node Group에서 사용할 Instance Type을 지정한다.
    • desiredCapacity: 평상시 유지되어야 할 Worker Node의 갯수
    • ssh: EC2 인스턴스 접근시 SSH Key 사용
      • publicKeyName: AWS에 미리 생성해놓은 SSH Key 이름을 입력한다

현재는 VPC, Subnet을 정의하지 않았기 때문에 eksctl이 현재 AWS Region 안에 랜덤하게 생성한다. 물론 기존에 생성해놓은 AWS 리소스를 사용할 수 있으며 이 부분은 나중에 자세하게 다루겠다.

 

이제 다음 명령어를 사용하여 EKS 클러스터를 생성한다. Region마다 다르지만 보통 15~20분 정도 소요되므로 꽤 인내심이 필요한 작업이다.

$ eksctl create cluster -f eks-tutorial-cluster.yaml

클러스터 생성이 완료되면 자동으로 사용자 Home 디렉토리에 kubeconfig 파일(~/.kube/config)이 추가되므로, kubectl 명령어 사용이 가능하다.

$ kubectl get nodes

EKS Cluster Spec에 정의한 것처럼 3개의 Worker node가 배치되었다. 자세한 내용을 확인하기 위해 AWS 콘솔로 접속하였다. EKS 메뉴로 들어갔을 때, 우리가 생성한 클러스터를 확인할 수 있다.

다음은 CloudFormation이다. Config 파일에 선언한 EKS 클러스터와 Node Group이 사실은 CloudFormation의 Stack으로 관리되고 있음을 알 수 있다.

각 Stack을 선택하면 상세정보 및 Event, 리소스 등을 조회할 수 있으며, 특히 Event는 트러블슈팅할 때 유용하므로 참고하도록 하자.

마지막으로 EC2 대시보드에 접근하면 현재 3개 인스턴스가 실행중인 것으로 나온다. 현재 AZ가 모두 'ap-northeast-2c'로 배정되었는데, 이는 Config 파일에 AZ를 따로 지정하지 않았기 때문에 eksctl이 랜덤하게 결정하기 때문이다.

우리가 작업한건 몇줄 안되는 클러스터 설정 파일뿐인데, AWS는 바로 사용 가능한 K8s 클러스터를 자동으로 만들어주었다. 이 과정에서 다음 리소스들이 생성된다.

  • Master Node
    • 각 AZ에 배치된 Master 인스턴스 3개(HA)
    • master용 Security group
    • master용 IAM Role 및 인스턴스 프로필
    • Public Subnet에 배치
  • Worker Node
    • 사용자가 지정한 갯수(desired count)만큼의 Worker 인스턴스
    • Auto Scaling Group 및 launch config(ASG 템플릿)
    • worker용 security group
    • worker용 IAM Role 및 인스턴스 프로필
    • Private Subnet에 배치
  • AWS VPC
    • VPC
    • 서로 다른 AZ에 속한 Subnet(Private+Public)
    • Route table
    • Internet Gateway
    • NAT Gateway

 

Clean up - EKS 클러스터 제거

정말 중요하다. EKS는 생성 시점부터 계속 과금되기 때문에, 필자와 같이 자금사정이 넉넉하지 못하다면 실습 완료 후 반드시 아래 명령어로 클러스터를 제거하자.

$ eksctl delete cluster -f eks-tutorial-cluster.yaml

 

 

'Cloud' 카테고리의 다른 글

Amazon EKS Tutorial - Part.5  (0) 2021.03.20
Amazon EKS Tutorial - Part.4  (0) 2021.03.17
Amazon EKS Tutorial - Part.3  (0) 2021.03.16
Amazon EKS Tutorial - Part.1  (0) 2021.03.13
하이퍼바이저(Hypervisor)  (0) 2021.02.06