본문 바로가기
k8s

k8s #2 무중단 배포 기초

by PudgeKim 2021. 11. 22.

위 같은 그림의 k8s 아키텍쳐가 있을 때 만약 bug fix나 업그레이드 등을 하고 싶다면 서버를 내렸다 다시 올려야하므로 
유저 입장에서는 이용을 하지못하는 시간이 발생하게 됩니다.

이런 문제를 release label을 이용하여 해결할 수 있습니다.

 

위처럼 우선은 service가 release0에 해당하는 pod을 가리키게 하다가 새로운 버젼인 release1의 pod이 준비가 끝나면
service가 release1을 가리키게하면 됩니다.

service가 pod을 가리키는 것을 바꾸는 것은 매우 짧은 시간이기 때문에 유저 입장에서는 중단되는 느낌을 받기는 어렵습니다.

 

코드의 경우는 아래와 같습니다. (전체 코드가 아닌 release의 관련된 코드 일부입니다.)

 

1
2
3
4
5
metadata:
  name: webapp
  labels:
    app: webapp
   release: "0"
cs

pod에 release label을 붙여줍니다.

 

1
2
3
4
spec:
  selector:
    app: webapp
   release: "0"
cs

service 역시 가리키려는 pod의 release 번호를 함께 붙여주면 됩니다.

** yaml 파일 특성상 0에 ""를 붙여줍니다.

 

여러개의 pod컨테이너를 띄우고 각 pod의 release 버젼을 보고 싶다면 아래 명령어를 입력하면 됩니다.

1
kubectl get po --show-labels
cs

 

특정 release에 해당하는 pod만 보고 싶다면 아래 명령어입니다.

1
kubectl get po --show-labels -l release=0
cs

release=0에 해당하는 pod만 보여주게 됩니다.

'k8s' 카테고리의 다른 글

k8s #5 networking&namespace  (0) 2021.11.24
k8s #4 Deployment&Rollout  (0) 2021.11.23
k8s #3 ReplicaSets  (0) 2021.11.22
k8s #1 hello world  (0) 2021.11.22