Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
Kubernetes Deployment
버전 업데이트를 위해 사용한다.
Replica set의 상위 오브젝트로서 생성 시, 대응되는 Replica set도 자동 생성된다. 따라서 Replica set을 생성하는 경우는 거의 없다.
Deployment는 애플리케이션을 업데이트할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백을 가능하게 해주고, 무중단 서비스를 위한 롤링 업데이트 전략을 적용할 수 있다.
하나씩 없애고 v2에 새로 생성한다.
트래픽을 점차 v2 pod들로 옮겨주면, 서비스 중단 없는 무중단 서비스가 실현이 된다.
Deployment 생성해 보기
# deployment.yaml
cat > deployment.yaml
apiVersion: apps/v1
kind: Deployment #Deployment
metadata:
name: deployment-cloud
spec:
replicas: 3
selector:
matchLabels:
app: cloud-nginx-pods
template:
metadata:
name: cloud-nginx-pod
labels:
app: cloud-nginx-pods
spec:
containers:
- name: nginx
image: nginx:latest
리플리카 셋의 상위 오브젝트이기 때문에 리플리카도 같이 생성된다.
k get deployments.apps -o wide
디플로이 정보 확인
k describe deployments.apps deployment-cloud
레플리카의 상위 오브젝트이므로 deployments id는 동일하다.
Replicas의 Desired 개수 늘리기
런타임 중에 replica의 세팅을 변경할 수 있다.
하지만 yaml과 같은 파일은 공통 작업 시에 변경 기록을 남기는 형상 관리가 필요할 것이다.
따라서 직접 세팅 바꾸기보단 yaml로 남겨서 관리해야 좋다.
#Desired 개수 바꾸기
k scale deployment --replicas 5 deployment-cloud
레플리카 셋이 기본 생성되기 때문에 파드를 지워도 여전히 5개가 유지된다.
레플리카 셋을 지워보자.
k delete replicasets.apps –all
여전히 5개로 남는다.
레플리카 셋도 디플로이먼트의 하위 오브젝트이기 때문에 디플로이먼트를 지워야 모두가 지워진다.
k delete deployments.apps deployment-cloud
버전 업데이트
롤링 업데이트를 해보자.
기존 서비스를 유지하면서 변경된 서비스로 이전한다.
# deployment-1.yaml
cat > deployment-1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-nginx
spec:
replicas: 3
selector:
matchLabels:
app: cndk-nginx-pods
template:
metadata:
name: cndk-nginx-pod
labels:
app: cndk-nginx-pods
spec:
containers:
- name: nginx
image: nginx:1.11 #Nginx 버전을 다른 것으로 적용해보자.
#record 옵션으로 레플리카 셋에 대한 정보를 기록한다.
버전을 기록시켜 두면, 특정 버전으로 롤백시킬 때 사용할 수 있다.
k apply -f deployment-1.yaml --record
#동작 중인 이미지의 버전 정보 확인
k get pod -o yaml |grep "image: nginx"
# 롤링 가능한 기록 버전 확인
k rollout history deployment deployment-nginx
# 1초마다 rollout 상태 확인 모니터링
while true; do kubectl rollout status deployment deployment-nginx && echo "--------------" && date; sleep 1; done
# v1.12 로 버전 업데이트 실행
kubectl set image deployment deployment-nginx nginx=nginx:1.12 --record && kubectl get pod -w
kubectl get pod -o yaml | grep "image: nginx"
롤링 업데이트가 새로 진행된다.
점점 기존 버전의 개수를 없애고 새로운 것을 생성한다.
다시 다음 버전으로 업데이트.
kubectl set image deployment deployment-nginx nginx=nginx:1.13 --record && kubectl get pod -w
기존의 파드가 삭제되고 새로운 버전의 파드가 실행되는 것이 확인된다.
버전 롤백
기록해 둔 history로 롤백이 가능하다.
대신 데이터는 다 날아가고, ip변경도 계속 일어난다.
편해 보이는 과정에서도 고려해야 할 것이 상당히 있다.
#롤백 리스트
rollout history deployment deployment-nginx
#특정 리버전 숫자로 롤백
k rollout undo deployment deployment-nginx --to-revision 2
k get replicasets.apps --show-labels
리플리카 셋은 관리 영역이 라벨
2번이 사라지고 6번이 남는다.
'개발 > Kubernetes' 카테고리의 다른 글
Kubernetes Calico CNI 란? (0) | 2024.03.20 |
---|---|
Kubernetes Replicasets 사용하기 (label) (0) | 2024.03.04 |
Kubernetes Pod 상태 체크, Probe, restartPolicy (0) | 2024.03.03 |
Kubernetes Pod 활용하기 (Pause container, label, volume) (0) | 2024.03.03 |
Kubernetes Kubectl 기본 명령어 정리 (0) | 2024.03.03 |