AWS์์ ์ ๊ณตํ๋ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ Amazon Elastic Kubernetes Service(Amazon EKS)์์ ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Github main branch์ ํธ์ฌํ๊ฒ ๋๋ฉด ArgoCD๊ฐ Pullํด์์ Kubernetes์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ฒ ๋ฉ๋๋ค.
๋ณธ ํ๋ก์ ํธ์์๋ EKS ์ฌ์ฉ๋ฒ๊ณผ Ingress๋ก ALB๋ฅผ ์ค์ ํ ๋ ๊ฒช์ ํธ๋ฌ๋ธ ์ํ , Auth Server์ Redis๋ฅผ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ๋ฐฉ๋ฒ, kubectl ๊ด๋ จ ๋ช ๋ น์ด, ์ฌ์ฉ์ ์ถ๊ฐ ๋ฐฉ๋ฒ ๋ค์ ์์๋ณด๊ณ ์ ์ฉ์์ผ staging ํ๊ฒฝ์์์ EKS๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
- USE
- ๊ตฌ์ฑ
- Project Explanation
- Start
- EKS๋ก ํด๋ฌ์คํฐ์ ๋ ธ๋ ์์ฑ
- ekctl ์ค์น ~ alb์ค์น ๊ณผ์
- Ingress๋ก alb๋ฅผ ์ค์ ํ ๋ ์์๋ ๊ฒ
- Auth-Server์ redis ์ฐ๊ฒฐํ๊ธฐ
- kubectl ๋ช ๋ น์ด ์ฌ์ฉํ๊ธฐ
- ArgoCD ์ค์นํ๊ธฐ
- namespace
- clean up
- Kubernetes
- EKS (Kubernetes ๋ฒ์ 1.21)
- node (t3.large 35)
- CD tool
- ArgoCD
- Monitoring
- Prometheus
- Grafna
โโโ README.md
โโโ dump.rdb
โโโ eks์ด๊ธฐ์ค์
โย ย โโโ AWSLoadBalancerControllerIAMPolicy
โย ย โโโ cluster-role-trust-policy.json
โย ย โโโ iam_policy.json
โย ย โโโ node-role-trust-policy.json
โโโ k8s
โย ย โโโ deployment-apiserver.yaml
โย ย โโโ deployment-authserver.yaml
โย ย โโโ deployment-redis.yaml
โย ย โโโ grafana.yaml
โย ย โโโ ingress-argo.yaml
โย ย โโโ ingress.yaml
โย ย โโโ service-apiserver.yaml
โย ย โโโ service-authserver.yaml
โย ย โโโ service-redis.yaml
โโโ make-cluster-2.yaml
โโโ make-cluster.md
โโโ make-cluster.yaml
- EKS๋ก ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์์ฑํ๋ค.
- deploymnet๋ก๋ API Server, Auth Server, Redis ์ด 3๊ฐ๋ก ๊ตฌ์ฑํ๋ค.
- Service๋ 3๊ฐ๋ก์จ, API Server์ Auth Server๋ nodePort๋ก, Redis๋ ClusterIP๋ก ๊ตฌ์ฑํ๋ค.
- Ingress๋ alb๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ๋ค (ingress controller ๋ฐ ingress)
- ArgoCD์ Github๋ฅผ ์ด์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๋ชจ๋ํฐ๋ง์ผ๋ก๋ ํ๋ก๋ฉํฐ์ฐ์ค์ Grafana๋ฅผ ์ด์ฉํด ๊ตฌ์ฑํ๋ค.
- EKS ์ฌ์ฉ์ ์ถ๊ฐํ๊ธฐ
- ๋ช ๋ น์ด ์ ๋ฆฌ
EKS ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์๋ค. ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฝ์์ ์ด์ฉํ๋ ๊ฒ์ด๊ณ , ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ eksctl๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
eksctl create cluster -f cluster.yaml
๊ณต์๋ฌธ์ (url ๋ฃ๊ธฐ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก eksctl์ ์ค์น ํ ๊ฐ๋จํ๊ฒ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ์ ์๋ค. ํ์ง๋ง ํด๋ฌ์คํฐ๋ง ์์ฑ ๋ ๋ฟ ๋ ธ๋๋ ์์ฑํ์ง ๋ชปํ๋ค.
๋ ธ๋๊น์ง ์์ฑํ ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
eksctl create cluster \
--name cluster-1 \
--version 1.21 \
--region us-west-2 \
--nodegroup-name c1-nodes \
--node-type t3.medium \
--nodes 2
์ด์๊ฐ์ด eksctl์ ์ฌ๋ฌ๊ฐ์ง ์ต์ ์ ์ค ์ ์๋ค.
yaml๋ก๋ ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์ ์ํด์ ์ฌ์ฉํ ์ ์๋ค.
make-cluster.yaml์ ์คํ์์ผ ์ํ๋๋๋ก ๋ ธ๋์ ๊ถํ, vpc ๋ฑ์ ์ ์ํด์ ์์ํ ์ ์๋ค.
์คํ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl apply -f make-cluster.yaml
1-1. ekctl ๋ค์ด
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
1-2. ์์ถ ํด์ ๋ ์ด์งํ์ผ ์ฎ๊ธฐ๊ธฐ
sudo mv /tmp/eksctl /usr/local/bin
1-3. ๋ฒ์ ํ์ธ
eksctl version
2-1. ์์ฑ(์์ฑ๋๋๋ฐ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆผ)
eksctl create cluster --name staging --region ap-northeast-2
(eksctl create cluster --name my-cluster --region region-code)
2-2. ๋ฆฌ์์ค ๋ณด๊ธฐ(ํด๋ฌ์คํฐ ๋ ธ๋ ํ์ธ)
kubectl get nodes -o wide
2-3. ํด๋ฌ์คํฐ์ ์คํ์ค์ธ ์ํฌ๋ก๋ ํ์ธ
kubectl get pods --all-namespaces -o wide
2-4. ํด๋ฌ์คํฐ์ ํต์
aws eks update-kubeconfig --region region-code --name my-cluster
3-1. IAM ์ ์ฑ ์์ฑ
curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.0/docs/install/iam_policy.json
3-2. IAM ์ ์ฑ ๋ง๋ค๊ธฐ
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
3-3. eksctl์ ์ด์ฉํด kubectl์ ์ฌ์ฉํ์ฌ IAM ์ญํ ์ ์์ฑํ๊ณ AWS ๋ก๋ ๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ์ kube-system ๋ค์์คํ์ด์ค์ aws-load-balancer-controller๋ผ๋ Kubernetes ์๋น์ค ๊ณ์ ์ ์ถ๊ฐ
eksctl create iamserviceaccount \
--cluster=staging \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::060701521359:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
(eksctl create iamserviceaccount \
--cluster=my-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve)
โ ๏ธ Warning
no IAM OIDC provider associated with cluster
๋ฌธ๊ตฌ๊ฐ ๋จ๋ฉด try ๋ค ๋ถํฐ ๋ณต์ฌํ๋ค์ --approve๋ฅผ ๋ถ์ฌ์ ์คํ ํ ์ ๋ช ๋ น์ด ๋ค์ ์คํํฉ๋๋ค
eksctl utils associate-iam-oidc-provider --region=ap-northeast-2 --cluster=staging --approve
4-1. eks-charts ๋ฆฌํฌ์งํ ๋ฆฌ ์ถ๊ฐ
helm repo add eks https://aws.github.io/eks-charts
4-2. ์ต์ ์ฐจํธ๊ฐ ์ ์ฉ๋๋๋ก ๋ก์ปฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธ
helm repo update
4-3. aws ๋ก๋๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ ์ค์น
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n default \
--set clusterName=staging \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
( helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=cluster-name \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller )
4-4. ๋ค์๊ณผ ๊ฐ์ด ๋ ์ผํจ
> kubectl get deployment -n kube-system aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 47s
ํค - kubernetes.io/cluster/pj4-staging
๊ฐ - shared ๋๋ owned
(ํค - kubernetes.io/cluster/cluster-name)
(๊ฐ - shared ๋๋ owned)
5-1. ํ๋ผ์ด๋น ์๋ธ๋ท์ ํ๊ทธ ์ถ๊ฐ
ํค - kubernetes.io/role/internal-elb
๊ฐ - 1
5-2. ํผ๋ธ๋ฆญ ์๋ธ๋ท์ ํ๊ทธ ์ถ๊ฐ
ํค - kubernetes.io/role/elb
๊ฐ - 1
curl -o eks-console-full-access.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/docs/eks-console-full-access.yaml
kubectl apply -f eks-console-full-access.yaml
6-2. ์ฌ์ฉ์ ์ถ๊ฐ RBAC(๋ง์คํฐ๊ถํ)
eksctl create iamidentitymapping \
--cluster ํด๋ฌ์คํฐ์ด๋ฆ \
--arn arn:aws:iam::xxxxxxxxxxxx:user/์ ์ ์ด๋ฆ \
--username ์ ์ ์ด๋ฆ \
--group system:masters
6-3. ํ์ธ
eksctl get iamidentitymapping --cluster eksworkshop-eksctl
6-4. ์ฌ์ฉ์ ์ถ๊ฐ์ ๊ดํ ๋ด์ฉ์ ์๋ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด ๋์์ต๋๋ค.
# k8s/ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: project4
namespace: default
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/group.name: project4--staging
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:xxxxxxxxxxxx:certificate/104f70c8-4cbb-4873-aed9-eb9bfbeeb021
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
spec:
rules:
- host: "eks.devops-altf4.click"
http:
paths:
- path: /auth
pathType: Prefix
backend:
service:
name: auth-server
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: api-server
port:
number: 80
์ธํฐ๋ท์์ ingress alb๋ฅผ ์ฐพ์๋ณด๋ฉด ์ฒซ ๋ฌธ์ฅ์ ๋ค์๊ณผ ๊ฐ์ด 2๊ฐ๋ก ๋๋์ด์ ธ ์์ต๋๋ค.
apiVersion: networking.k8s.io/v1
apiVersion: extensions/v1beta1
https://kubernetes.io/docs/reference/using-api/deprecation-guide/
ingress ์ apiVersion ์ค extensions/v1beta1 ๋ 1.14 ๋ฒ์ ์ deprecated ๋์๊ณ 1.22 ๋ฒ์ ๋ถํฐ๋ ์ฌ์ฉํ ์ ์์ผ๋ networking.k8s.io/v1 ๋ก ๋ณ๊ฒฝํ๋ผ๊ณ ๋ช ์๋์ด ์์ต๋๋ค.
๋๊ฐ์ ๋ฒ์ ์ ๋ฐ๋ผ ๋ณ๊ฒฝ์ ์ ์๋ ๋ธ๋ก๊ทธ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://findmypiece.tistory.com/308
โ ๏ธ Warning
๋ง์ฝ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋๋ค๋ฉด ingress ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ฐ๊ณ ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐํด์ ์ค์นํฉ๋๋ค.
```Warning FailedDeployModel 24s (x7 over 3m16s) ingress (combined from similar events): Failed deploy model due to AccessDeniedException: User: arn:aws:sts::060701521359:assumed-role/eksctl-staging-addon-iamserviceaccount-kube-Role1-TNFF6IU9WWLU/1653979665832449172 is not authorized to perform: waf-regional:GetWebACLForResource on resource: arn:aws:waf-regional:ap-northeast-2:060701521359:*/* with an explicit deny in a service control policy
status code: 400, request id: 13eb850c-1cee-4dbe-97b0-cd1916e7cbb3```
์ถ๊ฐ๋ช
๋ น์ด : --set enableWaf=false --set enableWaf2=false --set enableShield=false
(1) Endpoint๋ฅผ ์ง์ ํ๋์ฝ๋ฉํด์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ๋ฒ
Auth ์๋ฒ๋ Redis๋ฅผ ํธ์คํธํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ auth ์๋ฒ๋ NodePort์ด๊ณ , redis๋ ClusterIP๋ก ์๋น์ค ํ๊ธฐ ๋๋ฌธ์ host๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ ์ด์ฃผ์ด์ผ ํฉ๋๋ค.
์ฆ, ๋ก์ปฌ์์์๋ Auth server์ ํธ์คํธ๋ฅผ 127.0.0.1๋ก ์ฃผ์๋ค๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ์์์๋ Redis Service์ endpoint ์ฃผ์๋ก ๋ฃ์ด์ผ ํฉ๋๋ค.
> kubectl describe service redis-service
Name: redis-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=redis
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.100.161.238
IPs: 10.100.161.238
Port: redis 6379/TCP
TargetPort: 6379/TCP
Endpoints: 192.168.115.20:6379
Session Affinity: None
Events: <none>
kubectl describe service redis-service
describe ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ ์ป์ endpoint ์ฃผ์๋ฅผ auth ์๋ฒ์ host๋ก ๋ฃ์ด์ค๋๋ค.
ํน์ ๋ค์๊ณผ ๊ฐ์ด ์ฐพ์ ์ ์์ต๋๋ค.
> kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.49.2:8443 54m
redis 172.17.0.3:6379 22s
(2) redis์ endpoint๋ ๋ฐ๋ ์ ์์ผ๋ endpoint๋ฅผ ๊ณ ์ ์์ผ์ค ์ ์์ต๋๋ค.
//redis-endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
# the name here should match the name of the Service
name: redis
subsets:
- addresses:
- ip: ์ํ๋ IP ์ฃผ์
ports:
- port: 6379
# auth-server/app.js
const Redis = require('ioredis');
const express = require('express');
//const axios = require('axios');
const bodyParser = require('body-parser');
const port = 3005;
const redis_client = new Redis({
host : '192.168.115.20',
port : '6379'
});
(3) ๋๋ฉ์ธ์ผ๋ก auth์๋ฒ์ Redis๋ฅผ ์ฐ๊ฒฐ ์ ํฌ ์๋ ์์ต๋๋ค
const client = redis.createClient({
host: "redis.default.svc.cluster.local",
//์๋น์ค์ด๋ฆ.๋ค์์คํ์ด์ค.svc.ํด๋ฌ์คํฐ ๋ด์์ ์ฌ์ฉ๊ฐ๋ฅํ ์ต์์ ๋๋ฉ์ธ
port: 6379,
})
api-service.default.svc.cluster.local
api-service๋ ์๋น์ค์ ์ด๋ฆ์ ๋ปํ๋ค.
default๋ ํด๋น ์๋น์ค๊ฐ ์ํ ๋ค์์คํ์ด์ค์ด๋ค.
svc๋ ์๋น์ค๋ฅผ ๋ปํ๋ฉฐ, ์ ๊ทผํ๊ณ ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ๋ํ๋ธ๋ค.
cluster.local์ ํด๋ฌ์คํฐ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์์ ๋๋ฉ์ธ์ด๋ค.
๊ฐ๋จํ ๋งํ๋ฉด, ์ ๊ทผํ๊ณ ์ ํ๋ ์๋น์ค์ ์ด๋ฆ๊ณผ ๋ค์์คํ์ด์ค๋ง ์๋ค๋ฉด ์ด๋ ๊ฒ ์กฐํฉ๋ ๋๋ฉ์ธ์ ํตํด ํด๋น ์๋น์ค์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
kubectl logs ~ -> ํ๋ ๋ํด ๋ก๊ทธ ๊ธฐ๋ก์ ๋ณผ ์ ์์ต๋๋ค.
kubectl describe ~ -> ๋ํ๋ก์ด๋จผํธ, ์๋น์ค์ ๋ํ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get all -> pod ๋ฐ service, ๋ ํ๋ฆฌ์นด์
์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
kubectl describe ingress ~ -> ingress์ ๋ํ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
kubectl exec -it redis -- redis-cli redis๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ๋์ ์ง์ ์ฐ๊ฒฐํด์ PING์ ๋ ๋ ค๋ณผ ์ ์์ต๋๋ค.
kubectl get ns -> ๋ชจ๋ ๋ค์์คํ์ด์ค๋ฅผ ๋ถ๋ฌ ์ต๋๋ค.
kubectl port-forward pod/auth-server-76ffb98979-cfmmc 3005:3005 -> ํ๋๋ฅผ ํฌํธํฌ์๋ฉ์ผ๋ก ๋ก์ปฌํธ์คํธ์์ ๋
ธ์ถ์ํต๋๋ค.
ArgoCD๋ฅผ ์ค์นํ๋ ๋ฒ์ ArgoCD ํํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋๋ค.
ArgoCD ๊ณต์ํํ์ด์ง
๊ทธ๋ฌ๋ githube์ ํ๋ผ์ด๋น ๋ ํ์งํ ๋ฆฌ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ pubํค๊ฐ ํ์ํฉ๋๋ค.
โ ๏ธ Warning
sshํค๋ id_ed25519๊ฐ ํ์ํฉ๋๋ค.
ํค ์ค์น๋ ๋ค์์์ ํ์ธํ ์ ์์ต๋๋ค.
https://gist.github.com/hrdtbs/ba50868d7d608b89f958fe32dc35fdd4
์์ฑํ pubํค๋ฅผ ๊นํ๋ธ setting -> Deploy keys ์ ๋ฑ๋กํฉ๋๋ค.
ํ๋ผ์ด๋น ๋ ํ์งํ ๋ฆฌ์ ์ฐ๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
argocd repo add git@๋ ํ์งํ ๋ฆฌ --ssh-private-key-path ~/.ssh/id_ed25519 --name id_ed25519
์์
argocd repo add git@github.com:devops-team-AltF4/Kubernetes.git --ssh-private-key-path ~/.ssh/id_ed25519 --name id_ed25519
๋ณธ ๋ ํ์งํ ๋ฆฌ ์ฒ๋ผ k8s์์ deployment, service, ingress ๋ค์ ๋ฃ์ด๋ฃ๊ณ ์์ฑํ์๊ธธ ๋ฐ๋๋๋ค.
argoCD์์ path์ค์ ํ ๋ ๋ ํ์งํ ๋ฆฌ ์์ ํด๋๋ง ๋ณผ ์ ์๊ฒ ๋ฑ๋กํ๊ธฐ ์ํจ์ ๋๋ค.
$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55d
$ kubectl get all -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55d <none>
$ kubectl get all -o wide -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55d <none>
-n ์ ๋ค์์คํ์ด์ค ์ฝ์๋ก ๋ค์์คํ์ด์ค๋ฅผ ์ง์ ํ๋ ์ต์
namespace ๋ด ๊ฐ์ ์ด๋ฆ์ ํ๋๋ ๋ถ๊ฐ๋ฅ ํ๋ฉฐ ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋ผ๋ฉด ๊ฐ์ ์ด๋ฆ์ ํ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Namespaces ๋ ๋์ผํ ๋ฌผ๋ฆฌ ํด๋ฌ์คํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฌ๋ฌ ๊ฐ์ ํด๋ฌ์คํฐ๋ฅผ ์ง์ํ๋ฉฐ, ์ด๋ฐ ๊ฐ์ ํด๋ฌ์คํฐ๋ฅผ ๋ค์์คํ์ด์ค๋ผ๊ณ ํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ด์์ ๋ ผ๋ฆฌ์ ์ธ ๋ถ๋ฆฌ ๋จ์ ์ด๋ฉฐ ์ฟ ๋ฒ๋คํฐ์ค์ Namespace ๋ณ๋ก ๋ฆฌ์์ค๋ฅผ ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
eksctl delete cluster --name ํด๋ฌ์คํฐ์ด๋ฆ --region ap-northeast-2
