EKS를 위한 eksctl 사용
By Bys on October 21, 2022
eksctl
eksctl은 eks클러스터를 생성, 관리하기 위한 커맨드 툴로 kubernetes가 아닌 eks를 사용하기 위한 툴이다.
Install
1. eksctl create cluster with nodegroup
아래 cluster.yaml 파일을 생성 한 후 eksctl로 create cluster를 생성하면 cloudformation stack이 생성된다. eksctl을 통해 EKS Cluster와 Managed Node Group을 쉽게 생성할 수 있다.
eksctl create cluster -f cluster.yaml
cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: bys-dev-eks-v123
region: ap-northeast-2
version: "1.23"
vpc:
id: "vpc-0ca96cd5c37d3bae8"
subnets:
private:
bys-dev-sbn-az1-app:
id: "subnet-0ea5be4984975e8ed"
bys-dev-sbn-az2-app:
id: "subnet-0b4076508ce121c27"
managedNodeGroups:
- name: ng-1
amiFamily: AmazonLinux2
instanceType: m5.large
volumeSize: 80
minSize: 2
maxSize: 10
desiredCapacity: 2
privateNetworking: true
subnets:
- bys-dev-sbn-az1-app
- bys-dev-sbn-az2-app
ssh:
allow: true
publicKeyName: "bys-console"
tags:
auto-delete: "no"
만약 생성 중 Cluster는 생성되고, Node Group생성시 중간에 실패하면 Node Group에 대한 cloudformation stack을 삭제하고 Node Group만 eksctl로 다시 생성한다.
eksctl create nodegroup --config-file=cluster.yml
이렇게 생성된 노드는 managedNodeGroup으로 aws-auth ConfigMap에 노드의 InstanceRole이 자동으로 등록된다.
(참고) NodeGroup 생성시
- Custom Launch Template -> new Launch Template
- ASG는 new Launch Template을 가지고 생성되며 최초에 Custom Launch Template에 정의한 속성만 수정이 가능하다.
- Custom Launch Template에 AMI가 지정되면 Userdata가 Injection 되지 않는다.
2. eksctl delete nodegroup
아래 커맨드를 통해 nodegroup을 지울 때는 중요한 내용이 있다. ‘eksctl create node’ 커맨드를 통해 nodeGroup 생성하게 되면 별도로 iam spec을 설정하지 않는 이상 nodeGroup의 Instance Role이 하나 생성되게 되고, 해당 instance role이 ‘aws-auth’ copnfigMap 파일에 등록이 되게 된다.
중요한 것은 반대로 지울 때도 ‘aws-auth’ configMap에 해당 instance role을 지운다는 것이다. 만약 같은 instance role을 다른 nodeGroup에서도 사용하는 경우가 있다면 다른 nodeGroup에서는 notReady 상태로 상태가 변경될 수 있다. 이 점을 주의해서 사용해야 한다.
eksctl delete nodegroup
3. eksctl create iamserviceaccount
아래는 eksctl 커맨드를 통해 ServiceAccount와 IAM Role을 관리하는 방법이다.
# Create IAM Role with ServiceAccount
eksctl create iamserviceaccount \
--cluster=bys-dev-eks-main \
--namespace=aws \
--name=awssdk-storage-sa \
--role-name "AwsSdkStorageAppRole" \
--attach-policy-arn=arn:aws:iam::aws:policy/AmazonS3FullAccess \
--override-existing-serviceaccounts \
--approve
- AwsSdkStorageAppRole이름의 IAM Role을 생성한다.
bys-dev-eks-main
EKS Cluster에aws
namespace에awssdk-storage-sa
ServiceAccount를 생성한다.- ServiceAccount와 IAM Role을 맵핑한다. (IRSA / eks.amazonaws.com/role-arn: arn:aws:iam::558846430793:role/AwsSdkStorageAppRole)
# Create ServiceAccount and attach exist role to ServiceAccount, it need to add trust relationship manually.
eksctl create iamserviceaccount \
--cluster=bys-dev-eks-main \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-role-arn=arn:aws:iam::558846430793:role/AmazonEKSLoadBalancerControllerRole \
--override-existing-serviceaccounts \
--approve
bys-dev-eks-main
라는 EKS Cluster에kube-system
namespace에aws-load-balancer-controller
ServiceAccount를 생성한다.- ServiceAccount와 IAM Role을 맵핑한다. (IRSA / eks.amazonaws.com/role-arn: arn:aws:iam::558846430793:role/AwsSdkStorageAppRole)
4. eksctl Add-ons
기본적으로 AWS Console > EKS > Add-ons 메뉴에서 보이는 Add-on 서비스들은 managed Add-ons다. 즉, AWS에서 제공하는 API를 통해 Cluster로 배포된 Add-ons서비스이다. 이렇게 Managed Add-ons를 관리하는 방법은 awscli, eksctl, AWS Console 등 AWS에서 제공하는 API를 이용하는 경우다. 다음은 eksctl을 통해 Add-ons를 Upgrade하는 방법이다. 각각의 version은 AWS공식문서에서 제공하는 Kubernetes와 호환되는 버전을 찾아 입력한다.
- Add-ons확인
eksctl utils describe-addon-versions --kubernetes-version 1.23 | grep AddonName
-
Config파일 생성
update-addon-vpccni.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: bys-dev-eks-main region: ap-northeast-2 addons: - name: vpc-cni version: 1.12.0-eksbuild.1 resolveConflicts: overwrite
update-addon-coredns.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: bys-dev-eks-main region: ap-northeast-2 addons: - name: coredns version: v1.8.4-eksbuild.2 resolveConflicts: overwrite
update-addon-kubeproxy.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: bys-dev-eks-main region: ap-northeast-2 addons: - name: kube-proxy version: v1.21.14-minimal-eksbuild.4 resolveConflicts: overwrite
- 적용
eksctl update addon -f update-addon-vpccni.yaml eksctl update addon -f update-addon-coredns.yaml eksctl update addon -f update-addon-kubeproxy.yaml
Ref: https://eksctl.io/usage/creating-and-managing-clusters/
Ref: https://docs.aws.amazon.com/eks/latest/userguide/delete-managed-node-group.html
kubernetes
eksctl
]