본문 바로가기
EKS Study

1주차 - Amzaon EKS 설치 및 기본 사용

by 줄스토리 2024. 3. 3.

#스터디 시작

이전에 프라이빗 클라우드를 운영하면서 쿠버네티스를 접한 적이 있지만 AWS의 EKS를 제대로 공부하는것은 이번이 처음입니다. 이번 스터디로 인해 eks 뿐만 아니라 aws의 각 기능들도 배우면서 aws 관련 지식을 쌓을 수 있으면 좋겠습니다.

 

#사전준비

  • AWS Free Tier 계정 생성 - 링크
    • IAM User 생성 : IAM 정책(AdministratorAccess) 부여

 

#EKS

 

 

Amazon Elastic Kubernetes Service (Amazon EKS) 는 Amazon Web Services( AWS ) 클라우드에서 Kubernetes 클러스터를 실행할 수 있게 해주는 관리형 Kubernetes 서비스입니다 . 자체 Kubernetes 제어 플레인을 수동으로 설치, 운영 및 유지 관리할 필요가 없으므로 애플리케이션 배포 및 관리에 집중할 수 있습니다.

 

EKS 의 주요 기능과 이점은 다음과 같습니다 .

 

특징:

  • 관리형 제어 플레인: AWS는 API 서버, etcd 및 스케줄러를 포함하는 Kubernetes 제어 플레인을 관리합니다. 이렇게 하면 이러한 구성 요소를 직접 프로비저닝하고 관리할 필요가 없습니다.
  • 고가용성 및 확장성: EKS는 애플리케이션 요구 사항에 맞게 자동으로 확장 및 축소할 수 있는 가용성과 확장성이 뛰어난 제어 평면을 제공합니다.
  • 보안: EKS는 AWS IAM 및 기타 보안 서비스와 통합되어 Kubernetes 클러스터에 안전한 환경을 제공합니다.
  • 다른 AWS 서비스와 통합: EKS는 Amazon VPC, Amazon Storage Gateway, Amazon CloudWatch 등의 다른 AWS 서비스와 통합되어 클라우드에서 컨테이너화된 애플리케이션을 쉽게 구축하고 관리할 수 있습니다.
  • 여러 Kubernetes 버전: EKS는 여러 Kubernetes 버전을 지원하므로 필요에 가장 적합한 버전을 선택할 수 있습니다.
  • 추가 기능: EKS는 Kubernetes 클러스터의 기능을 확장하는 데 사용할 수 있는 Amazon VPC CNI 및 Fluent Bit와 같은 다양한 추가 기능을 제공합니다.

이점:

  • 복잡성 감소: EKS는 Kubernetes 클러스터 배포 및 관리 프로세스를 단순화하여 사용자가 애플리케이션에 집중할 수 있도록 합니다.
  • 출시 시간 단축: EKS를 사용하면 컨테이너화된 애플리케이션을 클라우드에 쉽고 빠르게 배포할 수 있습니다.
  • 비용 효율성: EKS는 클라우드에서 Kubernetes 클러스터를 실행하는 비용 효율적인 방법입니다. 사용한 리소스에 대해서만 비용을 지불하면 됩니다.
  • 확장성 및 유연성: EKS는 컨테이너화된 애플리케이션을 실행하기 위한 확장성이 뛰어나고 유연한 플랫폼을 제공합니다.

사례:

  • 마이크로서비스 배포: EKS는 마이크로서비스 기반 애플리케이션 배포에 매우 적합합니다.
  • 일괄 작업 실행: EKS를 사용하여 기계 학습 훈련 작업과 같은 일괄 작업을 실행할 수 있습니다.
  • 레거시 애플리케이션 현대화: EKS를 사용하면 레거시 애플리케이션을 컨테이너화하고 Kubernetes에서 실행하여 현대화할 수 있습니다.

Amazon EKS는 AWS 클라우드 인프라 내에서 Kubernetes 클러스터를 오케스트레이션하기 위한 강력하고 사용자 친화적인 솔루션으로 두각을 나타냅니다. 이는 제어 플레인 관리와 관련된 복잡성 없이 Kubernetes의 기능을 활용하려는 개발자와 기업을 위한 최적의 선택입니다.

Amazon Web Services(AWS)에서 관리형 서비스로 제공되는 Amazon Elastic Kubernetes Service(EKS)는 AWS와 온프레미스 환경 모두에서 Kubernetes 배포를 간소화합니다. 오픈 소스 플랫폼인 Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다. EKS는 Kubernetes 클러스터 설정 및 유지 관리와 관련된 운영 측면을 단순화하고 Kubernetes 제어 플레인 또는 개별 노드 설치 및 운영의 복잡성을 추상화합니다. 또한 여러 AWS 가용 영역에 걸쳐 확장 가능하고 내결함성을 갖춘 제어 플레인을 사용자에게 제공하여 애플리케이션의 고가용성과 안정성을 보장합니다.

 

Amazon EKS의 주요 기능:

  1. 관리형 Kubernetes 제어 플레인: EKS는 패치 적용, 노드 프로비저닝, 업데이트 등의 작업을 처리하면서 Kubernetes 제어 플레인(마스터 노드)을 관리합니다.
  2. AWS 서비스와의 통합: AWS 서비스와 통합되어 로드 분산을 위한 Elastic Load Balancing, 인증을 위한 IAM, 격리를 위한 Amazon VPC, 로깅 및 모니터링을 위한 Amazon CloudWatch를 포함하여 애플리케이션에 확장성과 보안을 제공합니다.
  3. 고가용성: EKS는 비정상 제어 플레인 노드를 자동으로 감지 및 교체하고 주문형 업그레이드 및 패치를 제공합니다.
  4. 확장성: ASG(Auto Scaling 그룹)를 사용하여 Kubernetes 작업자 노드를 쉽게 확장할 수 있습니다.
  5. 보안: EKS는 AWS Identity and Access Management(IAM)와 통합되어 Kubernetes 클러스터 및 노드에 세분화된 액세스 권한을 할당할 수 있습니다. 또한 격리를 위한 VPC 네트워킹을 지원하고 보안 그룹을 활용하여 노드에 대한 액세스를 제어합니다.
  6. 유연성: 서버를 프로비저닝하고 관리할 필요가 없는 컨테이너용 서버리스 컴퓨팅 엔진인 AWS Fargate를 사용하여 EKS를 실행할 수 있습니다. Fargate의 EKS를 사용하면 기본 인프라를 관리할 필요 없이 Kubernetes 기반 애플리케이션을 간단하게 실행할 수 있습니다.
  7. 하이브리드 클라우드 기능: EKS Anywhere를 사용하면 자체 가상 머신(VM) 또는 베어메탈 서버를 포함하여 온프레미스에서 Kubernetes 클러스터를 생성 및 운영하여 AWS 및 온프레미스 환경 전반에 걸쳐 일관되고 확장된 Kubernetes 경험을 제공할 수 있습니다.
  8. 호환성: EKS는 업스트림 Kubernetes를 실행하고 인증된 Kubernetes 준수를 통해 기존 Kubernetes 워크로드 및 도구와의 호환성을 보장합니다.

 

EKS는 Kubernetes 클러스터를 직접 관리하는 운영 오버헤드 없이 Kubernetes를 활용하려는 개발자와 시스템 관리자를 위해 설계되었습니다. 마이크로서비스부터 일괄 처리까지 다양한 애플리케이션에 적합하며 컨테이너화된 애플리케이션을 위한 강력하고 안전하며 확장 가능한 플랫폼을 제공합니다.

 

#EKS 실습

 

1. 웹콘솔에서 eks 구축을 위한 인프라 생성

기본 인프라 배포 - 링크 ← AWS CloudFormation 페이지로 연결되며, 파라미터 입력 후 스택 실행

-> s3에 저장된 yaml파일을 통해 웹콘솔에서 eks 구축 가능

cf)스택 템플릿 수정 시 , 고려사항

https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-get-template.html

->Region, VPC Subnet 등 필요한 파라미터값을 입력

 

  • AvailabilityZone1 및 AvailabilityZone2: AWS는 데이터 센터를 한 지역 내에서 AZ(가용성 영역)라고 하는 여러 개의 격리된 위치로 나눕니다. 이는 "us-west-1a" 및 "us-west-1b"와 같은 고유한 이름으로 식별됩니다.
  • KeyName: EC2 인스턴스에 안전하게 액세스하는 데 사용되는 SSH 키 쌍의 이름을 나타냅니다.
  • LatestAmiId: EC2 인스턴스 시작에 사용할 수 있는 최신 Amazon 머신 이미지(AMI)의 ID입니다.
  • MyInstanceType: 배포를 위해 선택한 EC2 인스턴스의 유형 또는 크기(예: t2.micro 또는 m5.large)입니다.
  • PrivateSubnet1Block 및 PrivateSubnet2Block: VPC 내의 프라이빗 서브넷에 할당된 CIDR 블록(IP 주소 범위)으로, 인터넷에서 직접 액세스할 수 없는 리소스를 배포하는 데 사용됩니다.
  • PublicSubnet1Block 및 PublicSubnet2Block: 인터넷 액세스가 필요한 리소스를 배포하는 데 사용되는 VPC 내의 퍼블릭 서브넷에 할당된 CIDR 블록입니다.
  • SgIngressSshCidr: 보안 그룹(SG)에 대한 SSH 액세스에 허용되는 IP 주소 범위를 지정하는 CIDR 블록입니다.
  • TargetRegion: 리소스를 배포하거나 복제해야 하는 AWS 지역입니다.
  • VpcBlock: Virtual Private Cloud(VPC)에 할당된 CIDR 블록으로, VPC 내에서 사용할 수 있는 IP 주소 범위를 정의합니다.

 

배포 파라미터 설정

더보기
# yaml 파일 다운로드
curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-1week.yaml

# 배포
# aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml --stack-name mykops --parameter-overrides KeyName=<My SSH Keyname> SgIngressSshCidr=<My Home Public IP Address>/32 --region <리전>
예시) aws cloudformation deploy --template-file ~/Downloads/myeks-1week.yaml \
     --stack-name myeks --parameter-overrides KeyName=kp-gasida SgIngressSshCidr=$(curl -s ipinfo.io/ip)/32 --region ap-northeast-2

# CloudFormation 스택 배포 완료 후 EC2 IP 출력
aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[*].OutputValue' --output text
예시) 3.35.137.31

# ec2 에 SSH 접속 : 계정 / 비번
예시) ssh root@3.35.137.31
ssh root@$(aws cloudformation describe-stacks --stack-name myeks --query 'Stacks[*].Outputs[0].OutputValue' --output text)
root@@X.Y.Z.A's password: qwe123# yaml 파일 다운로드 curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-1week.yaml

 

 

2. EKSCTL 이 설치된 인스턴스를 통한 EKS 생성

더보기
더보기
# 변수 확인
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2

# 옵션 [터미널1] EC2 생성 모니터링
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table

# eks 클러스터 & 관리형노드그룹 배포 전 정보 확인
eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.28 --ssh-access --external-dns-access --dry-run | yh
...
vpc:
  autoAllocateIPv6: false
  cidr: 192.168.0.0/16
  clusterEndpoints:
    privateAccess: false
    publicAccess: true
  id: vpc-0505d154771a3dfdf
  manageSharedNodeSecurityGroupRules: true
  nat:
    gateway: Disable
  subnets:
    public:
      ap-northeast-2a:
        az: ap-northeast-2a
        cidr: 192.168.1.0/24
        id: subnet-0d98bee5a7c0dfcc6
      ap-northeast-2c:
        az: ap-northeast-2c
        cidr: 192.168.2.0/24
        id: subnet-09dc49de8d899aeb7

# eks 클러스터 & 관리형노드그룹 배포: 총 15분 소요
eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.28 --ssh-access --external-dns-access --verbose 4
...
023-04-23 01:32:22 [▶]  setting current-context to admin@myeks.ap-northeast-2.eksctl.io
2023-04-23 01:32:22 [✔]  saved kubeconfig as "/root/.kube/config"

 

EKSCTL  변수 설정

# 자격 구성 설정 없이 확인
aws ec2 describe-instances

# IAM User 자격 구성 : 실습 편리를 위해 administrator 권한을 가진 IAM User 의 자격 증명 입력
aws configure
AWS Access Key ID [None]: AKIA5...
AWS Secret Access Key [None]: CVNa2...
Default region name [None]: ap-northeast-2
Default output format [None]: json

# 자격 구성 적용 확인 : 노드 IP 확인
aws ec2 describe-instances

# EKS 배포할 VPC 정보 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq Vpcs[]
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq Vpcs[].VpcId
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId
export VPCID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId)
echo "export VPCID=$VPCID" >> /etc/profile
echo $VPCID

# EKS 배포할 VPC에 속한 Subnet 정보 확인
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output json | jq
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output yaml

## 퍼블릭 서브넷 ID 확인
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" | jq
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text
export PubSubnet1=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text)
export PubSubnet2=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text)
echo "export PubSubnet1=$PubSubnet1" >> /etc/profile
echo "export PubSubnet2=$PubSubnet2" >> /etc/profile
echo $PubSubnet1
echo $PubSubnet2

cf)Amazon EKS VPC 및 서브넷 요구 사항과 고려 사항

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/network_reqs.html

 

EKS 생성

# 변수 확인
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2

# 옵션 [터미널1] EC2 생성 모니터링
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 1; done
aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivateIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output table

# eks 클러스터 & 관리형노드그룹 배포 전 정보 확인
eksctl create cluster --name $CLUSTER_NAME --region=$AWS_DEFAULT_REGION --nodegroup-name=$CLUSTER_NAME-nodegroup --node-type=t3.medium \
--node-volume-size=30 --vpc-public-subnets "$PubSubnet1,$PubSubnet2" --version 1.28 --ssh-access --external-dns-access --dry-run | yh
...
  • --name $CLUSTER_NAME: 생성할 EKS 클러스터의 이름을 지정합니다. $CLUSTER_NAME은 환경 변수로 설정된 클러스터의 이름을 사용합니다.
  • --region=$AWS_DEFAULT_REGION: 클러스터를 생성할 AWS 리전을 지정합니다. $AWS_DEFAULT_REGION은 환경 변수로 설정된 AWS 리전을 사용합니다.
  • --nodegroup-name=$CLUSTER_NAME-nodegroup: 노드 그룹의 이름을 지정합니다. 이것은 생성될 노드 그룹의 이름을 나타냅니다.
  • --node-type=t3.medium: 생성될 EC2 노드의 인스턴스 유형을 지정합니다. 여기서는 t3.medium으로 지정되어 있습니다.
  • --node-volume-size=30: 각 EC2 노드에 연결될 볼륨의 크기를 지정합니다. 여기서는 30GB로 지정되어 있습니다.
  • --vpc-public-subnets "$PubSubnet1,$PubSubnet2": 클러스터에서 사용할 VPC의 공용 서브넷을 지정합니다. $PubSubnet1 및 $PubSubnet2는 환경 변수로 설정된 서브넷의 ID입니다.
  • --version 1.28: 생성할 EKS 클러스터의 Kubernetes 버전을 지정합니다.
  • --ssh-access: SSH 액세스를 허용하는 옵션입니다. 이 옵션을 사용하면 EC2 인스턴스에 SSH로 접속할 수 있습니다.
  • --external-dns-access: 외부 DNS 액세스를 허용하는 옵션입니다.
  • --dry-run: 실제로 명령을 실행하지 않고, 실행할 때 어떤 작업이 수행되는지 미리 확인하는 옵션입니다.

 

*노드 정보 확인

더보기
노드프로세스 정보확인
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i sudo systemctl status kubelet; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i sudo pstree; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i ps afxuwww; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i ps axf |grep /usr/bin/containerd; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i ls /etc/kubernetes/manifests/; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i ls /etc/kubernetes/kubelet/; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i cat /etc/kubernetes/kubelet/kubelet-config.json; echo; done

 

 

노드 네트워크 정보확인

# AWS VPC CNI 사용 확인
kubectl -n kube-system get ds aws-node
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

# 파드 IP 확인
kubectl get pod -n kube-system -o wide
kubectl get pod -n kube-system -l k8s-app=kube-dns -owide

# 노드 정보 확인
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i hostname; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i sudo ip -c addr; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i sudo ip -c route; echo; done
for i in $N1 $N2; do echo ">> node $i <<"; ssh ec2-user@$i sudo iptables -t nat -S; echo; done

TIP) kubectl node 명령어

 

  • Node 정보 확인

  • Node 상세 정보 확인

  • Node 성능 사용량 확인

 

- eks cluster endpoint를 조회하여 curl 명령어로 확인

 

=> curl 은 서버와 통신할 수 있는 커맨드 명령어 툴입니다. curl의 특징은 수많은 프로토콜을 지원하며 아래와 같은 옵션이 있습니다.

short long 설명
-k --insecure https URL 접속 시 SSL 인증서 검사 없이 연결
-i --head HTTP 응답 헤더를 표시
-d --data POST 요청이나 JSON 방식과 같이 request body에 데이터를 담을 때 사용
-o --output -o [파일명] 을 사용하면 출력 결과를 파일로 저장
-O --remote-name 파일 저장 시 remote의 file 이름으로 저장
-s --silent 진행 내역이나 메시지 등을 출력하지 않는다.
-X --request Request에 사용할 메서드(GET, POST, PUT 등)를 지정
-v --verbose 동작하는 과정을 출력
-A --user-agent 특정 브라우저인 것처럼 동작하기위한 설정
-H --header 요청할 헤더 설정
-L --location 서버에서 HTTP (301,302 -리다이렉트) 응답이 오면 리다이렉트 URL로 따라감 (--max-redirs 횟수)로 지정 가능
-D --dump-header<file> 파일에 응답 헤더를 기록
-u --user 사용자 아이디 / 비밀번호 입력
-f --fail 오류 발생 시 출력 없이 실패
-T --upload-file 로컬 파일을 서버로 전송
-C --continue-at 중지된 다운로드를 재시작
-J --remote-header-name 응답 헤더에 있는 파일 이름으로 파일 저장 (curl 7.20 이상)
-I --head 응답 헤더만 출력

 

- 결과

api 서버 엔드포인트는 총 3가지가 있음

 

먼저 api 서버 엔드포인트 액세스를 통해  Kubernetes API 서버와의 사용자 상호 작용은 명령이 실행되고 응답이 수신되는 방식을 정의하여 클러스터를 효율적으로 관리하는 전반적인 사용자 경험을 형성합니다.

 

1)퍼블릭

엔드포인트 방법이 퍼블릭으로 구성된 경우 엔드포인트에 액세스하는 도메인 주소는 NLB(Network Load Balancer)의 퍼블릭 IP 주소가 됩니다. 이에 대한 근거는 고가용성을 위해 EKS에 여러 API 서버(일반적으로 3개)를 설정하는 데 있습니다. 각 API 서버에 부하를 균등하게 분배하기 위해 NLB가 최전방에 배치됩니다.

 

2)퍼블릭 & 프라이빗

퍼블릭의 경우 외부 인터넷으로 트래픽이 빠져나간 뒤 다시 API 서버로 들어오지만. 퍼블릭 & 프라이빗은 AWS 내부의 프라이빗 호스팅 존을 통해서 EKS owned ENI를 통과해 나가게 됩니다.

 

3)프라이빗

 EKS API 엔드포인트는 프라이빗으로 구성할 수도 있습니다. 이 설정을 사용하면 EKS 클러스터가 배포된 AWS Virtual Private Cloud(VPC)의 프라이빗 네트워크 내에서만 API 엔드포인트에 액세스할 수 있습니다. 이는 클러스터의 API에 대한 액세스를 VPC 내의 리소스로 제한하여 잠재적인 외부 위협에 대한 노출을 줄여 보안을 강화합니다.

 

노드그룹을 생성하여 워커노드가 생성되면 위와 같이 ec2가 구성되어 워커노드 역할을 합니다.

3. 실습 완료 후 리소스 삭제

- Amazon EKS 클러스터 삭제(10분 정도 소요):  `**eksctl delete cluster --name $CLUSTER_NAME**`
- (클러스터 삭제 완료 확인 후) AWS CloudFormation 스택 삭제 : `**aws cloudformation delete-stack --stack-name myeks**`

 

AWS 리소스를 삭제하는 이유는 이에대한 비용이 과금되기 때문입니다. 따라서 cost exploer에서 사용한 리소스를 확인 후, 해당 리소스를 삭제해야합니다. eks 클러스터 생성은 시간당 약 us 0.1$가 지불됩니다. 그리고 wokernode를 생성하면 ec2가 생성되는데 이에 대한 인스턴스 사용료도 지불해야합니다. 따라서 비용절감을 위해 eks fargate를 사용하기도 합니다. eks fargate는 서울의 경우 시간당 0.04656$가 지불됩니다.

 

#스터디 후기

EKS 콘솔로 일일이 설치하는 것보다 eksctl 명령어를 통해 구축하는것이 훨씬 편하다고 느꼈습니다. 하지만 구축을 위해서 각 파라미터와 이에 필요한 값을 숙지하는 것이 중요다고 생각합니다. 그리고 실습 중 프라이빗으로 구성하였다가, SG Inbound 설정을 제대로 안해서 통신이 안되는 이슈가 있었는데, 네트웍 통신에 대해 새로 알게되는 계기가 되었습니다.

'EKS Study' 카테고리의 다른 글

6주차 - EKS Security  (0) 2024.04.13
5주차 - EKS Autoscaling  (0) 2024.04.07
4주차 - EKS Observability  (1) 2024.03.24
3주차 - EKS Storage & Nodegroup  (1) 2024.03.17
2주차 - EKS Networking  (0) 2024.03.10