쿠버네티스 프로젝트는 가장 최신의 3개 마이너(minor) 릴리스(1.23, 1.22, 1.21)에 대해서 릴리스 브랜치를 관리한다. 쿠버네티스 1.19 및 이후 신규 버전은 약 1년간 패치 지원을 받을 수 있다. 쿠버네티스 1.18 및 이전 버전은 약 9개월간의 패치 지원을 받을 수 있다.
쿠버네티스 버전은 x.y.z 의 형태로 표현되는데,
x 는 메이저(major) 버전, y 는 마이너(minor), z 는 패치(patch) 버전을 의미하며, 이는 시맨틱 버전의 용어를 따른 것이다.
고가용성(HA) 클러스터에서 최신 및 가장 오래된 kube-apiserver 인스턴스가 각각 한 단계 마이너 버전 내에 있어야 한다.
예:
최신 kube-apiserver는 1.23 이다.
다른 kube-apiserver 인스턴스는 1.23 및 1.22 을 지원한다.
kubelet
kubelet은 kube-apiserver보다 최신일 수 없으며, 2단계의 낮은 마이너 버전까지 지원한다.
예:
kube-apiserver가 1.23 이다.
kubelet은 1.23, 1.22 및 1.21 을 지원한다.
참고: HA 클러스터의 kube-apiserver 인스턴스 사이에 버전 차이가 있으면 허용되는 kubelet 버전의 범위도 줄어든다.
예:
kube-apiserver 인스턴스는 1.23 및 1.22 이다.
kubelet은 1.22 및 1.21 을 지원한다(1.23 는 kube-apiserver의 1.22 인스턴스보다 최신 버전이기 때문에 지원하지 않는다).
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager는 그들과 통신하는 kube-apiserver 인스턴스보다 최신 버전이면 안 된다. kube-apiserver 마이너 버전과 일치할 것으로 예상하지만, 최대 한 단계 낮은 마이너 버전까지는 허용한다(실시간 업그레이드를 지원하기 위해서).
예:
kube-apiserver은 1.23 이다.
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager는 1.23 과 1.22 을 지원한다.
참고: HA 클러스터의 kube-apiserver 인스턴스 간에 버전 차이가 존재하고 이러한 구성 요소가 클러스터의 모든 kube-apiserver 인스턴스와 통신할 수 있는 경우(예를 들어, 로드 밸런서를 통해서)에는 구성 요소의 허용하는 버전의 범위도 줄어든다.
예:
kube-apiserver 인스턴스는 1.23 및 1.22 이다.
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager는 모든 kube-apiserver 인스턴스로 라우팅하는 로드 밸런서와 통신한다.
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager는 1.22 에서 지원한다(1.23 는 kube-apiserver 인스턴스의 1.22 버전보다 최신이기 때문에 지원하지 않는다).
kubectl
kubectl은 kube-apiserver의 한 단계 마이너 버전(이전 또는 최신) 내에서 지원한다.
예:
kube-apiserver은 1.23 이다.
kubectl은 1.24, 1.23 및 1.22 을 지원한다.
참고: HA 클러스터의 kube-apiserver 인스턴스 간에 버전 차이가 있으면 지원되는 kubectl 버전의 범위도 줄어든다.
예:
kube-apiserver 인스턴스는 1.23 및 1.22 이다.
kubectl은 1.23 및 1.22 에서 지원한다(다른 버전은 kube-apiserver 인스턴스 중에 한 단계 이상의 마이너 버전 차이가 난다).
지원되는 구성 요소 업그레이드 순서
구성요소 간 지원되는 버전 차이는 구성요소를 업그레이드하는 순서에 영향을 준다.
이 섹션에서는 기존 클러스터를 버전 1.22 에서 버전 1.23 로 전환하기 위해 구성 요소를 업그레이드하는 순서를 설명한다.
kube-apiserver
사전 요구 사항:
단일 인스턴스 클러스터에서 기존 kube-apiserver 인스턴스는 1.22 이어야 한다.
HA 클러스터에서 모든 kube-apiserver 인스턴스는 1.22 또는 1.23 이어야 한다(이것은 kube-apiserver 인스턴스 간의 가장 최신과 오래된 버전의 차이를 최대 1개의 마이너 버전의 차이로 보장한다).
이 서버와 통신하는 kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager의 버전은 1.22 이어야 한다(이것은 기존 API서버 버전보다 최신 버전이 아니고 새로운 API서버 버전의 마이너 1개의 버전 내에 있음을 보장한다).
모든 kubelet 인스턴스는 버전 1.22 또는 1.21 이어야 한다(이것은 기존 API서버 버전보다 최신 버전이 아니며, 새로운 API서버 버전의 2개의 마이너 버전 내에 있음을 보장한다).
등록된 어드미션 웹훅은 새로운 kube-apiserver 인스턴스가 전송하는 데이터를 처리할 수 있다:
ValidatingWebhookConfiguration 그리고 MutatingWebhookConfiguration 오브젝트는 1.23 에 추가된 REST 리소스의 새 버전을 포함하도록 업데이트한다(또는 v1.15 이상에서 사용 가능한 matchPolicy: Equivalent option 설정을 사용).
웹훅은 자신에게 전송될 REST리소스의 새버전과 1.23 에서 기존 버전에 추가된 새로운 필드를 처리할 수 있다.
kube-apiserver를 1.23 으로 업그레이드
참고:API 지원 중단 및
API 변경 가이드라인
에 대한 프로젝트 정책에서는 단일 클러스터일지라도 업그레이드할 때 kube-apiserver의 마이너 버전을 건너뛰지 않도록 요구한다.
kube-controller-manager, kube-scheduler 그리고 cloud-controller-manager
사전 요구 사항:
kube-apiserver 인스턴스는 1.23 이여야 한다(HA 클러스터에서 kube-apiserver 인스턴스와 통신할 수 있는 구성 요소를 업그레이드 전에 모든 kube-apiserver 인스턴스는 업그레이드되어야 한다).
kube-controller-manager, kube-scheduler 및 cloud-controller-manager 를 1.23 으로 업그레이드한다.
kubelet
사전 요구 사항:
kubelet과 통신하는 kube-apiserver 인스턴스는 1.23 이어야 한다.
필요에 따라서 kubelet 인스턴스를 1.23 으로 업그레이드할 수 있다(또는 1.22 아니면 1.21 으로 유지할 수 있음).
참고:kubelet 마이너 버전 업그레이드를 수행하기 전에, 해당 노드의 파드를 드레인(drain)해야 한다.
인플레이스(In-place) 마이너 버전 kubelet 업그레이드는 지원되지 않는다.
경고:
클러스터 안의 kubelet 인스턴스를 kube-apiserver의 버전보다 2단계 낮은 버전으로 실행하는 것을 권장하지 않는다:
kube-apiserver를 업그레이드한다면 한 단계 낮은 버전으로 업그레이드해야 한다.
이것은 관리되고 있는 3단계의 마이너 버전보다 낮은 kubelet을 실행할 가능성을 높인다.
kube-proxy
kube-proxy는 반드시 kubelet과 동일한 마이너 버전이어야 한다.
kube-proxy는 반드시 kube-apiserver 보다 최신 버전이면 안 된다.
kube-proxy는 kube-apiserver 보다 2단계 낮은 마이너 버전 이내여야 한다.