EKS 구축 - eksctl cmd 기반 eks 배포

반영환·2023년 7월 28일
0

eks

목록 보기
3/9
post-thumbnail

EKS 구축 - eksctl 기반 eks 배포

Cluster 구축

Cluster 배포

eksctl create cluster \
--name $ACCOUNT-cluster \
--region $AWSREGION \
--vpc-private-subnets=1232323,232323,2423423232 \
--vpc-public-subnets=<public subnet1 id>,<public subnet2 id>,<public subnet3 id> \
--version 1.24 \
--without-nodegroup \
--with-oidc

Cluster 삭제

eksctl delete cluster --name=$ACCOUNT-cluster

Service 확인

kubectl get svc

kubectl 이 작동하지 않을 때

aws eks update-kubeconfig --region $AWSREGION --name $ACCOUNT-cluster

실행 후 다시 확인

키페어 생성 (워커노드 ssh용)

aws ec2 create-key-pair --key-name $ACCOUNT-key --query 'KeyMaterial' --output text > $ACCOUNT-key.pem

Daemonset 파라미터 수정

kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true

IP 사용 개수 증설

네트워크 인터페이스 (ENI) VPC plugin 수정

kubectl set env ds aws-node -n kube-system WARM_PREFIX_TARGET=1

NodeGroup 배포

eksctl create nodegroup \
  --cluster $ACCOUNT-cluster \
  --region $AWSREGION \
  --name $ACCOUNT-nodegroup \
  --subnet-ids <private-subnet-1 id>,<private-subnet-2 id>,<private-subnet-3 id> \
  --node-private-networking \
  --node-type t3.medium \
  --nodes 2 \
  --nodes-min 2 \
  --nodes-max 5 \
  --node-volume-size 20 \
  --ssh-access \
  --ssh-public-key $ACCOUNT-key

중요!! NodeGroup 을 node-private-networking 옵션을 주고 생성한다는 것은 Private VPC에 EC2를 배포하겠다는 뜻이다. 따라서 NAT 게이트웨이가 필수적으로 연결돼 있어야 노드그룹이 K8S 클러스터에 JOIN이 가능하다.

NodeGroup 삭제

eksctl delete nodegroup --cluster=$ACCOUNT-cluster --name=$ACCOUNT-nodegroup

Node 확인

kubectl get node

kubectl 자동완성 적용

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source /etc/bash_completion
echo alias k=kubectl >> ~/.bashrc
source ~/.bashrc
complete -F __start_kubectl k

APP 배포

Namespace 생성 및 확인

kubectl create ns sampleapp

kubectl get ns

Namespace 삭제

kubectl delete ns sampleapp

Deployment 생성 및 확인

kubectl create deploy sample-dp --image=nginx --replicas=3 -n sampleapp

kubectl get deploy -n sampleapp

kubectl get rs -n sampleapp

kubectl get pod -n sampleapp

Deployment Pod와 연결할 서비스 생성 및 확인

kubectl expose deploy sample-dp --port=8080 --target-port=80 -n sampleapp

kubectl get svc -n sampleapp

Pod 접속 및 테스트

kubectl -n sampleapp exec -it <2번에서 확인한 Any Pod Name> -- /bin/bash

curl <3번에서 확인한 clusterip>:8080

CloudFormation 스택 삭제 안될 때

클러스터를 만들고 작업을 하다가 클러스터를 삭제할 때 Related Recource가 남아서 스택이 삭제가 안되는 경우가 존재해 깔끔하게 클러스터를 삭제할 수 없는 경우가 있다.

이 경우 관련 리소스를 삭제해주거나 아래 명령어로 강제 스택 삭제를 진행한다.

aws cloudformation delete-stack --stack-name <stack-name> --region $AWSREGION --retain-resources <RelatedRecource>
profile
최고의 오늘을 꿈꾸는 개발자

0개의 댓글