예를 들어, 배포해야 할 웹 서버가 있습니다. 웹 서버의 인스턴스가 많이 필요한 상황입니다. 그리고 애플리케이션의 새로운 버전이 나올때마다 Docker 인스턴스를 원활하게 업그레이드하고 싶습니다. 이때 모든 인스턴스를 한번에 업그레이드할 경우 유저에게 영향을 미칠 수 있기 때문에 하나씩 업그레이드하고 싶습니다. 이러한 업그레이드를 ‘롤링 업데이트’ 라고 합니다.
만약 업그레이드를 하다 오류가 발생하면, 최근 변경 사항들을 ‘롤백’해야 할 것입니다.
이러한 기능을 Kubernetes Deployment로 사용할 수 있습니다.
지금까지 배웠던 것을 한번 되짚어보겠습니다. 애플리케이션이 담긴 컨테이너는 파드에 캡슐화됩니다. 파드를 여러 개 보장해주는 역할로 ReplicaSet을 사용했습니다. 그리고 이제 배우는 Deployment는 ReplicaSet보다 한단계 더 높은 계층 구조에 있습니다. (Deployment를 생성하면 ReplicaSet이 자동으로 생성됩니다)
Deployment는 원활한 업그레이드를 위해 롤링 업데이트 사용, 롤백, 중지, 재개하는 기능을 제공합니다.
Deployment는 어떻게 생성할까요? 이전 컴포넌트들과 마찬가지로 Definiton File을 생성합니다.
Deployment의 Definition File은 ReplicaSet Definition File에서 kind
부분만 다르고 동일합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLabels:
type: front-end
Definition file이 완료되면, 아래 커맨드로 Deployment를 생성합니다.
kubectl create -f deployment-definition.yaml
생성한 Deployment는 아래 커맨드로 확인할 수 있습니다.
kubectl get deployment
Deployment는 자동으로 ReplicaSet을 만듭니다. ReplicaSet을 확인하는 커맨드는 아래와 같습니다.
kubectl get replicaset
replicasets은 또한 파드를 만듭니다. 파드는 아래와 같이 확인할 수 있습니다.
kubectl get pods
모든 오브젝트를 한번에 보고 싶다면, 아래 커맨드를 입력하면 됩니다.
kubectl get all
이미 경험한 것과 같이, YAML file을 만들고 편집하는 것은 다소 어렵습니다. 특히 CLI환경에서는 더 그러지요. 시험 중에, 브라우저에서 터미널로 YAML파일을 복붙하기가 어려울 수 있습니다. kubectl run command
를 사용하면 YAML template을 생성하는 데 도움이 될 수 있습니다. 그리고 때로는, YAML파일을 만들 필요 없이, kubectl run 커맨드로만 해결이 가능한 경우도 있습니다.
예를 들어 특정 이름과 이미지를 사용하여 파드나 Deployment를 생성하라는 요청을 받았을 때에는 간단하게 kubectl run command로만 해결이 가능하겠지요.
kubectl run nginx --image=nginx
kubectl run nginx --image=nginx --dry-run=client -o yaml
kubectl create deployment --image=nginx nginx
kubectl create deployment --image=nginx nginx --dry-run=client -o yaml
kubectl create deployment --image=nginx nginx --dry-run=client -o yaml > nginx-deployment.yaml
kubectl create -f nginx-deployment.yaml
kubectl create deployment --image=nginx nginx --replicas=4 --dry-run=client -o yaml > nginx-deployment.yaml
테스트 통과 완료