공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/클라우드

[IBM Cloud 강의번역 프로젝트] - ch3-3. Rolling Update

inspirit941 2020. 9. 10. 12:47
반응형

IBM Cloud 1기 활동 - 강의번역 프로젝트.

원본 강의

cognitiveclass.ai/courses/kubernetes-course

 

Kubernetes and containers on IBM Cloud - Free Kubernetes course by IBM Cognitive Class

About this course Containers and Cloud Native are the most significant invention in IT since the introduction of virtualization. Everyone from a small startup to a large multinational corporation is transitioning to this technology and they are looking for

cognitiveclass.ai

강의의 한글자막 제공을 위해 srt 파일로 번역하는 프로젝트를 진행 중입니다.

문맥이 어색하거나 내용이 잘못되었다고 느껴지시면 댓글로 남겨주세요.


 

 

지금까지 Deployment, ReplicaSet과 자동확장 개념을 배웠습니다.

스크린샷 2020-09-07 오후 3 42 40

rolling update 개념을 알아봅시다. 이 개념은 Kubernetes 프로덕션 환경에서 실행되는 애플리케이션의 핵심 기능입니다. ReplicaSet과 자동확장 기능은 서비스 중단시간을 줄이는 핵심이라면, rolling update는 애플리케이션의 수정사항을 pod에 점진적으로 반영하는 과정을 자동화 방식으로 제어합니다. rolling updates는 deployment와 같은 pod 템플릿 설정으로 동작합니다. 또한 뭔가 잘못되었을 때를 대비한 롤백기능도 있습니다.

스크린샷 2020-09-07 오후 3 44 13

애플리케이션에 rolling update 기능을 활성화하는 절차는 다음과 같습니다. 먼저, liveness & readiness Probes설정을 deployment에 추가하세요. deployment가 제대로 '준비'할 수 있게 하는 설정입니다.

스크린샷 2020-09-07 오후 3 45 41

다음으로, yaml 파일에 rolling update 전략을 추가합니다. 여기서는, 10개의 pod을 운영하는 deployment에서 rolling update 전략은 최소 50% 이상의 pod가 작동하고 있도록 설정했습니다. maxSurge의 2라는 값은, 무중단 서비스로 설정하려면, maxUnavailable 값을 0으로 설정하면 됩니다. maxSurge 값이 100%라면, 새 버전의 pod을 생성하고 이전 버전의 pod을 중단할 때까지 실행할 복제본 pod의 개수를 최대 두 배까지 늘리겠다는 뜻입니다. minReadySeconds 값을 설정해서, rollout 단계를 마무리하고 다음 pod으로 넘어가기 전 몇 초 정도를 기다리게 할 수도 있습니다.

스크린샷 2020-09-07 오후 3 58 54

다음은 애플리케이션을 업데이트하는 작업 예제입니다. 원래 애플리케이션은 "Hello world!" 문자를 표시하고 있습니다. ReplicaSet이 3개의 pod을 관리하도록 설정한 Deployment를 생성해둔 상태입니다.

스크린샷 2020-09-07 오후 3 59 02

클라이언트로부터 새로운 요청이 들어왔고, 이제 사용자에게 "Hello world v2!"라는 문자열을 보여줘야 한다고 해 보겠습니다. 다만, 애플리케이션이 중단되어서는 안 된다는 조건이 있습니다. 모든 사용자는 업데이트가 백그라운드에서 진행되는 동안 반드시 하나의 프로그램 버전만 제공되어야 합니다.

스크린샷 2020-09-07 오후 3 59 25

보시다시피, 새로운 소프트웨어는 도커화되었고, docker hub에 "hello-kubernetes upkar/hello-kubernetes:2.0"이라는 태그로 업데이트되었습니다. kubernetes와 관계없이 간단한 docker 명령어로 할 수 있는 일입니다.

스크린샷 2020-09-07 오후 4 01 56

이제 롤아웃이 어떻게 일어나는지 볼 수 있습니다. 첫 번째 명령어로, 현재 세 개의 pod이 있는 걸 확인했습니다. 두 번째 명령어로, 이미지를 docker hub에 태그가 달린 채 등록되어 있는 이미지로 변경합니다. 이미지가 변경되었다는 메시지를 받았습니다. 진짜로 그런지 확인해 봅시다.

스크린샷 2020-09-07 오후 4 40 31

rollout 상태를 확인하기 위해 "rollout status" 명령어를 사용합니다. 첫 번째 명령어에서 볼 수 있듯, 명령을 실행하면 "Deployment 'hello-kubernets'가 성공적으로 rolled out 되었습니다"라는 메시지가 나옵니다. 이제 url로 다시 이동하면, "Hello world v2!"가 표시되는 걸 확인할 수 있습니다.

스크린샷 2020-09-07 오후 4 44 32

종종 있는 일이지만, 클라이언트가 마음을 바꿔서, 원래 메시지를 다시 보고 싶어한다고 해 봅시다. 롤백 기능을 사용하면 됩니다. Kubernetes에서 쉽게 할 수 있습니다. 그저 "실행취소"만 하면 됩니다. 어떻게 하는지 첫 번째 명령어를 보면 됩니다. 두 번째 명령어는, rollout이 완전히 끝난 뒤 원래 버전의 pod이 생성되었음을 보여줍니다. 롤백 결과, 세 개의 pod이 다시 생성된 걸 볼 수 있죠.

스크린샷 2020-09-07 오후 4 49 14

따라서, 이 섹션에서는 애플리케이션에 rollout을 어떻게 적용하는지, 더 이상 필요없거나 실수로 수정한 경우 어떻게 롤백하는지를 다뤘습니다. 사이트를 다시 방문하면, 원래 텍스트가 표시됩니다. 그리고, 강의에서 이 명령어들을 실행하지 못했다 해도 걱정 마세요. lab에서 이 멋진 Kubernetes 작업을 수행해볼 기회가 있습니다.

요약하면, rolling update는 애플리케이션의 변경사항을 사용자의 부지불식간에 업데이트하는 방법을 살펴봤습니다. 또, 변경사항을 롤백함으로써 애플리케이션에 문제가 있을 경우 안정된 상태로 돌아올 수 있다는 점을 확인했습니다. 다음 강의에서는 ConfigMap과 Secret으로 애플리케이션에 변수를 넣는 방법을 다루겠습니다.

반응형