가시다님께서 진행하신 AEWS라는 스터디를 진행하면서 작성하는 글입니다.
AEWS= AWS EKS Workshop Study
AEWS 스터디는 4월 23일 ~ 6월 4일동안 총 7번 진행될 예정입니다.
PKOS 스터디에서 정말 좋은 경험을 했어서 다시 이렇게 참가하게 되었습니다.
가시다님께서 진행하시는 스터디에 관심있으신 분들은 Cloudnet@Blog에 들어가시면 자세한 정보를 확인하실 수 있습니다.
최근 LG CNS와 AWS가 행사를 주최한 AM 핸즈온이라는 행사에 참가했었습니다.
한 번도 이런 행사에 참가한 적이 없었는데, 같은 팀원 분의 소개로 참가하게되었습니다.
해당 행사에서는 EKS에 대한 전반적인 설명과 EKS를 이용한 핸즈온을 진행했습니다.
EKS 핸즈온에서는 9개의 과제를 내어주고 그 과제를 팀끼리 해결하는 것이었는데 앞에 전광판에 과제를 풀때마다 점수가 올라가는 시스템이였습니다.
1등은 무려 100만원, 2등은 50만원 이렇게 상금이 있던 핸즈온입니다.
(100만원 받고 싶어서 참가했습니다.)
총 60개 이상의 팀이 참가했고 저희는 이 곳에서 11등으로 마무리 했습니다.
(NDNE가 저희 팀입니다.)
해당 핸즈온을 진행할 때는 상금을 위해서 workshop과 docs에 나와있는 커맨드만 보고 따라치며 과제를 해결하는 것에만 집중을 했었습니다.
그런데 집에 가면서 생각해보니까 어떻게 돌아가는지 자세히 모르고 무작정 따라쳤던게 스스로 부끄러워서 제대로 공부를 해봐야겠다 라고 생각이 들면서 EKS Workshop을 복습하던 날이 얼마 지나지 않아 AEWS 스터디 모집글이 딱 올라왔고 그렇게 바로 신청하게 되었습니다.
Kubernetes 컨트롤 플레인 또는 노드를 설치, 운영 및 유지 관리할 필요 없이 AWS의 Kubernetes 실행에 사용할 수 있는 관리형 서비스입니다.
Amazon EKS는 각 클러스터에 대해 단일 테넌트 Kubernetes 컨트롤 플레인을 실행합니다.
etcd
인스턴스로 구성됩니다.데이터 플레인은 두 개 이상의 작업자 노드로 구성되며, 워크로드에 따라 확장 및 축소가 가능하고 장애로 부터 자동으로 복구할 수 있습니다.
작업자 노드는 ****컨테이너화된 애플리케이션을 실행하는 시스템이고 구성요소가 있습니다.
EKS는 3가지 방법으로 pod를 예약할 수 있습니다.
각 기능에 대한 상세 비교내용은 이 링크에서 보실 수 있습니다.
Amazon EKS에서는 클러스터와 통신하는 데 사용하는 관리형 Kubernetes API 서버에 대한 엔드포인트를 생성합니다.
기본적으로 API 서버 엔드포인트는 인터넷에 공개되어 있으며, API 서버에 대한 엑세스는 IAM 및 기본 RBAC(역할 기반 엑세스 제어)의 조합을 통해 보호됩니다.
엔드포인트 엑세스 제어 방식은 3가지로 구성할 수 있습니다.
퍼블릭 엑세스 활성화, 프라이빗 엑세스 비활성화
퍼블릭 엑세스 활성화, 프라이빗 엑세스 활성화
퍼블릭 엑세스 비활성화, 프라이빗 엑세스 비활성화
EKS를 한번 직접 배포해보겠습니다.
가시다님의 스터디는 친절하 EKS를 쉽게 배포할 수 있게 환경을 구성해주십니다.
저희 스터디에서 조력자 분이신 악분님의 블로그에 EKS 설치 설명이 깔끔하게 되어있으니 설치하고 싶으신 분들은 아래 블로그에서 참고하셔도됩니다.
EKS 스터디 - 1주차 3편 - eksctl로 EKS생성
아래의 이미지와 같이 구성된 인프라를 구성할 것입니다.
먼저 EKS 생성을 위한 작업용 EC2를 설치합니다.
해당 작업용 EC2가 설치가 완료되면 putty로 접속 후 IAM User 자격 증명 설정 및 VPC 확인 및 변수 지정합니다.
# 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 | yh
****## 퍼블릭 서브넷 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
eksctl create cluster
을 실행합니다.
# 변수 확인
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2
# 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.24 --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 클러스터 & 관리형노드그룹 배포
**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.24 --ssh-access --external-dns-access --verbose 4**
설치 완료 확인
Cloudformation
Autoscaling 그룹
⇒ 워커노드 2대가 Autoscaling 그룹으로 관리가 되어집니다!
EKS 클러스터 정보 확인