DevOps
NHN Kubernetes Service(NKS) 쿠버네티스 클러스터 업그레이드 기능
2021년 9월 30일
원문에서 보기 ↗쿠버네티스 클러스터 버전
쿠버네티스는 고유의 버전으로 관리되고 있는 소프트웨어입니다. 쿠버네티스 버전은 x.y.z 형식으로 구성되며, x는 메이저 버전, y는 마이너 버전, z는 패치 버전이라 부릅니다. 기능이 추가/변경되는 경우에는 메이저 버전 혹은 마이너 버전이 올라가고, 버그가 수정과 같이 이전 버전과 호환되는 기능을 제공하면 패치 버전을 올라가게 됩니다. 이런 형식의 버전 관리에 대한 자세한 내용은 Semantic Versioning 2.0.0을 참고하세요.
NHN Cloud 쿠버네티스 서비스에서 제공하는 쿠버네티스 클러스터는 클러스터 생성 시점에 쿠버네티스 버전을 선택합니다. 그동안은 v1.17.6 하나만 제공하고 있었지만, 2021년 6월 29일부터 v1.18.19도 제공하고 있습니다. 그래서 쿠버네티스 클러스터를 생성할 때 v1.17.6 혹은 v1.18.19를 선택해 클러스터를 생성할 수 있습니다.
사용 중인 쿠버네티스 클러스터의 버전이 v1.17.6인 경우 v1.18.19를 사용하려면 어떻게 해야 할까요? 클러스터를 새로 생성하는 방법밖에 없을까요? 아닙니다. 클러스터 업그레이드 기능을 통해 쿠버네티스 클러스터의 버전을 업그레이드해 사용할 수 있습니다.
클러스터 업그레이드 기능이란?
클러스터 업그레이드 기능은 사용 중인 쿠버네티스 클러스터의 버전을 새로운 버전으로 업그레이드하는 기능입니다. 쿠버네티스 클러스터 버전 업그레이드를 위해 쿠버네티스 클러스터의 여러 가지 구성 요소를 순서에 맞게 차례로 업그레이드합니다. 쿠버네티스는 운용 중인 클러스터에 대한 버전 업그레이드를 지원하기 위해 쿠버네티스 클러스터 구성 요소에 대한 버전 차이 정책을 정의했습니다. NHN Cloud의 쿠버네티스 클러스터 업그레이드 기능도 이 버전 차이 정책을 준수하여 업그레이드 기능을 제공합니다. 버전 차이 정책에 대한 자세한 내용은 Version skew policy를 참고하세요.
클러스터 업그레이드 절차
쿠버네티스의 버전 차이 정책에 의해 구성 요소 업그레이드에는 정해진 순서가 있습니다. 이에 따라 NHN Cloud 쿠버네티스 서비스의 클러스터 업그레이드 기능은 다음의 순서로 실행해야 합니다.
- 마스터 업그레이드
- 워커 노드 그룹별 업그레이드
마스터 업그레이드
쿠버네티스 클러스터의 마스터 구성 요소를 업그레이드합니다. 쿠버네티스 마스터 구성 요소는 NHN Cloud 내부에서 관리하고 있어 사용자가 직접 관리할 수는 없습니다. 콘솔을 이용해 마스터 구성 요소를 업그레이드할 수 있습니다.
마스터 버전 정보 조회 및 업그레이드
NHN Cloud 콘솔의 쿠버네티스 클러스터 목록 조회 화면과 개별 클러스터 상세 정보 조회 화면에서 마스터의 버전을 확인할 수 있습니다. 
NHN Cloud 콘솔의 쿠버네티스 클러스터 조회 화면 하단에 업그레이드 버튼이 있습니다. 업그레이드 버튼을 클릭하면 클러스터 마스터 구성 요소들을 업그레이드할 수 있습니다.

업그레이드가 시작되면 클러스터의 상태는 UPGRADE_IN_PROGRESS 상태가 됩니다. 업그레이드가 완료되면 다음과 같이 변경된 버전 정보를 확인할 수 있습니다.

마스터 업그레이드 시 주의사항
NHN Cloud의 쿠버네티스 클러스터 마스터는 고가용성 보장을 위해 다수의 마스터로 구성되어 있습니다. 마스터 업그레이드는 롤링 업데이트 방식으로 진행되기 때문에 클러스터의 가용성이 보장됩니다. 하지만 이 과정에서 아래와 같은 일들이 발생할 수 있습니다.
- 일시적으로 Kubernetes API가 실패할 수 있습니다.
- 오토 스케일러 기능이 일시 중단됩니다.
워커 노드 그룹별 업그레이드
클러스터 마스터를 업그레이드한 후 워커 노드 그룹 별로 업그레이드합니다. 마스터가 업그레이드되어 있어야 워커 노드 그룹의 업그레이드가 가능합니다. 또 다른 워커 노드 그룹이 업그레이드 중일 때 다른 워커 노드 그룹을 업그레이드할 수 없습니다.
워커 노드 그룹 버전 정보 조회 및 업그레이드
NHN Cloud 콘솔의 쿠버네티스 클러스터 노드 그룹 목록 조회 화면 및 노드 그룹 상세 정보 조회 화면에서 해당 워커 노드 그룹의 버전을 확인할 수 있습니다. 
NHN Cloud 콘솔의 쿠버네티스 클러스터 노드 그룹 조회 화면 하단에 업그레이드 버튼이 있습니다. 업그레이드 버튼을 클릭하면 해당 워커 노드 그룹의 클러스터 워커 구성 요소들을 업그레이드합니다.

업그레이드가 완료되면 다음과 같이 변경된 버전 정보를 확인할 수 있습니다.

워커 노드 그룹 업그레이드는 워커 노드 그룹별로 진행됩니다. 클러스터 내의 모든 워커 노드 그룹에 대해 업그레이드를 완료해야 클러스터 전체에 대한 업그레이드가 완료됩니다.
워커 노드 그룹 업그레이드 절차
워커 노드 그룹 업그레이드 시 해당 워커 노드 그룹 내의 워커 노드들에 대해서 롤링 업데이트 방식으로 업그레이드가 진행됩니다. 워커 노드를 업그레이드하는 과정에서 워커 노드에서 동작하던 파드를 모두 축출하게 되는데, 이때 축출된 파드가 안전하게 스케쥴링될 수 있도록 버퍼 노드를 추가해놓습니다. 이 과정을 정리하면 다음과 같습니다.
- 대상 워커 노드 그룹에 버퍼 노드를 추가합니다.
- 워커 노드 그룹 내의 모든 노드에 대해 순차적으로 다음 작업을 수행합니다.
- 워커 노드에서 동작 중인 파드를 축출하고, 노드를 스케줄 불가능한 상태로 전환합니다.
- 워커 구성 요소를 업그레이드합니다.
- 워커 노드를 스케줄 가능한 상태로 전환합니다.
- 버퍼 노드에서 동작 중인 파드를 축출하고 버퍼 노드를 삭제합니다.
워커 노드 그룹 업그레이드 주의사항
다음은 워커 노드 그룹 업그레이드 중 파드 축출 관련 주의 사항입니다.
- 데몬셋(daemonset) 컨트롤러에 의한 파드는 축출되지 않습니다. 데몬셋 컨트롤러는 각 워커 노드 별로 파드를 실행하기 때문에 데몬셋 컨트롤러에 의해 실행된 파드는 축출되더라도 다른 노드에서 실행될 수 없습니다. 워커 노드 그룹 업그레이드 과정에서 데몬셋 컨트롤러에 의해 실행된 파드는 축출하지 않습니다.
- 로컬 저장 공간을 사용하는 파드는 축출되면서 사용하던 데이터를 잃게 됩니다.
emptyDir을 이용해 노드의 로컬 저장 공간을 사용하는 파드는 축출되면서 사용하던 데이터를 잃게 됩니다. 노드의 로컬에 저장된 저장 공간이 다른 노드로 옮겨갈 수 없기 때문입니다. - 다른 노드로 복제가 불가능한 파드는 다른 노드로 옮겨지지 않습니다. 리플리케이션 컨트롤러(ReplicationController), 레플리카셋(ReplicaSet), 잡(Job), 데몬셋(Daemonset), 스테이트풀(StatefulSet)과 같은 컨트롤러에 의해 실행된 파드가 축출되면 컨트롤러에 의해 다른 노드로 스케줄링 됩니다. 하지만 이와 같은 컨트롤러를 이용하지 않은 파드는 축출된 후 다른 노드로 스케줄링되지 않습니다.
- PodDisruptionBudgets(PDB) 설정에 의해 축출에 실패하거나 느려질 수 있습니다. PodDisruptionBudgets(PDB) 설정으로 유지해야 할 파드 수를 정의할 수 있습니다. 이 기능 설정으로 인해 업그레이드 과정에서 파드 축출이 불가능할 수도 있고, 파드 축출 시간이 길어질 수 있습니다. 파드 축출에 실패하면 업그레이드가 실패합니다. 따라서 PDB 설정이 되어 있는 경우 적절한 PDB 설정으로 파드 축출이 원활히 동작할 수 있도록 설정해야 합니다. PDB 설정에 대한 더 자세한 내용은 여기를 참고하세요.
마치며
이번 글을 통해 NHN Cloud 쿠버네티스 서비스의 클러스터 업그레이드 기능에 대해 소개드렸습니다. 앞으로도 고객을 위한 기능으로 찾아뵙도록 하겠습니다. 감사합니다.