brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Dec 18. 2023

EKS 10탄-1. EKS 설치-1/4

2023년 12월

목표

CloudFormation으로 한번에 명령 EC2 +  EKS 생성법

모니터링툴인 kubeops view 설치

node 수 증가/감소 = 물리서버 증가/감소 이해



<1> Cloudformation으로 EC2 +  EKS 한번에 설치 (실습)

<2> aws-demo10 명령 EC2 로그인 (실습)

<3> pod안의 컨테이너에 들어가서 어플리케이션 설치 (선택)

<4> 모니터링툴인 kubeops view 설치 (실습)

<5> node 수 증가 감소 = 물리서버 증가 감소해보기 (실습)





<1> Cloudformation으로 EC2 +  EKS 한번에 설치 (실습)


1

필요한것 2가지

Access-key / Secret-Key = EKS 만들수 있는 권한.

EC2 키페어 = 명령 EC2 로그인 



2

여기서는 eksctl , kubectl 자동 설치 = Cloudfomation으로 한번에 자동 설치 해보자.

EKS까지 한번에 생성된다.


1.31 버전으로 설치한다.  

2024년 12월 최신버전은 1.31 버전이다



CloudFormation 

stackName

myeks


EC2 키페어 선택

Access 키 복붙

Secret 복붙

T3 large 3대



클라우드 포메이션 실행하고 바로 EKS 클러스터가면 생성중이라고 나와야 한다.

Access-key/Secret-key만 똑바로 넣었다면 EKS 클러스터가 생성된다.

제대로 넣지 않았다면 베스천 호스트 ec2 1대만 생성 된다.


클러스터 생성에 30분 소요 된다.


VPC 생성

클러스터 생성

EC2  인스턴스(worker node)는 20분이 지나야 생성이 확인 된다.



결과

VPC 생성 - pub3 , private 3

클러스터 생성 = myeks

Node groups  = ng1  , 클러스터 > Compute > Node Groups > ng1

EC2  -  베스천EC2  - myeks-bastion-EC2

EC2  -  워커노드 EC2이다. 20분이 지나야 생성이 확인 된다. - myeks-ng1-Node





3

https://vclock.kr/timer/#countdown=00:10:00&enabled=0&seconds=0&sound=xylophone&loop=1



5

# 예전 버전 설치시


아래  cloud formation 파일을 클릭 하세요  !!

1.27  cloud formation  파일



6

업그레이드 하지 않아도 된다.


단지, 업그레이드 하고 싶으면 반드시 설치 완료된후 업그레이드 하자. (30분 후)  = kubectl get nodes 해서 잘 된상태에서 해야한다.

1.27 버전으로 설치하면 업그레이드는 1.28로 해야한다.  1개 버전씩 업그레이드가 가능하다.

마스터 노드 업그레이드 해야 한다.

워커 노드 업그레이드 해야 한다. 

각각 따로 해야한다!


워커 노드 경우, 순차적 업그레이드로 할 경우 

(12-18-access22222@myeks:default) [root@myeks-bastion-EC2 ~]# k get nodes

NAME                                               STATUS   ROLES    AGE   VERSION

ip-192-168-1-4.ap-northeast-2.compute.internal     Ready    <none>   93m   v1.27.7-eks-e71965b

ip-192-168-1-5.ap-northeast-2.compute.internal     Ready    <none>   57s   v1.28.3-eks-e71965b

ip-192-168-2-145.ap-northeast-2.compute.internal   Ready    <none>   57s   v1.28.3-eks-e71965b

ip-192-168-2-186.ap-northeast-2.compute.internal   Ready    <none>  93m   v1.27.7-eks-e71965b

ip-192-168-3-187.ap-northeast-2.compute.internal   Ready    <none>   58s   v1.28.3-eks-e71965b

ip-192-168-3-32.ap-northeast-2.compute.internal    Ready    <none>   93m   v1.27.7-eks-e71965b



7

최신 버전은 1.31 이다.


https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html




8

클라우드 포메이션 실행하고 바로 EKS 클러스터가면 생성중이라고 나와야 한다.

Access-key/Secret-key만 똑바로 넣었다면 EKS 클러스터가 생성된다.

제대로 넣지 않았다면 베스천 호스트 ec2 1대만 생성 된다.





<2> aws-demo10 명령 EC2 로그인 (실습)


1

EC2의 베스천 서버 공인 IP로  로그인 


(12-20-0@myeks:N/A) [root@myeks-bastion-EC2 ~]#




2

k get nodes


ip-192-168-1-241.ap-northeast-2.compute.internal   Ready    <none>   10m   v1.31.3-eks-59bf375

ip-192-168-2-145.ap-northeast-2.compute.internal   Ready    <none>   10m   v1.31.3-eks-59bf375

ip-192-168-3-215.ap-northeast-2.compute.internal   Ready    <none>   10m   v1.31.3-eks-59bf375




3

# 노드 보안그룹 ID 확인


aws ec2 describe-security-groups --filters Name=group-name,Values=*ng1* --query "SecurityGroups[*].[GroupId]" --output text


NGSGID=$(aws ec2 describe-security-groups --filters Name=group-name,Values=*ng1* --query "SecurityGroups[*].[GroupId]" --output text)

echo $NGSGID



11

# 노드 보안그룹에 eksctl-host 에서 노드(파드)에 접속 가능하게 룰(Rule) 추가 설정


aws ec2 authorize-security-group-ingress --group-id $NGSGID --protocol '-1' --cidr 192.168.1.100/32






<3> pod안의 컨테이너에 들어가서 어플리케이션 설치 (선택)



1

# pod 생성


kubectl run myweb --image nginx 


kubectl delete pod --all




2

# 운영중인 pod 확인


export MY_POD_NAME=$(kubectl get pods -n default -o jsonpath='{.items[0].metadata.name}')

echo $MY_POD_NAME



kubectl -n default describe pod $MY_POD_NAM



kubectl exec -it ${MY_POD_NAME} -n default -- /bin/bash


참고 

https://github.com/troglobit/tetris

/# apk add micro-tetris






<4> 모니터링툴인 kubeops view 설치 (실습)



# 설치법1


# kube-ops-view 설치


1

# 방법 1 - git 다운로드 설치


파드와 노드증가를 시각화 하여 확인하는 Kubeops view 설치


1

git clone https://codeberg.org/hjacobs/kube-ops-view.git

cd kube-ops-view/

kubectl apply -k deploy


2

외부에서 kube-ops-view를 접속하기 위해서 Service Type을 LoadBalancer 로 변경한다.


kubectl edit svc kube-ops-view



apiVersion: v1

kind: Service

metadata:

  annotations:

  name: kube-ops-view

spec:

  ....

  sessionAffinity: None

  type: LoadBalancer

status:



(3분 걸림)


# kube ops view 접속 URL

kubectl get svc kube-ops-view | tail -n 1 | awk '{ print "Kube-ops-view URL = http://"$4 }'




# 설치법2


1

helm repo add geek-cookbook https://geek-cookbook.github.io/charts/


helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ="Asia/Seoul" --namespace kube-system


kubectl patch svc -n kube-system kube-ops-view -p '{"spec":{"type":"LoadBalancer"}}'


kubectl annotate service kube-ops-view -n kube-system "external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MyDomain"


echo -e "Kube Ops View URL = http://kubeopsview.$MyDomain:8080/#scale=1.5"



( 5분 걸림)




2

watch -d kubectl get svc,pods -A

watch -d kubectl get svc,pods 


8080 접속

http://kubeopsview.masterseo0.link:8080



3

모니터링2


k ns kube-system


watch -d kubectl get nodes



4

# 모니터링3 , 전체 EC2 리스트 보기 , 서버 생성 삭제 확인시 유용하다.


 while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,PrivateIPAdd:PrivaIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --filters Name=instance-state-name,Values=running --output text ; echo "------------------------------" ; sleep 2; done






<5> node 수 증가 감소 = 물리서버 증가 감소해보기 (실습)


1

#  CLUSTER_NAME 과 --name ng1  을 맞춰야 합니다.



export CLUSTER_NAME=myeks

echo  $CLUSTER_NAME



eksctl scale nodegroup --cluster $CLUSTER_NAME --name ng1 --nodes 2 --nodes-min 2 --nodes-max 6


or




# 서버 1대  - 줄어 드는데 시간이 좀 걸린다.  10분



eksctl scale nodegroup --cluster $CLUSTER_NAME --name ng1 --nodes 1 --nodes-min 1 --nodes-max 6




# EKS 1 = eks-demo , node-group


eks-demo # 생성할 EKS 클러스터명

node-group # 클러스터의 노드 그룹명


export CLUSTER_NAME=eks-demo 

echo  $CLUSTER_NAME


eksctl scale nodegroup --cluster $CLUSTER_NAME --name node-group --nodes 2 --nodes-min 2 --nodes-max 6





다음

https://brunch.co.kr/@topasvga/3573



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari