์ด๋ฒ ํฌ์คํ ์์๋ AWS์์ ์ ๊ณตํ๋ EKS (Elastic Kubernetes Service)๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค. ๊ตฌ์ถ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:

์คํ ์์ฑ

ํ ํ๋ฆฟ ํ์ผ ์ ๋ก๋ ํด๋ฆญ

์๋ ๋งํฌ๋ก ์ ์ ํ base_resources_cfn_yaml ํ์ผ ์ ์ฅ
์ฒจ๋ถํ์ผ
์ ํ์ผ ์ฒจ๋ถ ํ ๋ค์ ๋ฒํผ ํด๋ฆญ
์คํ ์ธ๋ถ ์ ๋ณด ์ง์
eks-work-stack
๊ธฐ๋ณธ ์ค์ ํ ์์ฑ

EKS Cluster๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ AWS ์ฝ์ ๋๋ eksctl์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋ณธ ํฌ์คํ
์์๋ eksctl์ ์ฌ์ฉํด ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ค์น
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
$ aws --version
aws-cli/2.7.9 Python/3.9.11 Linux/5.13.0-51-generic exe/x86_64.ubuntu.20 prompt/off
$ rm -f awscliv2.zip
$ which aws
/usr/local/bin/aws
$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
์๋ ๋งํฌ๋ฅผ ํตํด AWSCLIV2.msi ํ์ผ ๋ค์ด๋ก๋ ํ ์ค์น
CMD ์คํ ํ ์๋ ๋ช ๋ น์ด ์ ๋ ฅ
aws --version
$ brew install awscli
$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.0.26 Python/3.8.3 Darwin/19.0.0 botocore/2.0.0dev30AWS CLI๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด IAM ์ฌ์ฉ์ ์ธ์ฆ์ ์ค์ ํด์ผ ํฉ๋๋ค.

๋ณด์ ์๊ฒฉ ์ฆ๋ช > ์ก์ธ์ค ํค ๋ง๋ค๊ธฐ

ํฐ๋ฏธ๋์ ์๋ ๋ช ๋ น์ด ์ ๋ ฅ
$ aws configure
AWS Access Key ID [None] : [๋ฐ๊ธ๋ฐ์ IAM์ Access Key ID]
AWS Secret Access Key [None] : [๋ฐ๊ธ๋ฐ์ IAM์ Secret Access Key]
Default region name [None] : ap-northeast-2[์์ธ ๋ฆฌ์ ]
Default output format [None] : text / json / table
**macOS**: brew install weaveworks/tap/eksctleksctl versioneksctl create cluster
--vpc-public-subnets VPC์Subnets๊ฐ
--name ํด๋ฌ์คํฐ์ด๋ฆ(ํ๋์ ์ปดํจํฐ ๋ด์์๋ ์ค๋ณต์ด ์๋์ง๋ง ๋ค๋ฅธ ์ปดํจํฐ์ ๊ฒฝ์ฐ๋ ์ค๋ณต ๊ฐ๋ฅ)
--region ๋ฆฌ์ ์ด๋ฆ
--version ๋ฒ์ (1.xx: ํ์ฌ๋ 24 ๋ถํฐ 31๊น์ง ์ง์ - ์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ จ ๋ช
๋ น์ kubectl ์ ์ด์ฉํ๋๋ฐ AWS์์๋ ํ๋ ์ด์ ๋ฒ์ ๊น์ง๋ ๋ฌธ์ ๊ฐ ์์ ๊ฑฐ๋ผ๊ณ ํฉ๋๋ค.)
--nodegroup-name ๋
ธ๋๊ทธ๋ฃน์ด๋ฆ(์ค๋ณต ๊ฐ๋ฅ)
--node-type ์ธ์คํด์คํ๋์จ์ด์ข
๋ฅ(์ฌ์ฉํ ์ ์๋ ๊ฐ์ด ์ ํ์ )
--nodes ๋
ธ๋์๊ฐ์
--nodes-min ์ต์ ๋
ธ๋์ ๊ฐ์
--nodes-max ์ต๋ ๋
ธ๋์ ๊ฐ์
VPC ์ ๋ณด๋ ์ด์ ์ ๋ง๋ VPC์ ์ ๋ณด๋ฅผ ์ ๋ ฅํด์ผํฉ๋๋ค.
CloudFormation์์ ๋ง๋ VPC ์คํ์ ์ถ๋ ฅ ์ ๋ณด๋ฅผ ๋ค์ด๊ฐ๋ฉด ์ฐพ์ ์ ์์ต๋๋ค.
- WorkSubnet

1c23-421f-96a8-6b77e0a47775/55e89874-f6e3-4164-8eba-d1845493fad5/image.png)
์์ฑ ์๊ฐ์ ์ฝ 5๋ถ ์ ๋ ์์๋ฉ๋๋ค.

kubectl get nodes

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app # ๋ฐฐํฌ์ ์ด๋ฆ์ ์ง์ .
labels:
app: nginx-app # ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ผ๋ฒจ.
spec:
replicas: 2 # ํ๋์ ๋ณต์ ๋ณธ ์๋ฅผ ์ ์.
selector:
matchLabels:
app: nginx-app # ํ๋๋ฅผ ์๋ณํ๋ ๋ผ๋ฒจ.
template:
metadata:
labels:
app: nginx-app # ์์ฑ๋ ํ๋์ ์ถ๊ฐ๋ ๋ผ๋ฒจ.
spec:
containers:
- name: nginx-container # ์ปจํ
์ด๋์ ์ด๋ฆ.
image: nginx # ์ฌ์ฉํ ๋์ปค ์ด๋ฏธ์ง.
ports:
- containerPort: 80 # ์ปจํ
์ด๋๊ฐ ๋
ธ์ถํ๋ ํฌํธ.
kubectl apply -f deployment.yaml

# deployment ์ํ ํ์ธ
kubectl get deployment
# replicas ์ํ ํ์ธ
kubectl get replicas
# pod ์ํ ํ์ธ
kubectl get pods

Pod๋ฅผ ์ธ๋ถ์์ ์ ์ํ๊ธฐ ์ํด์๋ Service์ LoadBalancer๋ฅผ ์์ฑํด์ค์ผํฉ๋๋ค.
apiVersion: v1
kind: Service
metadata:
name: nginx-service # Service์ ์ด๋ฆ์ ์ง์ .
spec:
type: LoadBalancer # ์ธ๋ถ IP๋ฅผ ์ ๊ณตํ์ฌ ์ธ๋ถ ํธ๋ํฝ์ ํด๋ฌ์คํฐ๋ก ๋ผ์ฐํ
.
selector:
app: nginx-app # nginx-app ๋ผ๋ฒจ์ด ์๋ ํ๋๋ฅผ ์ ํํ์ฌ ์ฐ๊ฒฐ.
ports:
- protocol: TCP # ์๋น์ค๊ฐ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ํ๋กํ ์ฝ (๊ธฐ๋ณธ๊ฐ์ TCP).
port: 80 # ์ธ๋ถ์์ ์ ๊ทผํ ํฌํธ ๋ฒํธ.
targetPort: 80 # ํ๋์์ ๋
ธ์ถํ๋ ์ปจํ
์ด๋ ํฌํธ์ ๋งคํ.
kubectl apply -f service.yaml

kubectl get svc


kubectl get svc --all-namespaceskubectl delete svc ์๋น์ค์ด๋ฆeksctl delete cluster --name ํด๋ฌ์คํฐ์ด๋ฆEKS๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ CloudFormation, eksctl, ๊ทธ๋ฆฌ๊ณ Kubernetes์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ค์ต์ ํตํด ์ ๋ฆฌํ ์ ์์์ต๋๋ค. ํนํ, EKS์ ๋คํธ์ํฌ ๊ตฌ์ฑ์์ VPC์ ํ์์ฑ์ ๋๊ผ์ผ๋ฉฐ, Kubernetes ๋ฆฌ์์ค์ ๋ฐฐํฌ ๊ณผ์ ์ ์ตํ ์ ์์์ต๋๋ค.