롤링 배포 전략?
- 롤링 배포란 무중단 배포를 구현하기 위한 배포 전략 중 하나
- 한 번에 N개의 서버(Pod)를 업데이트하면 어떻게 될까?
- 모든 Pod를 내린 후 새로운 버전의 Pod를 띄우면, 잠깐의 Down-time(유저들이 서비스에 접속할 수 없는 상태)가 생긴다.
- Pod를 하나씩 순차적으로 교체하는데, 다음으로 교체할 Pod는 이전에 교체한 Pod가 정상 작동하는 이후에 교체를 한다면 Down-time을 최소화할 수 있다.

Deployment 오브젝트는 롤링 배포를 가능하게 해준다.
- 롤링 배포를 일일이 하면 매우 번거롭다.
- 여태까지 그래왔든, 당연히 쿠버네티스에는 배포를 위한 오브젝트도 있다. 그것이 바로 Deployment
- Deployment 안에 정의된 ReplicaSet의 스펙을 수정하면, 자동으로 롤링 배포가 이루어진다.
Deployment 오브젝트 만들어보기
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: nginx:1.27.0
ports:
- containerPort: 80

Deployment 업데이트
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: httpd:2.4.61
ports:
- containerPort: 80
과제 실습해보기
과제 안내
- 도커 허브에 업로드되어 있는 아래 이미지를 사용하여 새로운 Deployment를 만들자.
teamspartacontents/k8s_lecture1:third-week-exercise
- 해당 이미지는 3000번 포트에서 웹서버를 개방한다.
- 해당 Deployment의 Pod들과 연결되는 ClusterIP 타입의 Service를 만들자.
- 만들었던 Ingress에
/third-week-exercise 주소로 접속하면, 새로 만든 Service에 접속되도록 한다.
- 안내에 나와있지 않은 조건은 자유롭게 적당한 값으로 설정하여 진행
- Ingress 주소에
/third-week-exercise 경로로 접속하면 아래와 같은 화면이 출력되어야 한다.

과제 해설
- 과제에서 제시된 이미지를 통해 Deployment를 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: third-week-exercise-deployment
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: third-week-exercise-app
template:
metadata:
labels:
app: third-week-exercise-app
spec:
containers:
- name: third-week-exercise-app
image: asia-northeast3-docker.pkg.dev/argon-depth-429113-t7/kube-study-registry/third-week-exercise:1.0.0
ports:
- containerPort: 3000
- ClusterIP 타입의 Service를 아래와 같이 간단하게 생성
apiVersion: v1
kind: Service
metadata:
name: third-week-exercise-svc
namespace: default
spec:
selector:
app: third-week-exercise-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
- 아래와 같이 Intress에 새로운 path를 추가합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
namespace: default
annotations:
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sample-svc
port:
number: 80
- path: /third-week-exercise
pathType: Prefix
backend:
service:
name: third-week-exercise-svc
port:
number: 80