버전 업그레이드

고려사항

  • 네트워크 연결 불안정, 노드 다운, 리소스 부족, 스케줄링 문제 등으로 업그레이드가 실패할 경우가 발생할 수 있으므로 서비스 무중단 운영 중 실시간 업그레이드를 권장하지 않습니다.

  • 업그레이드 전 데이터베이스에 저장된 앱 상태와 같은 중요한 구성 요소를 백업하고 노드들의 스왑을 비활성화 해야 합니다.

  • 여분의 리소스가 충분히 확보 되어야 합니다. 부족한 리소스는 업그레이드 실패의 원인이 될 수 있습니다.

    • 업그레이드 수행 전 사전 작업을 통해 충분한 리소스를 확보합니다.

    • 최소 노드 수는 Control-plane는 3개이상 Worker 노드는 2개 이상 입니다.

  • 버전 업그레이드는 클러스터를 구성하는 Control-Plane , Worker 노드 순으로 단계별 진행됩니다.

    • 이때 업그레이드 대상 노드는 drain을 통해 노드 내의 Pod들은 다른 노드들로 스케줄링 됩니다.

    • ReplicationController, ReplicaSet, Job, Daemonset, StatefulSet과 같은 컨트롤러에 의해 실행된 Pod는 다른 노드로 스케줄링 됩니다.

    • 하지만 이와 같은 컨트롤러를 이용하지 않은 Pod는 축출된 후 다른 노드로 스케줄링되지 않으며 다른 노드로 복제가 불가능한 Pod는 옮겨지지 않습니다.

    • DaemonSet 컨트롤러에 의한 관리되는 Pod는 스케줄링되지 않습니다.

  • 로컬 저장 공간을 사용하는 Pod는 축출되면서 사용하던 데이터를 잃게 되며 PodDisruptionBudgets(PDB) 설정에 의해 축출에 실패하거나 느려질 수 있습니다.

  • 업그레이드가 종료되면 uncordon 을 통해 해당 노드에 대한 스케줄링이 다시 허용 됩니다. 하지만 다른 노드로 배치되었던 Pod가 다시 해당 노드로 스케줄링되지는 않습니다.

  • 컨테이너 해시 값이 변경되기 때문에 업그레이드 후 모든 컨테이너가 다시 시작됩니다.

버전 업그레이드

  • cubectl config sync 명령을 통해 클러스터 정보를 동기화 합니다.

$ cubectl config sync -p <ssh key> -u <username>
  • cubectl update-kubeconfig 명령을 통해 KUBECONFIG 파일을 다운로드 받습니다.

$ cubectl update-kubeconfig -p <ssh key> -u <username>
  • cubectl.toml 파일을 수정합니다.

    • [kubernetes] 섹션에서 원하는 쿠버네티스 version을 입력합니다.

    • 폐쇄망 설치 환경에서는 지원되는 패치 버전을 확인하세요.

    • 패치버전을 생략하면 latest 버전을 설치합니다.

$ vi config/cubectl.toml

[kubernetes]
version = "v1.24"

[node-pool.master]
ip = ["10.30.30.10","10.30.30.11","10.30.30.12"]

[node-pool.node]
ip = ["10.30.31.11","10.30.31.12"]
  • cubectl upgrade 명령을 실행합니다.

$ bin/cubectl upgrade -p ~/.ssh/id_rsa -u cocktail --kubeconfig config/acloud-client-kubeconfig

Last updated