1 서울리전 2 EC2 키페어 준비 EC2 > 키페어 > ,키페어 생성 3 Access-key , Secret-Key 생성 IAM > 사용자 AKIAS 38/IBFMh/rTD 4 cloudformation 실행 eks1 다운로도 받은 cloudformation 파일 사용 5 EC2 로그인 # EKS 생성할수 있는 권한 부여 aws configure [root@kops-ec2 environment]# aws configure AWS Access Key ID [None]: AKIA2ESLMQ AWS Secret Access Key [None]: JGgwvJFIQS2d35bM Default region name [None]: ap-northeast-2 Default output format [None]: < 엔터> ap-northeast-2 [root@kops-ec2 environment]# aws s3 ls 2026-01-11 17:23:29 cf-templates-1m33dxyu90t4w-ap-northeast-2 6 mkdir -p ~/environment/ cd ~/environment/ export AWS_REGION=ap-northeast-2 echo ${AWS_REGION} 7 # eks 생성하기1 - instanceType: m7i-flex.large # 클러스터 워커 노드의 인스턴스 타입 cat << EOF > eks-demo-cluster.yaml --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-demo # 생성할 EKS 클러스터명 region: ${AWS_REGION} # 클러스터를 생성할 리젼 version: "1.34" vpc: cidr: "192.168.0.0/16" # 클러스터에서 사용할 VPC의 CIDR managedNodeGroups: - name: node-group # 클러스터의 노드 그룹명 instanceType: m7i-flex.large # 클러스터 워커 노드의 인스턴스 타입 desiredCapacity: 1 # 클러스터 워커 노드의 갯수 volumeSize: 20 # 클러스터 워커 노드의 EBS 용량 (단위: GiB) iam: withAddonPolicies: imageBuilder: true # AWS ECR에 대한 권한 추가 albIngress: true # albIngress에 대한 권한 추가 cloudWatch: true # cloudWatch에 대한 권한 추가 autoScaler: true # auto scaling에 대한 권한 추가 cloudWatch: clusterLogging: enableTypes: ["*"] EOF eksctl create cluster -f eks-demo-cluster.yaml (20분 소요 됨) # 무료 계정으로 가능한 서버 t3.micro t3.small c7i-flex.large 2/4 m7i-flex.large 2/8 # 참고 사항 eks 생성하기2 - m5.large로 생성시 무료 계정에서는 m5.large # 클러스터 워커 노드의 인스턴스 타입 생성 불가 cat << EOF > eks-demo-cluster.yaml --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-demo # 생성할 EKS 클러스터명 region: ${AWS_REGION} # 클러스터를 생성할 리젼 version: "1.34" vpc: cidr: "192.168.0.0/16" # 클러스터에서 사용할 VPC의 CIDR managedNodeGroups: - name: node-group # 클러스터의 노드 그룹명 instanceType: m7i-flex.large # 클러스터 워커 노드의 인스턴스 타입 desiredCapacity: 3 # 클러스터 워커 노드의 갯수 volumeSize: 20 # 클러스터 워커 노드의 EBS 용량 (단위: GiB) iam: withAddonPolicies: imageBuilder: true # AWS ECR에 대한 권한 추가 albIngress: true # albIngress에 대한 권한 추가 cloudWatch: true # cloudWatch에 대한 권한 추가 autoScaler: true # auto scaling에 대한 권한 추가 cloudWatch: clusterLogging: enableTypes: ["*"] EOF eksctl create cluster -f eks-demo-cluster.yaml (15분 소요 됨) 8 타이머 수정 > 15분 지정 https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1 10 kubectl get no NAME STATUS ROLES AGE VERSION ip-192-168-11-235.ap-northeast-2.compute.internal Ready 61s v1.34.2-eks-ecaa3a6 11 # 다른 터미널에서 .모니터링 watch -d kubectl get no,svc,pod,deploy,rs 12 # 서버 생성 kubectl create deployment websrv --image=nginx --port=80 --replicas=2 13 로드 밸런서 생성 kubectl expose deployment websrv --port=80 --type=LoadBalancer 2분후, 브라우저로 웹접속 확인 로드밸런서 생성에 2분 걸림 Welcome to nginx! 14 # 마리오 게임 셍성해 보자. cat < type: LoadBalancer 로 수정. LoadBalancer (3분 걸림) 웹브라우저로 접속 확인 17 # 마리오 파드 수 조정 kubectl scale deployment.apps/mario --replicas=3 kubectl scale deployment.apps/mario --replicas=30 kubectl scale deployment.apps/mario --replicas=2 18 # work node 수 늘리기 오토스케일링 그룹 이름을 알아야 한다/ 콘솔에서 확인 EC2 > Autoscaling Group에서 이름 확인 예) eks-node-group-b2ce1cdd-0d39-e281-9 # eks-demo 의 DescribeAutoScalingGroups 확인 aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[? Tags[? (Key=='eks:cluster-name') && Value=='eks-demo']].[AutoScalingGroupName, MinSize, MaxSize,DesiredCapacity]" --output table 현재) 1 1 1 # 콘솔에서 확인 , EC2 > 오토스케일링 그룹에서 이름 확인 - 변수명 본인것으로 수정. ASG_NAME=eks-node-group-cace48ca-2b5d-0dba-5bff-e3b419585246 echo ${ASG_NAME} # node를 5로 aws autoscaling update-auto-scaling-group --auto-scaling-group-name ${ASG_NAME} --min-size 2 --desired-capacity 5 --max-size 6 k get no NAME STATUS ROLES AGE VERSION ip-192-168-20-86.ap-northeast-2.compute.internal Ready 43m v1.34.2-eks-ecaa3a6 ip-192-168-28-28.ap-northeast-2.compute.internal NotReady 5s v1.34.2-eks-ecaa3a6 ip-192-168-33-16.ap-northeast-2.compute.internal Ready 43m v1.34.2-eks-ecaa3a6 ip-192-168-92-134.ap-northeast-2.compute.internal Ready 43m v1.34.2-eks-ecaa3a6 ip-192-168-92-162.ap-northeast-2.compute.internal NotReady 5s v1.34.2-eks-ecaa3a6 (i-0343e26104cfd2180@eks-demo:N/A) [root@kops-ec2 kube-ops-view]# #node 2로 aws autoscaling update-auto-scaling-group --auto-scaling-group-name ${ASG_NAME} --min-size 1 --desired-capacity 2 --max-size 6 ---------------------- # 각종 플러그인 설치 유틸인 krew 설치 curl -fsSLO https://github.com/kubernetes-sigs/krew/releases/download/v0.4.3/krew-linux_amd64.tar.gz tar zxvf krew-linux_amd64.tar.gz ./krew-linux_amd64 install krew tree -L 3 /root/.krew/bin # PATH 추가 export PATH="${PATH}:/root/.krew/bin" echo 'export PATH="${PATH}:/root/.krew/bin"' >>~/.bashrc # krew 확인 kubectl krew update kubectl krew search kubectl krew list # 플러그인 설치법 kubectl krew install pluginxxxxxx # krew로 kube-ctx, kube-ns 설치 및 사용 # kube-ctx : 쿠버네티스 콘텍스트 사용 # 설치 (이미 설치) kubectl krew install ctx # 콘텍스트 확인 kubectl ctx # 콘텍스트 사용 kubectl ctx <각자 자신의 콘텍스트 이름> # kube-ns : 네임스페이스(단일 클러스터 내에서 가상 클러스터) 사용 # 설치 (이미 설치) kubectl krew install ns # 네임스페이스 확인 k ns [root@kops-ec2 ~]# kubectl ns default kube-node-lease kube-public kube-system # 터미널 2 watch kubectl get svc,pod # 터미널3 , kube-system 네임스페이스 선택 사용 # 네임스페이스 이동법 kubectl ns kube-system # default 네임스페이스 선택 - 디폴트로 변경. kubectl ns - 혹은 kubectl ns default # 설치된 리스트 확인 k krew list PLUGIN VERSION ctx v0.9.5 get-all v1.4.2 krew v0.4.5 ns v0.9.5 # krew로 추가 플러그인 설치 : df-pv get-all ktop neat oomd view-secret # 설치 kubectl krew install df-pv get-all ktop neat oomd view-secret # get-all 사용 # 주로 Deployment, Service, Pod 등 주요 리소스만 보여준다 # get-all 플러그인은 클러스터 내에 존재하는 정말로 모든 리소스(ConfigMap, Secret, RBAC 설정, Custom Resource 등)를 샅샅이 찾아내어 보여줍니다. kubectl get-all -n kube-system kubectl get-all # ktop 사용 # 리소스 사용량을 볼수 있다!! kubectl ktop # oomd 사용 # kubectl oomd 역시 앞서 언급하신 도구들과 마찬가지로 Krew를 통해 설치하여 사용하는 플러그인입니다. 이 플러그인의 이름은 **"Out Of Memory Detector"**의 약자로, 클러스터 내에서 **OOM Kill(메모리 부족으로 인한 프로세스 강제 종료)**이 발생한 팟(Pod)들을 빠르게 찾아내고 분석할 때 사용합니다. kubectl oomd # df-pv 사용 - 스토리지 정보 확인 리눅스의 df 명령어처럼, 쿠버네티스 내의 **Persistent Volumes(PV)**와 **Persistent Volume Claims(PVC)**의 실제 디스크 사용량(용량, 사용 중인 크기, 남은 공간, 퍼센트)을 한눈에 보여주는 도구입니다. kubectl df-pv # view-secret 사용 : 시크릿 복호화 #보통 쿠버네티스의 Secret은 Base64로 인코딩되어 있어 읽기가 번거로운데, 이 플러그인을 사용하면 자동으로 디코딩해서 보여줍니다 kubectl view-secret ------------------------------------- # 클러스터 삭제 - 5분 소요 # eksctl delete cluster --name eks-demo