EKS 클러스터 확장
이전 시간에 t2.small 타입의 인스턴스 3개로 구성된 nodegroup 1개를 갖는 EKS 클러스터를 구성하였다. 계속해서 이번 시간엔 기존 클러스터를 확장하는 방법에 대해 알아보고자 한다.
Node 갯수 변경
이전 시간에 생성한 Cluster와 소속 nodegroup의 상태이다. 클러스터가 정상적으로 생성되었으며, nodegroup은 'ng-1' 단 1개로, 3개의 Node가 실행중임을 알 수 있다.
eksctl을 사용하여 기존 nodegroup의 인스턴스 갯수를 늘리고, 새로운 nodegroup을 추가할 수 있다. 아래 명령어를 사용하여 nodegroup 'ng-1'의 node 갯수를 3에서 5로 변경해보자.
$ eksctl scale nodegroup --cluster=eks-tutorial --nodes=5 --name=ng-1
별 문제없이 동작할 것이라 예상했지만 안타깝게도 실패했다. 에러 메시지를 확인하니 현재 nodes-max 값 보다 많이 생성할 수 없다고 한다. 이번엔 nodes-max 값을 5로 변경하는 옵션을 추가하여 다시 실행해보았다.
$ eksctl scale nodegroup --cluster=eks-tutorial --nodes=5 --nodes-max 5 --name=ng-1
'kubectl get nodes' 명령어를 사용하여 Worker node 2개가 실제로 추가되었는지 확인해보았다. 너무 빨리 확인한 탓에 아직 NotReady 상태이지만 5개로 늘어난 것을 알 수 있다.
nodegroup 추가 - On Demand + Spot Instance
이번엔 EKS 클러스터에 새로운 nodegroup 'ng-mixed'를 추가해보자. 기존 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
- name: ng-mixed
minSize: 3
maxSize: 5
instancesDistribution:
maxPrice: 0.2
instanceTypes: ["t2.small", "t3.small"]
onDemandBaseCapacity: 0
onDemandPercentageAboveBaseCapacity: 50
ssh:
publicKeyName: eks-access
'ng-mixed'의 spec을 보니 'ng-1'에서 선언한 내용과는 상당히 다르다. 우선 desiredCapacity 대신 min/max를 지정하여 Node를 최소 3개 이상, 최대 5개 이하로 제한하였다. 그리고 On-Demand Instance만 사용하는 대신, Spot Instance를 5:5 비율로 구성하여 Worker node를 구성하고자 한다. 이 때, Spot Instance는 0.2 USD를 넘지않는 t2.small, t3.small 타입 중에서 선정된다.
이제 위에서 정의한 nodegroup을 추가하기 위해 아래 명령어를 사용한다.
$ eksctl create nodegroup --config-file=eks-tutorial-cluster.yaml --include='ng-mixed'
CloudFormation에 새로운 Stack을 생성해야 하기때문에, 생각보다 긴 시간(~5분)이 소요된다. 이 작업은 최소 3개 이상의 node가 ready 상태일 때, 완료된다.
AWS 콘솔에서 CloudFormation을 확인해보니, 새로운 nodegroup 'ng-mixed'가 생성된 것으로 나온다.
이번엔 EC2 대시보드에서 인스턴스의 상태를 체크해보자.
ng-mixed의 인스턴스 최소 갯수를 3으로 설정하였으므로, 해당 nodegroup에 정확히 3개 node가 추가되었다. k8s의 Worker Node도 ng-1, ng-mixed를 모두 합쳐 총 8개로 구성된 상태이다.
nodegroup 삭제
nodegroup을 어떻게 추가하는지 알았기 때문에, 삭제하는 방법도 배워볼 시간이다. 아래 명령어를 사용하여 'ng-mixed' nodegroup을 제거할 수 있다. 생성에 비해 삭제 작업은 오래 걸리지 않으며 몇초안에 완료된다.
$ eksctl delete nodegroup --config-file=eks-tutorial-cluster.yaml --include='ng-mixed' --approve
'Cloud' 카테고리의 다른 글
Amazon EKS Tutorial - Part.5 (0) | 2021.03.20 |
---|---|
Amazon EKS Tutorial - Part.4 (0) | 2021.03.17 |
Amazon EKS Tutorial - Part.2 (1) | 2021.03.15 |
Amazon EKS Tutorial - Part.1 (0) | 2021.03.13 |
하이퍼바이저(Hypervisor) (0) | 2021.02.06 |