01. Amazon EKS 클러스터 정보 확인 및 설정 (eksctl)
01-1. krew 플러그인 확인
# kubectl krew 목록 확인
kubectl krew list
PLUGIN VERSION
ctx v0.9.5 # k8s context 확인
get-all v1.3.8 # namespace의 모든 리소스 확인 가능
krew v0.4.4 # k8s plugin 검색, 설치...
ns v0.9.5 # 현재 위치한 ns 확인 및 변경
- ctx: 현재 위치한 컨텍스트 확인 및 변경 가능
- get-all: namespace의 모든 리소스 확인
- krew: kubectl 플러그인 검색, 설치, 업데이트, 제거
- ns: 현재 위치한 네임 스페이스 확인 및 변경
# kube_ps1 활성화
kubeon
(eks-admin@myeks:N/A) [root@myeks-host ~]#
- kube_ps1: 현재 위치한 컨텍스트와 네임스페이스(ns) 정보를 프롬프트에 표현
- 앞 부분의 붉은색 영역이 컨텍스트, 노란색 영역이 네임스페이스로 현재 작업 위치 확인 가능
✅ 1. kubectl ctx
# 현재 위치한 컨텍스트 정보 확인
kubectl ctx
eks-admin@myeks.ap-northeast-2.eksctl.io
kubectl ctx를 통해 현재 위치한 k8s 컨텍스트 정보를 확인할 수 있다. 여기서 말하는 k8s 컨텍스트란 kubectl이 어떤 클러스터를 대상으로, 어떤 사용자 권한을 사용하며, 어떤 네임스페이스에서 명령을 실행할지 지정하는 설정을 의미한다. 즉, k8s 클러스터를 관리할 때 여러개의 클러스터가 존재할 수 있는데, kubectl이 어떤 Cluster, Namespace를 대상으로 명령을 실행하는지 결정하는 정보를 컨텍스트(Context)라고 보면 된다. ctx 플러그인을 사용하면 context 확인 및 변경이 가능하기에 ctx를 사용하자
✅ 2. kubectl ns
# k8s 네임스페이스 정보 확인
kubectl ns
# default ns로 전환
kubectl ns default
kubectl ns 명령어를 통해 현재 존재하는 namespace 정보를 확인할 수 있고, 특정 ns로 전환도 가능하다.
✅ 3. kubectl get-all
kubectl get-all
kubectl get-all 이라는 플러그인을 설치하면, 현재 네임스페이스 안의 모든 리소스(pods, deployments, service, configmaps)를 한번에 보여준다. krew(k8s 플러그인 매니저)를 통해 kubectl get-all 같은 플러그인 설치가 가능하다.
01-2. EKS 클러스터 정보 확인
# kubectl 기반 클러스터 정보 확인
kubectl cluster-info
# eksctl을 통한 클러스터 정보 확인
eksctl get cluster
# aws cli 기반 클러스터 정보 확인
aws eks describe-cluster --name $CLUSTER_NAME | jq
# aws cli 기반 클러스터 정보 확인(API 서버 주소만 추출)
# -r : 순수 텍스트로 출력
aws eks describe-cluster --name $CLUSTER_NAME | jq -r ".cluster.endpoint"
# APIDNS 변수에 저장
APIDNS=$(aws eks describe-cluster --name $CLUSTER_NAME | jq -r .cluster.endpoint | cut -d '/' -f 3)
dig +short $APIDNS
# API 서버 접속
curl -k -s https://$APIDNS | jq
curl -k -s https://$APIDNS/version | jq
01-3. EKS 노드그룹 정보 확인
# eks node group 정보 확인
eksctl get nodegroup \
--cluster $CLUSTER_NAME \
--name $CLUSTER_NAME-nodegroup
# aws cli 기반 node group 정보 확인
aws eks describe-nodegroup \
--cluster-name $CLUSTER_NAME \
--nodegroup-name $CLUSTER_NAME-nodegroup | jq
# kubectl 기반 노드 정보 확인
kubectl get node
# kubectl 기반 노드 정보 확인 (상세 정보 표기)
kubectl get node -o wide
# kubectl 기반 노드 정보 확인 (verbose: 로그 출력의 상세도 설정)
kubectl get node -v=6
01-4. EKS 파드 정보 확인
# 현재 네임스페이스의 파드 정보 확인
kubectl get pods
# 모든 네임스페이스의 파드 정보 확인
kubectl get pods -A
# kube-system 네임스페이스의 파드 정보 확인
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide
01-5. 워커 노드의 프라이빗 IP 확인 및 변수 지정
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
01-6. 워커 노드의 프라이빗 IP주소를 변수에 저장 및 확인
kubectl get node -o jsonpath={.items[0].status.addresses[0].address}
kubectl get node -o jsonpath={.items[1].status.addresses[0].address}
export N1=$(kubectl get node -o jsonpath={.items[0].status.addresses[0].address})
export N2=$(kubectl get node -o jsonpath={.items[1].status.addresses[0].address})
echo "export N1=$N1" >> /etc/profile
echo "export N2=$N2" >> /etc/profile
echo $N1
echo $N2
01-7. 워커 노드의 이름을 변수에 입력 및 확인
kubectl get node -o jsonpath={.items[0].status.addresses[3].address}
kubectl get node -o jsonpath={.items[1].status.addresses[3].address}
export NN1=$(kubectl get node -o jsonpath={.items[0].status.addresses[3].address})
export NN2=$(kubectl get node -o jsonpath={.items[1].status.addresses[3].address})
echo "export NN1=$NN1" >> /etc/profile
echo "export NN2=$NN2" >> /etc/profile
echo $NN1
echo $NN2
01-8. 워커 노드 SSH 접속 및 명령어 입력
ssh ec2-user@$N1
ssh ec2-user@$N2
# hostname만 반환
ssh ec2-user@$N1 hostname
ssh ec2-user@$N2 hostname
01-9. 워커 노드 프로세스 확인
# kubelet 상태 정보 확인
ssh ec2-user@$N1 sudo systemctl status kubelet
ssh ec2-user@$N2 sudo systemctl status kubelet
# 프로세스 확인
ssh ec2-user@$N1 sudo pstree
ssh ec2-user@$N1 sudo ps afxuwww
ssh ec2-user@$N2 sudo pstree
ssh ec2-user@$N2 sudo ps afxuwww
# 컨테이너 런타임 확인
ssh ec2-user@$N1 sudo ps axf |grep /usr/bin/containerd
ssh ec2-user@$N2 sudo ps axf |grep /usr/bin/containerd
01-10. 워커 노드 네트워크 및 스토리지 확인
ssh ec2-user@$N1 sudo ip -c addr
ssh ec2-user@$N2 sudo ip -c addr
# 인터페이스 IP 주소 확인
# ip router는 라우팅 테이블을 다루는 명령이며, 커널의 라우팅 테이블을 보여줌
# 이 목적지 IP 패킷을 어느 인터페이스/게이트웨이로 보낼까?
ssh ec2-user@$N1 sudo ip -c route
ssh ec2-user@$N2 sudo ip -c route
# NAT iptables 확인
ssh ec2-user@$N1 sudo iptables -t nat -S
ssh ec2-user@$N2 sudo iptables -t nat -S
# 스토리지 정보
ssh ec2-user@$N1 lsblk
ssh ec2-user@$N2 lsblk
01-11. 워커 노드 통신 대상 확인
# TCP 세션 확인(kubelet과 kubeproxy Peer IP 확인)
ssh ec2-user@$N1 sudo ss -tnp
ssh ec2-user@$N2 sudo ss -tnp
# API 서버 주소 dig 조회
dig +short $APIDNS
# 새로운 터미널에서 kebectl으로 노드에 bash 셸 접근
kubectl node-shell $NN1
exit
01-12. EKS 보안그룹 확인
# 보안 그룹 ID와 이름 확인
aws ec2 describe-security-groups \
--query 'SecurityGroups[*].[GroupId, GroupName]' \
--output text | grep myeks
# 각각의 보안 그룹 정보 확인
aws ec2 describe-security-groups \
--group-ids \
--output yaml sg-XXXXXXXXXXX | yh
# 파드 배포
# 새로운 터미널에서 파드와 서비스 모니터링
watch -d 'kubectl get pod,svc'
# 슈퍼마리오 디플로이먼트 다운 및 확인
curl -s -O https://raw.githubusercontent.com/cloudneta/cnaeblab/master/_data/mario.yaml
cat mario.yaml | yh
# 슈퍼마리오 디플로이먼트 배포
kubectl apply -f mario.yaml
# 슈퍼마리오 디플로이먼트 배포 확인(CLB 확인)
kubectl get deploy,svc,ep mario
# 슈퍼마리오 CLB 주소 추출₩
kubectl get svc mario -o jsonpath={.status.loadBalancer.ingress[0].hostname} | awk '{ print "Mario URL = http://"$1 }'
# 생성한 파드 삭제
kubectl delete -f mario.yaml
# 관리형 노드 그룹에 노드 추가 및 삭제
# 새로운 터미널에서 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
# EKS 노드 그룹 정보 확인
eksctl get nodegroup \
--cluster $CLUSTER_NAME \
--name $CLUSTER_NAME-nodegroup
# EKS 노드 수 증가(2개 -> 3개)
eksctl scale nodegroup \
--cluster $CLUSTER_NAME \
--name $CLUSTER_NAME-nodegroup \
--nodes 3 \
--nodes-min 3 \
--nodes-max 6
# EKS 노드 수 감소(3개 -> 2개)
eksctl scale nodegroup \
--cluster $CLUSTER_NAME \
--name $CLUSTER_NAME-nodegroup \
--nodes 2 \
--nodes-min 2 \
--nodes-max 4
02. 실습 환경 삭제
# eks 클러스터 삭제
eksctl delete cluster --name $CLUSTER_NAME
# aws cli 기반 기본 인프라 삭제
aws cloudformation delete-stack --stack-name $CLUSTER_NAME'Public Cloud > AWS - EKS CloudNet@' 카테고리의 다른 글
| [EKS] AWS VPC CNI? (0) | 2025.09.11 |
|---|---|
| [EKS] eksctl에서 EKS 배포 (0) | 2025.09.09 |
| [EKS] 관리 콘솔에서 EKS 배포 (0) | 2025.09.09 |
| [EKS] CloudFormation 기본 인프라 배포 (0) | 2025.09.09 |
| [EKS] AWS EKS 소개 및 배포, Control Plane과 Data Plan 그리고 Cluster Endpoint Access (0) | 2025.09.09 |