• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

실제 쿠버네티스 버전 업그레이드는 어떻게 이루어지나요?

22.02.26 10:29 작성 조회수 441

1

본 강의에서는 쿠버네티스 버전 업그레이드를 할 때 각 워커 노드에서 수동으로 업그레이드를 진행했는데 실제 개발 환경에서는 이런 식으로 업그레이드를 진행하지 않을 거 같다는 생각이 들었습니다. 실제 환경에서 가동되는 워커 노드는 수없이 많으니까요.

물론 기업마다 팀마다 차이가 있을 거 같지만, 실제 개발 환경에서 쿠버네티스를 업그레이드할 때 워커 노드는 어떻게 업그레이드를 할까요? 강사님의 경험에서 우러나온 답변도 환영합니다 :)

답변 1

답변을 작성해보세요.

2

안녕하세요 

좋은 질문 감사합니다. 

실제 쿠버네티스...라고 한다면 설명했던 것처럼 크게 3가지가 있으나, 구성형은 설치형과 유사하니 두개를 묶도록 하겠습니다. 

 

따라서 클라우드 / 온프레미스 형태로 나누어지게 되는데요. 

클라우드는 업그레이드 하면 rolling update를 worker 노드마다 걸어서 하게 됩니다.

따라서 서비스가 흔들릴 수 있습니다. 

온프레미스는 클라우드의 과정을 사용자가 직접해준다는 차이가 있으나 worker 노드마다 진행되는 것은 동일합니다.

 

실제 개발 환경 또는 실제 k8s 환경이라고 부르는 환경에 worker 노드가 수 없이 많게 구성할지 Cluster(Context) 별로 쪼개서 구성할지는 전략에 따라 좀 다르지만...어쨌든 worker 노드는 직접 업데이트합니다. 

 

이제 질문으로 들어가 보겠습니다. 

본 강의에서는 쿠버네티스 버전 업그레이드를 할 때 각 워커 노드에서 수동으로 업그레이드를 진행했는데 실제 개발 환경에서는 이런 식으로 업그레이드를 진행하지 않을 거 같다는 생각이 들었습니다. 실제 환경에서 가동되는 워커 노드는 수없이 많으니까요.

물론 기업마다 팀마다 차이가 있을 거 같지만, 실제 개발 환경에서 쿠버네티스를 업그레이드할 때 워커 노드는 어떻게 업그레이드를 할까요? 강사님의 경험에서 우러나온 답변도 환영합니다 :)

 

아마도 Worker 노드가 많은데 이걸 일일히 한다고? 자동으로 해야 하는거 아니야? 라고 생각하실 수 있습니다. 그리고 자동으로 하는건 어렵지 않습니다. 엄밀히 따지면 거의 모든 자동이 반자동이긴 한데....

Ansible등의 관리 도구나 bash+ssh 명령이나 python등에서 paramiko를 쓰거나 등등으로 원격지에 있는 설정을 바꾸고 다시 기동해 주면 됩니다. 

그런데 문제는 위에 업그레이드 중에 서비스가 흔들릴 수 있다 라는 부분이 더 큰 고려점이 됩니다. 

그래서 업그레이드 자체를 A/B, Canary, Blue-Green 등을 방법론을 동원해서 순차적으로 진행합니다. 

(참고로 이 책의 젠킨스 부분에 Blue-Green 실습이 있습니다.)

이를 위해서 구동 중인 앱을 빠르게 이전하기 위한 방법 중에 하나로 나중에 배울 Readiness probe를 사용해서 앱을 죽이지 않고 endpoints만 잠시 중단하기도 합니다. 

 

정리하자면

다수의 워커 노드를 한 콘솔(또는 시스템)에서 뿌리는 방식으로 업그레이드하는건 어렵지 않습니다. 근데 프로덕션이라면 사이드이펙트가 너무 큽니다. 그래서 순차적으로 또는 메인터넌스 시간을 잡고 천천히 합니다. 

 

답변이 되셨기를 바랍니다. 

조훈 드림.