'15단계로 배우는 도커와 쿠버네티스' 기반으로 내용 정리하였습니다.
디플로이먼트가 백엔드의 워크로드에 적합하다고 설명했다. ( FLO 서비스에 적합하군! )
주된 역할은
파드의 개수를 관리하는 것이다.
: K8s 클러스터에서는 파드가 서버의 역할을 담당한다. 그래서 처리 능력을 높이고 싶은 경우에는 파드의 수를 늘리면 된다. 파드의 개수를 관리하는 것은 시스템의 처리 능력, 서비스를 중간하지 않는 가용성, 그리고 비용 측면에서 매우 중요하다.
디플로이먼트는 요청한 개수만큼 파드를 기동하며, 장애 등의 이유로 파드의 개수가 줄어들면 새롭게 파드를 만들어 기동한다. 그리고 애플리케이션의 버전을 업그레이드 할 때 새로운 버전의 파드로 조금씩 바꾸는 기능도 제공한다.
로드밸런서에 해당하는 기능은 디플로이먼트에 포함되어 있지 않다. 이기능은 서비스가 담당하고 있다.
( 요청을 각 파드에 분산하여 처리하는 행위를 말함 )
디플로이먼트는 레플리카셋과 함께 동작한다.
레플리카셋은 디플로이먼트의 매니페스트에 적힌 레플리카의 값을 기준으로 파드의 개수를 제어한다.
8.1 디플로이먼트의 생성과 삭제
생성
kubectl apply -f <YAML_파일명>
삭제
kubectl delete -f <YAML_파일명>
디플로이먼트 생성 YAML 파일
piVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test-deployment
spec:
replicas: 3
selector:
matchLabels:
app: test-deployment
template:
metadata:
labels:
app: test-deployment
spec:
containers:
- name: test-deployment
image: nginx:1.7.9
ports:
- containerPort: 80
[디플로이먼트 사양]
[파드 템플릿]
8.2 스케일 기능
레플리카의 값을 변경하여 파드의 수를 조절하여 처리 능력을 높이거나 낮추는 기능을 말한다.
수동과 오토 스케일 기능이 존재한다.
replicas 값을 조절하여 apply 시, 지정한 값 대로 파드의 개수가 조절된다.
(우리는 오토 스케일 기능을 쓰겠지..?)
8.3 롤아웃 기능
쿠버네티스에서 롤아웃은 컨테이너의 업데이트를 의미한다.
롤아웃을 하기 위해서는 사전에 새로운 이미지를 빌드하고, 리포지터리에 등록해 놓아야 한다.
새로운 이미지를 매니페스트의 image 항목에 기재하고
'kubectl apply -f'
를 적용하면 롤아웃이 시작된다.
8.4 롤백 기능
쿠버네티스에서 롤아웃 전에 사용하던 예전 컨테이너로 되돌리는 것을 의미한다.
롤백을 할 때도 롤아웃과 마찬가지로 사용자의 요청을 처리하면서 파드를 점진적으로 교체한다.
데이터까지 롤백되는 것은 아니므로 데이터 리커버리는 별도로 구현해야 한다.
kubectl rollout undo deployment web-deploy
한 줄의 명령어로 롤아웃 취소가 가능하다!
8.5 파드의 IP 주소가 변경되는 경우와 아닌 경우
파드 재가동 시에는 IP 주소가 변경된다 . 즉, 스케일 / 롤아웃 / 롤백 다 해당한다.
컨테이너 재가동 시에는 IP 주소가 변경되지 않는다.
8.6 자동 복구
파드 내에 컨테이너가 어떤 이유로 종료한 경우, 기본 동작으로 파드가 컨테이너를 재시작한다.
즉, 파드는 컨테이너 수준의 장애에 대해 자동복구를 시도한다.
이에 반해 디플로이먼트의 자동 복구 기능은 파드 단위로 복구한다.
디플로이먼트는 성급하게 복구를 시도하지 않으며 천천히 신중하게 동작하도록 만들어졌다.
마무리
[ 이번 스텝에서 새로 사용한 kubectl 명령어 ]