Spring Boot 모놀리식 서버와 Spring Cloud MSA 서버를 AWS EKS에 배포하는 전체 과정을 실습 중심으로 정리하였다.
CI/CD 자동화, 오토스케일링, ArgoCD, 모니터링까지 포함하여 프로덕션 수준 배포 환경을 구축 예정
ALTER DATABASE ordermsa CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 346903264902.dkr.ecr.ap-northeast-2.amazonaws.com/bradkim/ordersystemdocker build -t 346903264902.dkr.ecr.ap-northeast-2.amazonaws.com/bradkim/ordersystem:latest -f ./2.ordersystem/Dockerfile ./2.ordersystem
docker push 346903264902.dkr.ecr.ap-northeast-2.amazonaws.com/bradkim/ordersystem:latestSecret 생성
kubectl create secret generic <secret명>
ex) kubectl create secret generic ordersystem-secrets --from-literal=DB_HOST=<your-db-host> --from-literal=DB_USERNAME=<your-db-username> --from-literal=DB_PW=<your-db-username> --from-literal=AT_SECRET_KEY=xxxx --from-literal=RT_SECRET_KEY=yyyy -n my-namespacekubectl get secret <secret명> -o yaml 또는 콘솔에서 조회kubectl delete secret ordersystem-secretsspring서버 pod/svc 적용
Ingress 자원 적용
인증서 발급 흐름
cert-manager 생성
cert-manager는 Kubernetes에서 Certificate자원을 인지하고, TLS 인증서를 자동으로 발급, 갱신 및 관리하는 컨트롤러
cert-manager를 위한 namespace 생성
kubectl create namespace cert-manager
cert-manager CRDs 설치
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.5.0/cert-manager.crds.yaml
cert-manager 배포
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.5.0/cert-manager.yaml
ClusterIssuer 생성
Certificate 생성
kubectl describe certificate <Certificate이름> -n <Namespace이름>github레포를 본인 repo로 업로드
.git폴더 삭제git initgit remote add origin new레포주소github secret에 중요 정보 추가
코드 github에 push
git add .
git commit -m "메시지"
git checkout -b main
git push origin main
적용절차
1. deployment 설정
메트릭 서버 설치
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yamlHPA 스크립트 생성 후 적용
메트릭 서버와 HPA를 통한 pod 현황 조회
kubectl get hpa brad-order-backend-hpa -n bradkim -w
부하 테스트
kubectl exec -it 파드명 -- /bin/shapk add --no-cache curlwhile true; do curl -s http://brad-order-backend-service/product/list; done작업 진행 개요
작업 진행
NodeGroup(ASG)에 태그 추가
k8s.io/cluster-autoscaler/enabled → truek8s.io/cluster-autoscaler/<클러스터이름> → ownedID 제공업체 추가
iam에 역할 생성
IAM Role을 생성하고 이를 cluster-autoscaler Pod에 부여함으로서, EKS 및 EC2 ASG에 접근하여 노드를 자동으로 증감시킬 수 있도록 설정
신뢰할 엔터티 선택에서 신뢰할 엔터티 직접 설정
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AWS_ACCOUNT_ID>:oidc-provider/<YOUR_EKS_OIDC_PROVIDER>"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"<YOUR_EKS_OIDC_PROVIDER>:sub": "system:serviceaccount:kube-system:cluster-autoscaler"
}
}
}
]
}역할에 아래 정책 추가
cluster-autoscaler pod 실행
아래 yml 파일 다운로드
https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
yml파일 주요 수정사항
role 부분에 위에서 만든 iam을 annotations부분에 추가
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-addon: cluster-autoscaler.addons.k8s.io
k8s-app: cluster-autoscaler
name: cluster-autoscaler
namespace: kube-system
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::148761635844:role/autoscale-role
이미지버전변경, cluster-name이름 추가, env 추가
containers:
- image: k8s.gcr.io/autoscaling/cluster-autoscaler:v1.29.0
name: cluster-autoscaler
command:
- ./cluster-autoscaler
- --v=4
- --cluster-name=my-cluster
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/my-cluster
env:
- name: AWS_REGION
value: "ap-northeast-2"
아래 yml파일 kubectl apply
인스턴스 증가 감소 테스트
개요
장점
설치 및 환경구성
argocd관련 네임스페이스 생성
kubectl create namespace argocd
argocd 자원생성
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlargocd관련 application 자원 생성
argocd 테스트
웹UI 접속
로컬대시보드 접속
kubectl port-forward svc/argocd-server -n argocd 8080:443
http://localhost:8080로 접속public대시보드 접속
kubectl edit deployment argocd-server -n argocd
/usr/local/bin/argd-server 아래 줄에 --insecure 추가
containers:
- args:
- /usr/local/bin/argocd-server
- --insecure
메모장 저장후 닫으면 argocd rollout 실행
ingress, https 적용
[https://argo.bradkim198.shop](https://argo.bradkim198.shop) 로 접속
초기 계정 및 비밀번호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}"개요
작업절차
관련 자원 생성
kubectl create namespace monitoring
로컬대시보드 접속
kubectl port-forward svc/grafana 3000:3000 -n monitoring
대시보드 로그인
Grafana에서 Prometheus 연동
대시보드 설정
핵심요소
Gateway (API 게이트웨이)
eureka(서비스디스커버리 )
모듈간 동기통신과 비동기 통신
로컬환경에서 msa 실행시 필요 프로그램
mysql에 스키마 생성
create database ordermsa;
redis 실행
kafka 실행
프로그램 실행
아키텍처
방법1
방법2
배포 작업 절차
이 가이드를 통해 모놀리식 → MSA 전환, GitOps, 오토스케일링, 모니터링까지 완전한 프로덕션 환경을 구축할 수 있습니다!