| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- JdbcTemplate
- Web
- JPA
- @Transactional
- dockerhub
- Routing Key
- @ComponentScan
- redis
- docker compose
- 서블릿 컨테이너
- Spring
- MSA
- docker
- 컨테이너
- Spring Container
- AWS
- DI
- kafka
- 지연 로딩
- Spring Data JPA
- Dead Letter Queue
- CORS
- 쿠버네티스
- JWT
- JPQL
- mybatis
- 스프링 부트
- securitycontextholderfilter
- DLQ
- 페이징
- Today
- Total
look-forest
AWS EC2에서 쿠버네티스를 활용해 서버 배포하기 본문
k3s란?
쿠버네티스(k8s)의 경량 버전으로, 설치가 간단하며 컴퓨팅 리소스를 훨씬 적게 먹는다.
그리고 실제 프로덕션 환경에서 종종 사용하기도 한다.
k3s를 사용하는 이유
쿠버네티스의 학습을 가로막는 요소는 크게 2가지가 있는데, k3s를 사용하면 아래 2가지 단점을 해결할 수 있다.
- 복잡한 설치 과정
Devops 엔지니어라고 할지라도 k8s를 직접 설치하는 일은 드물다. AWS 자체에서 k8s 서비스(EKS)를 제공하기 때문이다. - EC2 인스턴스를 3대 만들어야 한다는 비용적 부담
AWS EC2에서 쿠버네티스를 활용해 서버 배포하기
EC2에서 도커/쿠버네티스 설치하기 (k3s)
- k3s의 권장 설치 사양이 CPU 2 core, RAM 1 GB이다.
백엔드 서버도 같이 실행시킬 것을 고려해 AWS EC2 인스턴스는 t4g.small로 생성하자. - 외부에서 접속할 수 있도록 보안그룹을 추가해 30000-30002번 포트를 열어주자.
- 생성된 EC2에 접속해서 Docker와 k3s를 설치한다
$ curl -sfL https://get.k3s.io | sh - # k3s 설치
$ sudo chmod 644 /etc/rancher/k3s/k3s.yaml # 권한 부여
$ sudo kubectl version # k3s 잘 설치됐는 지 확인
디플로이먼트, 서비스를 활용해 웹서버(Nginx) 띄워보기
로컬에서 했던 것과 완전히 동일하다.
매니페스트 파일(deployment.yaml, service.yaml)을 작성하고 실행시킨다.
외부 포트를 열었으므로 EC2 ip에 30000번 포트로 접속이 잘 됨을 확인할 수 있다.
백엔드(Spring Boot) 서버 배포하기, DB 연동하기 (+ RDS, ECR)
EC2에 k3s를 활용해 백엔드(Spring Boot) 서버를 배포하고, 백엔드 서버에 DB(MySQL)도 연동시켜보자.
로컬 환경에서의 아키텍처

배포 환경에서의 아키텍처

- 로컬에 도커 이미지를 저장하지 않고, 외부 저장소인 AWS ECR에 도커 이미지를 저장한다.
- 로컬의 데이터베이스를 사용하지 않고, 외부 데이터베이스인 AWS RDS를 사용한다.
1. RDS, ECR(Elastic Container Registry)생성하기
2. 백엔드(Spring boot) 서버 프로젝트, 매니페스트 파일 구성하기
3. 백엔드 서버 빌드한 후 ECR로 Push하기
1) 로컬 환경에 AWS CLI 설치
: 쉘 커맨드를 사용하여 AWS 서비스와 상호 작용할 수 있는 도구
2) AWS에 연결할 수 있도록 Access Key 발급받기


3) AWS CLI로 액세스 키 등록
$ aws configure
AWS Access Key ID [None]: <위에서 발급한 Key id>
AWS Secret Access Key [None]: <위에서 발급한 Secret Access Key>
Default region name [None]: ap-northeast-2
Default output format [None]:
4) ECR에 도커 이미지 Push
jar 생성 후, ECR의 생성한 레포지토리에 들어가서 푸시 명령어 확인하고 수행(ECR 로그인-> 이미지 빌드 -> 태그 -> 푸시)
※ 이때 EC2의 아키텍처와 ECR의 아키텍처에 맞춰 이미지를 빌드한 후 push해야 한다.
(EC2가 arm64, ECR이 linux/amm64여서 이미지 pull이 안되었다)
docker buildx build --platform linux/arm64 -t kube-ecr .

4. EC2가 ECR로부터 이미지를 Pull 받아올 수 있게 권한 부여하기
1) EC2에 접속해서 AWS CLI 설치하기
2) IAM 사용자 만들고 엑세스 키 발급받기
(IAM: AWS 리소스에 대한 액세스 관리)
3) AWS CLI로 액세스 키 등록하기
4) 확인을 위해 ECR의 레포지토리 페이지에 들어가서 푸시 명령어 첫번째(로그인) 복사한 후 실행시켜보기
-> EC2에서 ECR로의 접근은 된 것이다. 하지만 쿠버네티스가 ECR로 접근하는 것은 추가적인 요소가 필요하다.
5) 쿠버네티스가 ECR로부터 이미지를 받아올 때 인증할 수 있도록 Secret 추가하기
$ kubectl create secret generic regcred --from-file=.dockerconfigjson=/home/ubuntu/.docker/config.json --type=kubernetes.io/dockerconfigjson
# 잘 생성됐는 지 확인
$ kubectl get secret
- kubectl create secret : 시크릿(Secret) 만드는 명령어
- generic : 시크릿(Secret)의 타입 중 하나 (= Opaque)
- regcred : 시크릿(Secret) 이름
- dockerconfigjson : 이미지 풀 인증 정보
5. EC2에서 쿠버네티스로 백엔드(Spring Boot) 서버 띄우기
1. 매니페스트 파일 클론받기
매니페스트 파일을 통해 백엔드 서버를 실행시킬 이미지를 다운받아와서 실행시키므로 Spring Boot에 관련된 파일은 필요없다.
2. Deployment, ConfigMap, Secret 파일 수정하기

ConfigMap과 Secret에는 RDS 연결 정보(Host, username, password) 등을 적는다.
3. 매니페스트 파일을 통해 오브젝트 생성

EC2에 배포된 백엔드(Spring Boot) 서버 업데이트하기
1. 소스코드 변경 후 jar 빌드
2. ECR에 도커 이미지 Push
3. deployment.yaml 에 이미지 태그 변경
4. 변경된 deployment 적용
참고 자료 & 이미지 출처
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
'Infra > Kubernetes' 카테고리의 다른 글
| AWS EKS를 활용해 서버 배포하기 (0) | 2026.02.04 |
|---|---|
| 볼륨(Volume)을 활용해 DB 띄워보기 (0) | 2026.02.01 |
| 컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 관리하기 (0) | 2026.01.31 |
| 디플로이먼트(Deployment), 서비스(Service)를 활용해 서버 띄워보기 (0) | 2026.01.28 |
| 파드(Pod)를 활용해 서버 띄워보기 (0) | 2026.01.26 |