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