AWS ECR์ Amazon Elastic Container Registry๋ก AWS์ ๊ด๋ฆฌํ ๋ ํฌ์งํ ๋ฆฌ ์๋น์ค์ด๋ฉฐ, ๋์ปค ํ๋ธ ๋ ํฌ์งํ ๋ฆฌ์ ๋น์ทํ ์ญํ ์ ์ํํ๋ฉฐ eks์์ ๋ ํฌ์ ์ฌ๋ฆฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด ๋ฐ์์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ ์๋ค.
ECR์ aws์ private repository์ด๋ฏ๋ก IAM ์ธ์ฆ์ด ํ์ํ๋ฐ AmazonEC2ContainerRegistryReadOnly ์ ์ฑ ์ ํด๋ฌ์คํฐ์ ๋ฃ์ผ๋ฉด EKS์์ ECR์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
ECR ์์ฑ
# ecr ์์ฑ
aws ecr create-repository --repository-name test-repo
# private url ํ์ธ
aws ecr describe-repositories --repository-name test-repo \
--query "repositories[0].repositoryUri" --output text
์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฆด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
Nginx ์ด๋ฏธ์ง ์ค๋น
FROM nginx:alpine
RUN echo "<h1>Nginx Test Image</h1>" > /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
๊ฐ๋จํ nginx ๋์ปค ํ์ผ์ ์์ฑํ๋ค.
ECR ์ด๋ฏธ์ง ์ ๋ก๋
# nginx-test ๋์ปคํ์ผ๋ก ์ด๋ฏธ์ง ์์ฑ
docker build -t nginx-test .
# ecr private url๋ก ํ๊ทธ ๋ณ๊ฒฝ
docker tag nginx-test:latest 'ecr private url'
# ์ด๋ฏธ์ง ์ด๋ฆ ํ์ธ
docker images
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
private url๋ก ํ๊น
๋ nginx ์ด๋ฏธ์ง latest 4fea55037bdf 14 minutes ago 47.9MB
nginx-test latest 4fea55037bdf 14 minutes ago 47.9MB
# ecr ๋ก๊ทธ์ธ
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 'private url'
docker push 'ecr private url'
# ecr์ ์
๋ก๋ ๋ ์ด๋ฏธ์ง ํ์ธ
aws ecr list-images --repository-name test-repo
{
"imageIds": [
{
"imageDigest": "sha256: ...",
"imageTag": "latest"
}
]
}
ECR์์ ๊ฐ์ ธ์จ ์ด๋ฏธ์ง๋ก eks์ ๋ฐฐํฌ
EKS๊ฐ ECR์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ค์
# eks ํด๋ฌ์คํฐ์ ์ ์ฅ๋ iam ์ ๋ณด
aws eks describe-nodegroup --cluster-name myeks --nodegroup-name myeks-nodegroup \
--query "nodegroup.nodeRole" --output text
arn:aws:iam::~~~/[role name]
# ECR ์ ๊ทผ์ ์ํ IAM Role ์ถ๊ฐ
aws iam attach-role-policy --role-name eks-node-role \
--policy-arn arn:aws:iam::aws:policy/[role name]
EKS ํด๋ฌ์คํฐ๊ฐ ECR ์ด๋ฏธ์ง์ ์ ๊ทผํ๊ธฐ ์ํด์๋ IAM ๊ถํ์ด ํ์ํ๋ฏ๋ก EKS ๋ ธ๋ ๊ทธ๋ฃน์ ์ ์๋ IAM role์ ํ์ธํ๊ณ ์ ์ฑ ์ ์ถ๊ฐํ๋ค. ์ ์์ ์ ํตํด EKS ๋ ธ๋์์ ECR ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋๋ค. docker pull๋ก ๋ค์ด๋ฐ์ ์จ๋ค.
Nginx Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: ecr์ ๋ค์ด๋ฐ์ ์ด๋ฏธ์ง ์ด๋ฆ
ports:
- containerPort: 80
kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-c766c4b59-bx69p 1/1 Running 0 7s
nginx-deployment-c766c4b59-ktnfr 1/1 Running 0 8s
์ผ๋ฏ์ ์์ฑํ๋๋ก 2๊ฐ์ ํ๋๊ฐ ์ฌ๋ผ๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Nginx Service
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
kubectl apply -f nginx-service.yaml
service/nginx-service created
kubectl get svc nginx-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service LoadBalancer 10.x.x.x uuid.ap-northeast-2.elb.amazonaws.com 80:32666/TCP 12s
์ธ๋ถ ์ ๊ทผ์ ์ํด ํ์ ์ ๋ก๋๋ฐธ๋ฐ์๋ก ์ค์ ํ๊ฒ ๋๋ฉด eks์์ AWS Elastic Load Balancer๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
์ด ๋ External-ip๋ ~.elb.amazonaws.com์ DNS ํํ๋ก ํ์๊ฐ ๋๋๋ฐ ELB๊ฐ ํผ๋ธ๋ฆญ ํธ๋ํฝ์ ๋ฐ์์ ๋ด๋ถ EKS nginx pod๋ก ํธ๋ํฝ์ด ์ ๋ฌ๋๋ค.
์์ฑ๋ ์๋น์ค์ external ip๋ก ์ ์ํด๋ณด๋ฉด ๋ฐฐํฌํ nginx๊ฐ ์ ๋๋ก ์ ๊ทผ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ ์ ๋ฆฌ
๋ฐฐํฌํ ๋ฆฌ์์ค ์ญ์
# ๋ฐฐํฌํ ์๋น์ค, ELB ์ญ์
kubectl delete svc nginx-service
# ํ๋, ๋ ํ๋ฆฌ์นด์
์ญ์
kubectl delete deployment nginx-deployment
์ด๋ฏธ์ง, ecr ๋ ํฌ ์ญ์
# ์ด๋ฏธ์ง ์ญ์
aws ecr batch-delete-image --repository-name test-repo --image-ids imageTag=latest
# ecr ๋ ํฌ ์ญ์
aws ecr delete-repository --repository-name test-repo --force
EKS ํด๋ฌ์คํฐ ์ญ์
eksctl delete cluster --name myeks
aws cloudformation delete-stack --stack-name myeks
delete cluster๋ฅผ ํ๋ฉด waiting for CloudFormation stack ๋ถ๋ถ์์ ๊ฝค ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง 10๋ถ ์ ๋ ๊ธฐ๋ค๋ฆฌ๋ ์ญ์ ๊ฐ ๋์๋ค.
'Infra > AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AEWS] # 2์ฃผ์ฐจ aws ๋ก๋๋ฐธ๋ฐ์ ์ปจํธ๋กค๋ฌ์ ์ธ๊ทธ๋ ์ค ํธ๋ํฝ ๋ถ์ (4) (0) | 2025.02.16 |
---|---|
[AEWS] # 2์ฃผ์ฐจ eks vpc cni ์ดํดํ๊ธฐ (3) (0) | 2025.02.16 |
[AEWS] # 2์ฃผ์ฐจ eks vpc cni ์ดํดํ๊ธฐ (2) (0) | 2025.02.16 |
[AEWS] # 2์ฃผ์ฐจ eks vpc cni ์ดํดํ๊ธฐ (1) (1) | 2025.02.16 |
[AEWS] #1์ฃผ์ฐจ EKS ํด๋ฌ์คํฐ ๋ฐฐํฌ ์ค์ต, ์๋ํฌ์ธํธ ์ก์ธ์ค ์ค์ (1) (0) | 2025.02.06 |