1. yum update ๋ฐ aws ๋ฒ์ ํ์ธ
ec2-user ๊ณ์ ์ผ๋ก ์ ์(sudo su - ec2-user)
sudo yum update -y ๋ช ๋ น์ ํตํด yum์ ์ ๋ฐ์ดํธ ํด์ค๋ค.
aws --version์ ํตํด 1.18 ๋ฒ์ ์ด์์ธ์ง ํ์ธํ๋ค. => ๊ทธ๋์ผ kubectl ๋ช ๋ น์ด ๋์ํ๊ธฐ ๋๋ฌธ
2. EC2 Role ์์ฑ ํ Bastion EC2(NAT ์ธ์คํด์ค)์ ๋ถ์ฌ
Role ์์ฑ์ด ์๋ฃ๋๋ฉด ์ด์ EC2์ ๋ค์ด๊ฐ์ IAM ์ญํ ์ ์์ ํด์ฃผ๋ฉด ๋๋ค.
3. Kubectl ์ค์น
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-kubectl.html
์ ์ฌ์ดํธ์์ ์ค์น ๋ช ๋ น์ด๋ฅผ ๋ณต์ฌํ์ฌ ๋ค์ด๋ก๋ํ๋ฉด ๋ฃจํธ์ kubectl์ด ์ค์น๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ค์์๋ kubectl์ ์คํ๊ถํ์ ์ค์ผํ๋ฏ๋ก chmod +x ./kubectl ๋ช ๋ น์ ์ ๋ ฅํ๋ค
๊ทธ ๋ค์์๋ ํ๊ฒฝ๋ณ์์ kubectl์ ์ถ๊ฐํ๊ธฐ ์ํด ์๋ ๋ช ๋ น์ ์ ๋ ฅํ๋ค.
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl ๋ช ๋ น์ด ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
4. eksctl ์ค์น
AWS EKS๋ผ๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ eks๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๋ช ๋ น์ด ๋๊ตฌ์ธ eksctl์ ์ค์น
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
๋์ผํ๊ฒ ์๋ ๋ช ๋ น์ผ๋ก ํ๊ฒฝ ๋ณ์์ ๋ฑ๋กํ๋ค.
sudo mv /tmp/eksctl /usr/local/bin
5. ๋ ธ๋ ๊ทธ๋ฃน ์์ฑ ๋ฐ ssh ํค ์์ฑ
๋ ธ๋ ๊ทธ๋ฃน ์์ฑ์ eksctl ๋ช ๋ น์ ํตํด ํ๋ฉด ๋๋๋ฐ EC2 ์ธ์คํด์ค๊ฐ ๋ ธ๋(Worker Node)์ด๋ค.
์ด EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ ํญ์ ssh ํค๊ฐ ํ์ํ๋ค.
ec2-user ๊ณ์ ์ผ๋ก ์ ์ํ์ ๋๋ ๋ฃจํธ ํด๋์ ์๋์ ๊ฐ์ด .ssh ์จ๊นํ์ผ์ด ์กด์ฌํ์ง๋ง ๋ค๋ฅธ ๊ณ์ ์ผ๋ก ์ ์ํ์ ๋๋ ๋ฐ๋ก ์ค์ ์ด ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ec2-user ๊ณ์ ์ผ๋ก ์ ์ํด์ผ ํ๋ค.
๋ง์ฝ ๋ค๋ฅธ ๊ณ์ ์ผ๋ก ์ ์ํ๋ค๋ฉด mkdir .ssh ๋ช ๋ น์ผ๋ก ํด๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
ssh-keygen
์ ๋ช ๋ น์ ํตํด ssh key๋ฅผ ์์ฑํ๋ค.
.ssh ํด๋๋ด์๋ ์์ ๊ฐ์ด ์์ปค๋ ธ๋์ ssh key๊ฐ ์์ฑ๋๋ค.
์ด์ ์๋์ ๊ฐ์ด ์์ฑ๋ ๊ณต๊ฐํค๋ฅผ ์ฌ์ฉ์ค์ธ EC2 Region์ผ๋ก ์ ๋ก๋ํ๋ค.
๋์ ๊ฒฝ์ฐ ์ ๋ช ๋ น์ ์ฒ์ ์คํํ์ ๋ region์ ์ค์ ํด๋ฌ๋ผ๊ณ ๋ด๋ค.
aws configure ๋ช ๋ น์ ์ ๋ ฅํ๊ณ Default Region name์ ํ์ฌ ๋ฆฌ์ ์ธ ap-northeast-2๋ฅผ ์ ๋ ฅํ๋ ์ ์์ ์ผ๋ก ๋์ํ๋ค.
์๋ฃ๋๋ฉด ์์ ๊ฐ์ด EC2 ํค ํ์ด์ ๋ค์ด๊ฐ๋ฉด ๋ด๊ฐ ์ ๋ก๋ํ ํค๊ฐ ๋ํ๋๊ฒ ๋๋ค.
5. eksctl ๋ช ๋ น์ด ์ด์ฉํ์ฌ eks cluster์ workerNode ์์ฑ
eksctl create cluster --name mission-cluster --version 1.26 --region ap-northeast-2 --nodegroup-name mission-wn --node-type t3.medium --nodes 1 --nodes-min 1 --nodes-max 1 --ssh-access --ssh-public-key workernode-key --managed
- --name: eks cluster ์ด๋ฆ
- --version: eks cluster ๋ฒ์
- --region: ์ง์ญ ์ค์
- --nodegroup-name: Node group ์ด๋ฆ
- --node-type: Node type
- --ssh-public-key: worker node ์ ์์ ์ฌ์ฉํ key
์ ๋ช ๋ น์ ์ ๋ ฅํ๊ณ ๋๋ฉด 20๋ถ์ ๋ ํ์ ์์ ์ด ์๋ฃ๋๋ค.
์๋ ๋ช ๋ น์ ํตํด ๋ ธ๋๋ฅผ ํ์ธํ ์ ์๋ค.
kubectl get node
6. Deployment ์์ฑ (with Nginx) ๋ฐ ๋ฐฐํฌ
nginx-deployment.yaml, nginx-service.yaml 2๊ฐ์ ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
(1) nginx-deployment.yaml : Deployment ์์ฑ ( ๋ช ๊ฐ์ Pod๊ฐ ์ผ๋ง๋งํผ์ ์์์ ์ฌ์ฉํ๊ณ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ฐฐํฌํ ์ง ์ ์)
cat <<EOF > ~/nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
(2) nginx-service.yaml : Service ์์ฑ (Pod๋ฅผ ์ธ๋ถ๋ก ๋ ธ์ถ์์ผ์ฃผ๋ ๋ก๋๋ฐธ๋ฐ์)
cat <<EOF > ~/nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
type: LoadBalancer
EOF
kubectl apply -f nginx-deployment.yaml
์ ํ์ผ ๋ด์ฉ ๊ทธ๋๋ก pod์ delpoyment๋ฅผ apply ํด์ฃผ๋ ๋ช ๋ น
replicas ๋ฅผ 2๋ก ํ๊ธฐ ๋๋ฌธ์ nginx 2๊ฐ๊ฐ Running์ค์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
nginx-service.yaml๋ ๋๊ฐ์ด applyํด์ค๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด service, deployment, pod ๋ฅผ ์กฐํํ ์ ์๋ค.
service์์ ๋ก๋๋ฐธ๋ฐ์ ํ์ ์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ CLB ํ์ ์ ELB๊ฐ ์์ฑ๋๋ค.
์ด์ EXTERNAL-IP:80 ์ผ๋ก ์ ์ํ์ฌ Nginx ์ ์์ ํ์ธํ๋ค.
AWS ํ์ด์ง์์๋ Load Balancer๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ญ์ ํด๋ณด๊ธฐ
๋คํด๋ดค์ผ๋ฉด ์ด์ ๋น์ฉ์ด ๋ ๋ถ๊ณผ๋๊ธฐ ์ ์ ์ญ์ ํด์ผํ๋ค.
(1) service, deployment ์ญ์
kubectl delete -f nginx-service.yaml
kubectl delete -f nginx-deployment.yaml
AWS ๋ก๋๋ฐธ๋ฐ์ ํ์ด์ง์์๋ ์ญ์ ๋์๋์ง ํ์ธ
(2) EKS cluster์ Node group ์ญ์
eksctl delete cluster --region ap-northeast-2 --name=mission-cluster
- --name: eks cluster ์ด๋ฆ
์ฝ์์ ์ญ์ ์๋ฃ ๋ฉ์์ง๊ฐ ๋ด๋์ง ๊ผญ ํ์ธํด์ผ ํจ.
๊ทธ ๋ค์๋ EC2 -> Autoscaling ๊ทธ๋ฃน ์์ ์ญ์ ๋ ๊ฒ์ ํ์ธ
์ฃผ์์ฌํญ
Worker Node๋ EC2 ๋์๋ณด๋์์ ์ญ์ ํ์ฌ๋ Autoscaling group์ desired ๊ฐ์ ์ํด ์ฌ์์ฑ๋๋ค.
๋ฐ๋ผ์, eks delete cluster ๋ช
๋ น์ด๋ฅผ ํตํด ์ญ์ ํ๊ฑฐ๋ EC2>Autoscaling ๊ทธ๋ฃน์์ Worker Node์ ์ธ์คํด์ค ์ min, desired, max ๊ฐ ๋ชจ๋ 0์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
'๐ณ DevOps > Cloud Infra' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
24*365 ์ฅ์ ๋ชจ๋ํฐ๋ง์ ๋ํด์(with AWS CloudWatch) (1) | 2023.07.13 |
---|---|
๋ก๊ทธ ์์ง์ ์ํ AWS EFK Stack ๊ตฌ์ถ (0) | 2023.07.06 |
Ansible (0) | 2023.07.04 |
AWS VPC ๊ตฌ์ถํ๊ธฐ (0) | 2023.06.17 |