안녕하세요. Gameeye에서 deeplol.gg 서비스를 개발 중인 김철기입니다.
클라우드 서버 인프라 구축, 백엔드 개발, 딥러닝 모델 연구를 담당하고 있습니다.
이번 포스팅에서는 도커 이미지를 AWS ECR에 푸쉬하고 쿠버네티스에서 배포하는 내용을 다루겠습니다. 쿠버네티스 환경 세팅과 관련된 부분은 시리즈의 이전 포스팅에서 다루었으니 참고하시길 바랍니다.
(기본적인 도커 사용법을 숙지하고 있다는 가정하에 진행합니다🙏)
기본적인 도커 사용법: https://kibua20.tistory.com/135
Fastapi 도커 이미지 생성: https://jandari91.github.io/posts/fastapi-docker-build/
앞선 포스팅에서 마이크로 서비스를 컨테이너로 구성하고 컨테이너를 쿠버네티스로 운영하겠다고 했습니다. 먼저 도커 이미지를 ECR에 푸쉬하는 작업을 해보겠습니다.
ECR 리포지토리 생성
AWS 콘솔에서 Amazon ECR > 리포지토리 페이지로 이동해 리포지토리 생성 버튼을 클릭합니다.
리포지토리 이름을 입력한 뒤 리포지토리 생성 버튼을 클릭합니다.
리포지토리 페이지에서 리포지토리의 URI를 확인할 수 있습니다. 리포지토리 URI는 우리가 도커 이미지를 PUSH할 저장소라고 생각하시면 됩니다.
컨테이너 이미지 PUSH
테스트로 사용할 이미지를 빌드하거나 받아옵니다. 해당 포스팅에서는 편의를 위해 pengbai/docker-supermario 이미지를 받아왔습니다. 사용중인 웹서버의 dockerfile이 있으시면 빌드하셔도 됩니다.
docker pull pengbai/docker-supermario
받아온 이미지의 태그명을 리포지토리 URI로 설정합니다.
docker tag "이미지명" $ACCOUNT_ID.dkr.ecr."리전명".amazonaws.com/"리포지토리 이름"
aws ecr에 접근하기 위해 aws 인증이 필요합니다. 엑세스키와 시크릿키를 입력해서 인증하고 환경변수를 설정합니다.
aws configure
export ACCOUNT_ID=$(aws sts get-caller-identity --output text --query Account)
echo "export ACCOUNT_ID=${ACCOUNT_ID}" | tee -a ~/.bash_profile
aws ecr에 로그인합니다.
aws ecr get-login-password --region "리전명" | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr."리전명".amazonaws.com
aws ecr에 컨테이너 이미지를 PUSH합니다.
docker push $ACCOUNT_ID.dkr.ecr."리전명".amazonaws.com/"리포지토리 이름"
aws 콘솔에서 이미지가 정상적으로 PUSH된것을 확인할 수 있습니다👌
mario.yaml 파일을 작성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: mario
labels:
app: mario
spec:
replicas: 1
selector:
matchLabels:
app: mario
template:
metadata:
labels:
app: mario
spec:
containers:
- name: mario
image: {}.amazonaws.com/mario-test ### ecr URI를 입력하세요.
---
apiVersion: v1
kind: Service
metadata:
name: mario
spec:
selector:
app: mario
ports:
- port: 80
protocol: TCP
targetPort: 8080
type: LoadBalancer
복사 + 붙여넣기 하셔도 되는데 아랫부분의 image는 본인의 ecr URI로 바꿔주셔야 합니다.
spec:
containers:
- name: mario
image: {}.amazonaws.com/mario-test ### ecr URI를 입력하세요.
작성한 yaml 파일로 서비스를 실행시킵니다.
kubectl apply -f mario.yaml
EXTERNAL-IP로 접근해 정상적으로 실행되는지 확인합니다.
kubectl get svc
컨테이너 이미지를 만들고 ECR에 올리고 쿠버네티스에서 배포까지 해봤습니다. 성공적으로 배포된 웹페이지를 보니 뿌듯하네요. 그런데 로드밸런서가 발급해준 링크가 난잡해보입니다. 다음 포스팅에서는 external-dns를 사용하여 route53과 연동하여 https도 적용하고 직접 구입한 도메인도 적용해보도록 하겠습니다. 잘못된 부분이 있거나 궁금한 부분이 있으시면 댓글 남겨주세요⭐
https://kibua20.tistory.com/135
https://jandari91.github.io/posts/fastapi-docker-build/
https://devocean.sk.com/blog/techBoardDetail.do?ID=163578#none