バージョンスキューポリシー
このドキュメントでは、さまざまなKubernetesコンポーネント間でサポートされる最大のバージョンの差異(バージョンスキュー)について説明します。 特定のクラスターデプロイツールは、バージョンスキューに追加の制限を加える場合があります。
サポートされるバージョン
Kubernetesのバージョンはx.y.zの形式で表現され、xはメジャーバージョン、yはマイナーバージョン、zはパッチバージョンを指します。 これはセマンティックバージョニングに従っています。 詳細は、Kubernetesのリリースバージョニングを参照してください。
Kubernetesプロジェクトでは、最新の3つのマイナーリリース(1.36、1.35、1.34)についてリリースブランチを管理しています。 Kubernetes 1.19以降では、パッチリリースに対して約1年間のサポートが提供されます。 Kubernetes 1.18以前のバージョンは約9ヶ月間のパッチサポートが提供されていました。
セキュリティフィックスを含む適用可能な修正は、重大度や実行可能性によってはこれら3つのリリースブランチにバックポートされることもあります。 パッチリリースは、これらのブランチから定期的に切り出され、必要に応じて追加の緊急リリースも行われます。
リリースマネージャーグループがこれを決定しています。
詳細は、Kubernetesパッチリリースページを参照してください。
サポートされるバージョンスキュー
kube-apiserver
高可用性(HA)クラスターでは、最新および最古のkube-apiserverインスタンスは1つのマイナーバージョン以内でなければなりません。
例:
- 最新の
kube-apiserverが1.36であるとします - ほかの
kube-apiserverインスタンスは1.36および1.35がサポートされます
kubelet
kubeletはkube-apiserverより新しいバージョンであってはなりません。kubeletはkube-apiserverより最大で3つ前のマイナーバージョンまでサポートされます(kubelet< 1.25の場合は最大2つ前のマイナーバージョンまで)。
例:
kube-apiserverが1.36であるとしますkubeletは1.36、1.35、1.34、および1.33がサポートされます
備考:
HAクラスター内のkube-apiserver間にバージョンスキューがある場合、有効なkubeletのバージョンは少なくなります。例:
kube-apiserverインスタンスが1.36および1.35であるとしますkubeletは1.35、1.34、および1.33がサポートされます(1.36はバージョン1.35のkube-apiserverよりも新しくなるためサポートされません)
kube-proxy
kube-proxyはkube-apiserverよりも新しいバージョンであってはなりません。kube-proxyはkube-apiserverより最大で3つ前のマイナーバージョンまでサポートされます(kube-proxy< 1.25の場合は最大2つ前のマイナーバージョンまで)。kube-proxyは同一ノードで動作しているkubeletより最大3マイナーバージョン古くても新しくてもサポートされます(kube-proxy< 1.25の場合は2バージョンまで)。
例:
kube-apiserverのバージョンが1.36であるとしますkube-proxyは1.36、1.35、1.34および1.33がサポートされます
備考:
HAクラスター内のkube-apiserver間にバージョンスキューがある場合、有効なkube-proxyのバージョンは少なくなります。例:
kube-apiserverインスタンスが1.36および1.35であるとしますkube-proxyは1.35、1.34、1.33がサポートされます(1.36は、1.35のkube-apiserverインスタンスよりも新しいためサポートされません)
kube-controller-manager、kube-scheduler、およびcloud-controller-manager
kube-controller-manager、kube-schedulerおよびcloud-controller-managerは、通信するkube-apiserverインスタンスよりも新しいバージョンであってはなりません。
kube-apiserverのマイナーバージョンと一致することが期待されますが、1つ古いマイナーバージョンでも可能です(ライブアップグレードを可能にするため)。
例:
kube-apiserverが1.36であるとしますkube-controller-manager、kube-schedulerおよびcloud-controller-managerは1.36および1.35がサポートされます
備考:
HAクラスター内のkube-apiserver間にバージョンスキューがあり、これらのコンポーネントがクラスター内のいずれかのkube-apiserverと通信する場合(たとえばロードバランサーを経由して)、コンポーネントの有効なバージョンは少なくなります。例:
kube-apiserverインスタンスが1.36および1.35であるとします- いずれかの
kube-apiserverインスタンスへ配信するロードバランサーと通信するkube-controller-manager、kube-schedulerおよびcloud-controller-managerは1.35がサポートされます(1.36はバージョン1.35のkube-apiserverよりも新しくなるためサポートされません)
kubectl
kubectlはkube-apiserverの1つ以内のバージョン(古い、または新しいバージョン)をサポートします。
例:
kube-apiserverが1.36であるとしますkubectlは1.37、1.36、および1.35がサポートされます
備考:
HAクラスター内のkube-apiserver間にバージョンスキューがある場合、有効なkubectlバージョンは少なくなります。例:
kube-apiserverインスタンスが1.36および1.35であるとしますkubectlは1.36および1.35がサポートされます(ほかのバージョンでは、あるkube-apiserverコンポーネントからマイナーバージョンが2つ以上離れる可能性があります)
サポートされるコンポーネントのアップグレード順序
コンポーネント間でサポートされるバージョンスキューは、コンポーネントをアップグレードする順序に影響されます。 このセクションでは、既存のクラスターをバージョン1.35からバージョン1.36へ移行するために、コンポーネントをアップグレードする順序を説明します。
任意ですが、アップグレードを準備する際は、アップグレード中にできるだけ多くのリグレッション修正やバグ修正の恩恵を受けられるよう、以下を実施することをKubernetesプロジェクトでは推奨しています:
- コンポーネントが現在のマイナーバージョンの最新のパッチバージョンにあることを確認する。
- コンポーネントを対象のマイナーバージョンの最新のパッチバージョンにアップグレードする。
例えば、1.35を実行している場合は、最新のパッチバージョンにあることを確認してください。 その後、1.36の最新のパッチバージョンにアップグレードしてください。
kube-apiserver
前提条件:
- シングルインスタンスのクラスターにおいて、既存の
kube-apiserverインスタンスは1.35とします - HAクラスターにおいて、既存の
kube-apiserverは1.35または1.36とします(最新と最古の間で、最大で1つのマイナーバージョンスキューとなります) - サーバーと通信する
kube-controller-manager、kube-schedulerおよびcloud-controller-managerはバージョン1.35とします(必ず既存のAPIサーバーのバージョンよりも新しいバージョンでなく、かつ新しいAPIサーバーのバージョンの1つ以内のマイナーバージョンとなります) - すべてのノードの
kubeletインスタンスはバージョン1.35または1.34とします(必ず既存のAPIサーバーよりも新しいバージョンでなく、かつ新しいAPIサーバーのバージョンの2つ以内のマイナーバージョンとなります) - 登録されたAdmission webhookは、新しい
kube-apiserverインスタンスが送信するこれらのデータを扱うことができます:ValidatingWebhookConfigurationおよびMutatingWebhookConfigurationオブジェクトは、1.36で追加されたRESTリソースの新しいバージョンを含んで更新されます(または、v1.15から利用可能なmatchPolicy: Equivalentオプションを使用してください)- Webhookは送信されたRESTリソースの新しいバージョン、および1.36のバージョンで追加された新しいフィールドを扱うことができます
kube-apiserverを1.36にアップグレードしてください。
備考:
非推奨APIおよびAPIの変更ガイドラインのプロジェクトポリシーにおいては、シングルインスタンスの場合でもkube-apiserverのアップグレードの際にマイナーバージョンをスキップしてはなりません。kube-controller-manager、kube-scheduler、およびcloud-controller-manager
前提条件:
- これらのコンポーネントと通信する
kube-apiserverインスタンスが1.36であること(これらのコントロールプレーンコンポーネントが、クラスター内のkube-apiserverインスタンスと通信できるHAクラスターでは、これらのコンポーネントをアップグレードする前にすべてのkube-apiserverインスタンスをアップグレードしなければなりません)
kube-controller-manager、kube-schedulerおよびcloud-controller-managerを1.36にアップグレードしてください。
kube-controller-manager、kube-scheduler、cloud-controller-managerの間にアップグレードの順序はありません。
これらのコンポーネントはいずれの順序でも、同時にでもアップグレードできます。
kubelet
前提条件:
kubeletと通信するkube-apiserverが1.36であること
必要に応じて、kubeletインスタンスを1.36にアップグレードしてください(1.35、1.34、または1.33のままにすることもできます)。
備考:
マイナーバージョンのkubeletをアップグレードする前に、そのノードからPodをドレインしてください。
kubeletのマイナーバージョンのインプレースアップグレードはサポートされていません。警告:
kube-apiserverより常に3つ前のマイナーバージョンのkubeletインスタンスでクラスターを実行する場合、コントロールプレーンをアップグレードする前にkubeletをアップグレードしなければなりません。kube-proxy
前提条件:
kube-proxyと通信するkube-apiserverインスタンスが1.36であること
必要に応じて、kube-proxyインスタンスを1.36にアップグレードしてください(1.35や1.34、1.33のままにすることもできます)。
警告:
kube-apiserverより常に3つ前のマイナーバージョンで動作しているkube-proxyインスタンスは、コントロールプレーンをアップグレードする前にアップグレードしなければなりません。