많은 사람이 "K8s는 컨테이너를 관리한다"고 생각하지만, 사실은 K8s는 Pod를 관리한다.
Spring Boot 컨테이너 1개만 들어가지만, 로그 수집기나 프록시 같은 보조 컨테이너(Sidecar)를 옆에 끼워서 같이 띄울 수도 있다.
ArgoCD 화면에서 api-deployment-xxxxx 같은 이름으로 여러 개 보였던 녀석들이다.
우리가 작성하는 YAML 파일의 90%는 바로 이 Deployment이다.
이제 "Deployment"가 어떻게 생겼는지 코드로 보자.
주석을 통해 각 설정이 Spring Boot 앱에 어떤 영향을 주는지 설명해 두었다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: api # 앱 이름
spec:
replicas: 2 # 서버 2대 띄워줘 (Scale-out)
selector:
matchLabels:
app: api # 이 라벨이 붙은 Pod를 관리할게
template:
metadata:
labels:
app: api
spec:
containers:
- name: api-container
image: my-repo/api:v2.0.0 # 배포할 버전
ports:
- containerPort: 8080
# 중요! 헬스 체크 (이게 없으면 배포 중 에러 나도 보름)
readinessProbe: # 요청 받은 준비 됐는지 확인
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30 # 앱 뜨는데 30초 기다려줘
livenssProbe:
httpGet:
path: /actuator/health
port: 8080
개발자가 이미지 태그를 v1에서 v2로 바꾸고 kubectl apply를 하면 무슨 일이 벌어질까?
ReadinessProbe (헬스 체크)를 통과해서 "준비 완료" 상태가 되면,