Alibaba Cloud Container Compute Service (ACS) は、認定 Kubernetes 適合性プログラムに準拠しています。このドキュメントでは、Kubernetes 1.26 の主な変更点 (アップグレードノート、破壊的変更、新機能、非推奨の機能および API、フィーチャーゲート、セキュリティ強化) について説明します。
アップグレードノート
Kubernetes 1.26 をサポートするために、ACK クラスターでは以下のコンポーネントが更新されています。
コアコンポーネント | バージョン | 備考 |
Kubernetes | 1.26.15-aliyunacs.1 |
|
etcd | v3.5.9 | なし |
CoreDNS | v1.9.3.10-7dfca203-aliyun | なし |
CRI | containerd 1.6.22.1-20240524143336 | Kubernetes 1.24.0 以降のみをサポートします。 |
CSI | v1.30.1-1.acs-685ce77-aliyun | なし |
CNI | Terway および TerwayControlplane v1.5.0 以降 | なし |
リリース分析
破壊的変更
Kubernetes 1.25 および 1.26 では、多数のベータ API が非推奨になりました。アップグレードする前に、ベータ API を使用するコントローラーとアプリケーションが、安定版 API バージョンに更新されていることを確認する必要があります。詳細については、「非推奨 API」をご参照ください。
Kubernetes 1.26 では CRI v1alpha2 のサポートが廃止され、コンテナランタイムは CRI v1 をサポートする必要があります。そのため、Kubernetes 1.26 は containerd 1.5 以前をサポートしません。containerd 1.6 が最低限必要なバージョンです。クラスターをアップグレードする場合、ノードを Kubernetes 1.26 にアップグレードする前に、containerd を 1.6.0 以降にアップグレードする必要があります。
PodSecurityPolicy は Kubernetes 1.21 で非推奨となり、Kubernetes 1.25 で削除されました。PodSecurityPolicy は使用方法が複雑で、意図した以上の権限を容易に付与してしまう可能性があり、深刻な可用性の問題を引き起こします。詳細については、「The Historical Context of PodSecurityPolicy」をご参照ください。
クラスターで PodSecurityPolicy を使用している場合は、アップグレードする前に、次のいずれかのアドミッションコントロールを適用してください。
ACK が提供するポリシー管理機能を使用してください。ACK は、Kubernetes アプリケーションシナリオに合わせたより多くのポリシールールを提供し、ルールの設定を簡素化します。詳細については、「Configure container security policies」をご参照ください。
組み込みの Pod Security アドミッションを使用してください。この機能はより簡単に使用できます。詳細については、「Pod Security Admission」をご参照ください。PodSecurityPolicy から組み込みの PodSecurity アドミッションコントローラーへの移行に関する詳細については、「Migrate from PodSecurityPolicy to the Built-in PodSecurity Admission Controller」をご参照ください。
サードパーティのアドミッションプラグインをデプロイして設定してください。
1.26.15-aliyunacs.1 では、以下の CVE 脆弱性が修正されています:
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
新機能
エフェメラルコンテナ機能は Kubernetes 1.23 でベータ版でしたが、Kubernetes 1.25 で安定版 (Stable) になりました。コンテナがクラッシュした場合や、
kubectl execコマンドを実行するためのデバッグツールがない場合に、既存の Pod でエフェメラルコンテナを実行して、そのステータスを確認したり、任意のコマンドを実行したりできます。詳細については、「Ephemeral Containers」をご参照ください。Kubernetes 1.25 では、cgroups v2 のサポートが安定版 (Stable) になりました。cgroups v2 は cgroups v1 に比べて多くの点が改善されています。詳細については、「cgroup v2」をご参照ください。
Kubernetes 1.25 では、単体テスト、適合性テスト、Windows Operational Readiness のための新しいリポジトリなど、Windows のサポートの最適化が継続されています。
Kubernetes 1.25 では、k8s.gcr.io イメージレジストリが registry.k8s.io に移行され、トラフィックが registry.k8s.io にリダイレクトされます。詳細については、「k8s.gcr.io Redirect to registry.k8s.io」をご参照ください。
Kubernetes 1.25 では、NetworkPolicy の
EndPortフィールドが一般提供 (GA) となりました。NetworkPolicy プロバイダーがEndPortフィールドをサポートしている場合、このフィールドを使用して NetworkPolicy でポート範囲を指定できます。NetworkPolicy プロバイダーがEndPortをサポートしていない場合は、単一ポートのネットワークポリシーのみが作成されます。詳細については、「Network Policies」をご参照ください。Kubernetes 1.25 では、ローカルエフェメラルストレージの容量の分離が一般提供 (GA) となりました。この機能は、
EmptyDirなど、Pod 間のローカルエフェメラルストレージ容量の分離をサポートします。したがって、Pod が設定された制限を超えてローカルエフェメラルストレージを消費した場合、kubelet はその Pod を退去させて、共有リソースの消費に対するハードリミットを強制できます。詳細については、「Local Ephemeral Storage Capacity Isolation」をご参照ください。Kubernetes 1.25 では、CSI エフェメラルボリュームが安定版 (Stable) になりました。この機能により、PersistentVolume (PV) や PersistentVolumeClaim (PVC) を介さずに、一時的な使用のために Pod 定義で CSI ボリュームを直接指定できます。詳細については、「CSI Ephemeral Volumes」をご参照ください。
Kubernetes 1.25 では、パフォーマンス、ローテーション、および可観測性を向上させるために、KMS v2 alpha1 API が導入されました。この API は、データ暗号化キー (DEK) を使用して Kubernetes Secret の保管時の暗号化を実装するために、AES-CBC の代わりに AES-GCM を使用します。このプロセスに追加の操作は不要で、AES-GCM と AES-CBC の両方での読み取りに対応しています。詳細については、「Using a KMS provider for data encryption」をご参照ください。
Kubernetes 1.25 では、Kubernetes はオブジェクトストレージの新しい標準インターフェイスである Container Object Storage Interface (COSI) を規定しました。COSI はオブジェクトストレージの使用を標準化することを目指しており、現在アルファ版です。
Kubernetes v1.25 では、Pod の
statusフィールドにある PodHasNetwork 条件が True に設定されている場合、Pod ランタイムサンドボックスが正常に初期化および作成され、ネットワーキングが設定されていることを示します。kubelet は、PodHasNetwork 条件が True に設定された後にのみ、イメージのプルとコンテナの起動を開始します。したがって、この条件は、イメージのプル速度やアプリケーションの負荷などの要因を除外した、Pod の初期化レイテンシーのメトリックとして使用できます。これにより、サービスレベルインジケーター (SLI) を正確に生成できます。PodHasNetwork はアルファ段階であるため、これを使用するには kubelet で PodHasNetworkCondition フィーチャーゲートを有効にする必要があります。詳細については、「the difference between PodHasNetwork and Initialized」をご参照ください。Kubernetes 1.25 では、StatefulSet の
minReadySecondsフィールドが安定版 (Stable) になりました。これにより、各 Pod が指定された期間待機して、StatefulSet のローリングアップデートを遅らせることができます。詳細については、「Minimum Ready Seconds」をご参照ください。Kubernetes 1.25 では、DaemonSet の
maxSurgeフィールドが安定版 (Stable) になりました。これにより、DaemonSet ワークロードはローリングアップデート中にノード上で同じ Pod の複数のインスタンスを実行でき、DaemonSet のダウンタイムを最小限に抑えるのに役立ちます。2 つのアクティブな Pod がノード上で同じポートを共有することはできないため、maxSurgeとhostPortフィールドを同時に使用することはできません。詳細については、「Perform a Rolling Update on a DaemonSet」をご参照ください。Kubernetes 1.25 では、Pod をユーザー名前空間で実行するためのアルファ機能が導入されました。Pod 内の root ユーザーは、コンテナの外部で非ゼロの ID にマッピングされます。これにより、Pod はコンテナの観点からは root ユーザーとして実行されますが、ホストの観点からは通常の非特権ユーザーとして実行されます。この機能はアルファ版です。この機能を使用するには、UserNamespacesStatelessPodsSupport フィーチャーゲートを有効にし、コンテナランタイムがこの機能をサポートしていることを確認する必要があります。詳細については、「Alpha support for running Pods with user namespaces」をご参照ください。
Kubernetes 1.25 では、RetroactiveDefaultStorageClass という名前のフィーチャーゲートが追加され、これによりデフォルトの StorageClass が PVC に割り当てられる方法が変更されます。以前は、デフォルトの StorageClass を割り当てるには、StorageClass を作成してから PVC を作成する必要がありました。そうしないと、PVC の StorageClass は nil のままでした。この機能が有効になると、StorageClass が割り当てられていない PVC は、再作成することなくデフォルトの StorageClass で自動的に更新されます。この機能は Kubernetes 1.26 でベータ版になり、デフォルトで有効になっています。
Kubernetes 1.25 では、JobPodFailurePolicy 機能が追加され、コンテナの終了コードと Pod の状態に基づいて Pod の障害を処理する方法を Job で設定できるようになりました。この機能は Kubernetes 1.26 でベータ版になりました。Job 定義で
podFailurePolicyフィールドを設定して Pod 障害ポリシーを指定でき、これにより不要な Pod の再試行を回避し、Pod の退去を無視できます。詳細については、「Pod failure policy」をご参照ください。Kubernetes 1.25 では、PodTopologySpread 機能がローリングアップデート中に制約に違反して Pod の不均等な分散を引き起こす問題が修正されました。
minDomainsフィールドはベータ版です。Kubernetes 1.25 では、大規模クラスターにおける kube-proxy のパフォーマンスが向上しました。たとえば、1,000 の Endpoint を持つクラスターでは、未使用の iptables ルールは最大 1 同期期間保持され、そのため各同期中のスキャンから除外されます。小規模なクラスターでは、未使用の iptables ルールは引き続き即座に削除されます。
Kubernetes 1.26 では、Pod 間および Pod 内のコンテナ間でリソースを要求および共有するための動的リソース割り当て機能が追加されました。この機能により、ユーザーはパラメーターを指定してリソースを初期化できます。この機能はアルファ版です。この機能を使用するには、DynamicResourceAllocation フィーチャーゲートと resource.k8s.io/v1alpha1 API グループを有効にし、管理したい特定のリソース用のドライバーをインストールする必要があります。詳細については、「Alpha API For Dynamic Resource Allocation」をご参照ください。
Kubernetes 1.26 では、非グレースフルなノードシャットダウンがベータ段階に入りました。ノードに障害が発生すると、そのノード上の Pod は
Terminating状態のままとなり、VolumeAttachment を削除できなくなります。StatefulSet の Pod の場合、Pod 名は一意である必要があるため、別のノードで新しい Pod は開始されません。グレースフルなノードシャットダウンがノードのシャットダウンイベントを検出する kubelet によって処理されるのとは異なり、非グレースフルなノードシャットダウンでは、手動でout-of-servicetaint をノードに追加する必要があります。これにより、Pod が新しい実行中のノードに移動されます。ノードが回復した後、手動で taint を削除する必要もあります。Kubernetes 1.26 では、マウント中に Pod の
fsGroupを CSI ドライバーに渡せるようになり、これにより kubelet の代わりに CSI ドライバーがボリューム内のファイルとディレクトリの権限を変更できるようになります。この機能は、ほとんどのユーザーにとって透過的です。CSI ドライバーの開発者である場合は、「CSI Driver fsGroup Support」をご参照ください。Kubernetes 1.26 で導入された Pod スケジューリングゲート機能は、いつ Pod のスケジューリングを開始するかをスケジューラーに通知します。多数の Pod が外部イベントによってブロックされ、長期間スケジューリングできない場合、スケジューラーのパフォーマンスが影響を受ける可能性があります。スケジューリングゲート機能は、新しく作成された Pod がまだスケジューリングの準備ができていないことを宣言できるようにすることで、この問題を解決します。Pod に
spec.schedulingGatesフィールドが設定されている場合、スケジューラーはその Pod を無視し、不要なスケジューリング試行を防ぎます。この機能では、Pod がスケジューリングの準備ができたタイミングを判断し、ゲートをクリアするための外部コントローラーが必要です。詳細については、「Pod Scheduling Gates」をご参照ください。Kubernetes 1.26 では、CPU マネージャーが一般提供 (GA) になりました。この機能は Kubernetes v1.10 からベータ版でした。これは kubelet の一部であり、コンテナに専用の CPU を割り当てる役割を担います。CPU マネージャーは 3 つのポリシーオプションに対応しています。詳細については、「Control CPU Management Policies on the Node」をご参照ください。
Kubernetes 1.26 では、クロス名前空間ストレージデータソースのアルファサポートが追加されました。これにより、ソースデータが異なる名前空間に属している場合に、PVC のデータソースを指定できます。詳細については、「Cross-Namespace Storage Data Sources」をご参照ください。
Kubernetes v1.26 では、PodDisruptionBudget で異常な Pod の退去ポリシーを設定できます。
.spec.unhealthyPodEvictionPolicy=AlwaysAllowを設定すると、PDB によってブロックされることなく、異常な Pod を退去させることができます。この機能は現在アルファ段階であり、使用するには PDBUnhealthyPodEvictionPolicy フィーチャーゲートを有効にする必要があります。詳細については、「Unhealthy Pod Eviction Policy」をご参照ください。Kubernetes v1.26 では、
preStopおよびpostStartコンテナライフサイクルフックのhttpGetハンドラーは、schemeおよびheadersフィールドに従います。これにより、動作がプローブと一致するようになり、カスタムヘッダーを設定したり HTTPS を使用したりできます。HTTP が期待されるときに HTTPS が使用された場合、エラーがログに記録され、ハンドラーは下位互換性を維持するために HTTP の使用にフォールバックします。この機能は、--feature-gates=ConsistentHTTPGetHandlers=falseフラグを設定することで kubelet で無効にできます。Kubernetes v1.26 では、API 優先度と公平性 (APF) が他の優先度レベルからシートを借用できるようになります。
.spec.limitedに 2 つの新しいフィールドが追加されました:lendablePercentは貸し出し可能なシートの割合を指定し、borrowingLimitPercentは他の優先度レベルから借用できるシートの最大割合を指定します。Kubernetes v1.26 では、kube-controller-manager コンポーネントは
--concurrent-horizontal-pod-autoscaler-syncsを設定して HPA (HorizontalPodAutoscaler) コントローラーのワーカー数を指定することに対応しました。Kubernetes 1.26 では、HPA のラベルセレクター検証が追加されました。複数の HPA が同じ Pod のセットまたは同じ Deployment を指している場合、これらの HPA は有効にならず、システムは
AmbiguousSelectorイベントを生成します。Kubernetes v1.26 では、複数の StorageClass がデフォルトとして設定されている場合 (
storageclass.kubernetes.io/is-default-classアノテーション経由)、例外がスローされる代わりに、最新の StorageClass がデフォルトとして選択されます。
非推奨の機能
ストレージドライバーの非推奨と削除
Kubernetes 1.25 では、ストレージ統合のための in-tree ボリュームプラグインが削除されます。CSI 移行は、in-tree ボリュームプラグインのコードを out-of-tree CSI ドライバーに移行するために、以前のバージョンで SIG Storage が継続的に行ってきた取り組みです。Kubernetes 1.25 では、コア CSI 移行が安定版になりました。
Kubernetes 1.25 では、GlusterFS および Portworx の in-tree ボリュームプラグインが非推奨となり、Flocker、Quobyte、および StorageOS の in-tree ボリュームプラグインが削除されました。in-tree vSphere ボリュームドライバーは、vSphere バージョン 7.0u2 以前をサポート対象外となりました。
Kubernetes 1.26 では、GlusterFS の in-tree ドライバーが削除され、非推奨の OpenStack in-tree ストレージ統合 (
Cinderボリュームタイプ) が削除されました。
iptables チェーンの所有権のクリーンアップ
Kubernetes は通常、ネットワークパケットが期待どおりに配信されることを保証するために iptables チェーンを作成します。これらの iptables チェーンとその名前は、Kubernetes の内部実装の詳細であり、内部使用のみを目的としています。一部のコンポーネントは現在、これらの内部実装の詳細に依存しています。Kubernetes は一般的に、これらの詳細に依存するツールをサポートしない方針です。詳細については、「Kubernetes's IPTables Chains Are Not API」をご参照ください。
Kubernetes 1.25 以降、kubelet は IPTablesCleanup フィーチャーゲートを使用して、
KUBE-MARK-DROP、KUBE-MARK-MASQ、KUBE-POSTROUTINGなどの NAT テーブル内の iptables チェーンの作成を停止するよう、段階的に移行します。iptables チェーンの所有権のクリーンアップに関する詳細については、「Cleaning up iptables chain ownership」をご参照ください。
in-tree 認証情報管理コードの削除
Kubernetes 1.26 以降、Azure および Google Cloud 用の埋め込みベンダー固有認証コードが client-go および kubectl から削除されました。代わりに認証プラグインメカニズムを使用できます。詳細については、「Authentication plugins」をご参照ください。
kube-proxy コンポーネントの削除
Kubernetes 1.26 では、Userspace プロキシモードが削除されました。この非推奨モードは、Linux または Windows ではサポートされなくなりました。Linux ユーザーは iptables または IPVS を使用し、Windows ユーザーは Kernelspace を使用する必要があります。
--mode userspaceを使用すると失敗するようになります。Windows winkernel kube-proxy は、Windows HNS v1 API をサポート対象外となりました。
kubectl
--prune-whitelistフラグの非推奨Kubernetes 1.26 では、Inclusive Naming Initiative をサポートするために、
--prune-whitelistフラグは 非推奨となり、--prune-allowlistに置き換えられ、将来完全に削除される予定です。動的 Kubelet 設定の削除
DynamicKubeletConfig フィーチャーゲートは削除されました。この機能により、API を使用してノード上の kubelet 設定を動的に更新できました。関連するコードは Kubernetes 1.24 で kubelet から、Kubernetes 1.26 で API サーバーから削除されました。このロジックを削除することで、コードが簡素化され、信頼性が向上します。推奨される方法は、kubelet 設定ファイルを変更して kubelet を再起動することです。詳細については、「Remove Dynamic Kubelet Configuration from the API server」をご参照ください。
コマンドラインパラメーターの削除
Kubernetes 1.25 では、kubeadm の UnversionedKubeletConfigMap 機能が GA になりました。これにより、デフォルトで使用される ConfigMap は、
kube-system名前空間のkubelet-config-x.yyではなく、kube-system名前空間のkubelet-configとなります。Kubernetes 1.25 以降、kubeadm は
node-role.kubernetes.io/master:NoScheduletaint をコントロールプレーンノードに適用しなくなりました。この taint は、kubeadm upgrade applyを実行するときにも削除されます。Kubernetes 1.25 では、Seccomp アノテーション
seccomp.security.alpha.kubernetes.io/podおよびcontainer.seccomp.security.alpha.kubernetes.ioはサポート対象外となりました。代わりにSeccompProfileを使用することを推奨します。詳細については、「Restrict a Container's Syscalls with seccomp」をご参照ください。Kubernetes 1.25 および Kubernetes 1.26 では、kube-controller-manager の一部の起動パラメーターが非推奨となり、削除されました。
deleting-pods-qps、deleting-pods-burst、およびregister-retry-countは削除されました。experimental-cluster-signing-durationおよびpod-eviction-timeoutは非推奨となり、その機能はcluster-signing-durationに統合されました。Kubernetes 1.27 では、
pod-eviction-timeoutとenable-taint-managerが一緒に削除される予定です。
Kubernetes 1.26 では、以前のバージョンで 非推奨となった一部のログ関連のコマンドラインパラメーターが削除されました。
Kubernetes 1.26 では、
--master-service-namespaceコマンドラインパラメーターは 非推奨となりました。これは API サーバーには影響しません。Kubernetes 1.26 では、
kubectl runのいくつかの未使用のフラグが非推奨となり、将来のバージョンで削除される予定です。これらのフラグには、--cascade、--filename、--force、--grace-period、--kustomize、--recursive、--timeout、および--waitが含まれます。
非推奨 API
Kubernetes 1.25 および 1.26 では、以下の API が非推奨になりました。詳細については、「Deprecated API Migration Guide」をご参照ください。
CronJob
Kubernetes 1.25 以降、CronJob の batch/v1beta1 API バージョンは提供されなくなりました。Kubernetes 1.21 から利用可能な batch/v1 API バージョンを使用してください。
EndpointSlice
Kubernetes 1.25 以降、EndpointSlice の discovery.k8s.io/v1beta1 API バージョンは提供されなくなりました。Kubernetes 1.21 から利用可能な discovery.k8s.io/v1 API バージョンを使用してください。
discovery.k8s.io/v1 の主な変更点は次のとおりです:
非推奨の
topology["kubernetes.io/hostname"]フィールドの代わりに、各 Endpoint でNodeNameフィールドが使用されます。非推奨の
topology["kubernetes.io/zone"]フィールドの代わりに、各 Endpoint でZoneフィールドが使用されます。TopologyフィールドはdeprecatedTopologyフィールドに置き換えられ、v1 API バージョンでは書き込み不可です。
Event
Kubernetes 1.25 以降、Event の events.k8s.io/v1beta1 API バージョンは提供されなくなりました。Kubernetes v1.19 から利用可能な events.k8s.io/v1 API バージョンを使用してください。
events.k8s.io/v1 の主な変更点は次のとおりです:
typeフィールドはNormalまたはWarningにのみ設定できます。involvedObjectフィールドはregardingに名前が変更されました。新しい
events.k8s.io/v1Event を作成する場合、action、reason、reportingController、およびreportingInstanceはすべて必須フィールドです。非推奨の
firstTimestampフィールドの代わりにeventTimeフィールドを使用してください。firstTimestampフィールドはdeprecatedFirstTimestampに名前が変更され、新しいevents.k8s.io/v1Event オブジェクトでは許可されていません。非推奨の
lastTimestampフィールドの代わりにseries.lastObservedTimeフィールドを使用してください。lastTimestampフィールドはdeprecatedLastTimestampに名前が変更され、新しいevents.k8s.io/v1Eventオブジェクトでは許可されていません。非推奨の
countフィールドの代わりにseries.countフィールドを使用してください。countフィールドはdeprecatedCountに名前が変更され、新しいevents.k8s.io/v1Eventオブジェクトでは許可されていません。非推奨の
source.componentフィールドの代わりにreportingControllerフィールドを使用してください。source.componentフィールドはdeprecatedSource.componentに名前が変更され、新しいevents.k8s.io/v1Event オブジェクトでは許可されていません。非推奨の
source.hostフィールドの代わりにreportingInstanceフィールドを使用してください。source.hostフィールドはdeprecatedSource.hostに名前が変更され、新しいevents.k8s.io/v1Eventオブジェクトでは許可されていません。
PodDisruptionBudget
Kubernetes 1.25 以降では、PodDisruptionBudget の policy/v1beta1 API バージョンは利用できなくなりました。Kubernetes 1.21 から利用可能な policy/v1 API バージョンを使用してください。
policy/v1 の顕著な変更点は、
spec.selectorを空 ({}) に設定すると、名前空間内のすべての Pod が選択されることです。policy/v1beta1 バージョンでは、空のspec.selectorはどの Pod も選択しませんでした。spec.selectorが設定されていない場合、どちらの API バージョンでも Pod は選択されません。PodSecurityPolicy
Kubernetes v1.25 以降、PodSecurityPolicy は policy/v1beta1 API から利用できなくなりました。PodSecurityPolicy アドミッションコントローラーも削除されました。PodSecurityPolicy をPod Security アドミッションまたはサードパーティのアドミッション Webhook に移行してください。
移行ガイドについては、「Migrate from PodSecurityPolicy to the Built-in PodSecurity Admission Controller」をご参照ください。非推奨に関する詳細については、「PodSecurityPolicy Deprecation: Past, Present, and Future」をご参照ください。
RuntimeClass
Kubernetes v1.25 以降、RuntimeClass の
node.k8s.io/v1beta1API バージョンはサポート対象外となりました。Kubernetes v1.20 から利用可能なnode.k8s.io/v1API バージョンを使用してください。HorizontalPodAutoscaler
Kubernetes 1.25 以降では、HorizontalPodAutoscaler の
autoscaling/v2beta1API バージョンは利用できなくなりました。Kubernetes 1.26 以降では、HorizontalPodAutoscaler の
autoscaling/v2beta2API バージョンは利用できなくなりました。Kubernetes 1.23 から利用可能なautoscaling/v2API バージョンを使用してください。
フロー制御リソース
Kubernetes v1.26 以降、FlowSchema および PriorityLevelConfiguration リソースに対して
flowcontrol.apiserver.k8s.io/v1beta1API バージョンは提供されなくなりました。flowcontrol.apiserver.k8s.io/v1beta2API は Kubernetes v1.23 から利用可能です。flowcontrol.apiserver.k8s.io/v1beta3API は Kubernetes v1.26 から利用可能です。
フィーチャーゲート
フィーチャーゲートには通常、アルファ、ベータ、GA の 3 つの段階があります。機能は、アルファ段階ではデフォルトで無効、ベータ段階では通常デフォルトで有効、GA 段階では常にデフォルトで有効になります。GA 段階では、機能を無効にすることはできず、その切り替えは後続のバージョンで削除されます。以下は、主な変更点の一部です。詳細については、「Feature Gates」をご参照ください。
Kubernetes 1.25 では、
SeccompDefaultがベータ版になりました。SeccompDefaultの使用方法に関する詳細については、「Restrict a Container's Syscalls with seccomp」をご参照ください。Kubernetes 1.25 では、カスタムリソース定義 (CRD) 検証表現言語がベータ版になり、
CustomResourceValidationExpressionsがデフォルトで有効になりました。共通表現言語 (CEL) を使用してカスタムリソースを検証する方が、Webhook を使用するよりも便利で効率的です。詳細については、「Validation rules」をご参照ください。Kubernetes 1.25 では、
ServerSideFieldValidationフィーチャーゲートがベータ版になり、デフォルトで有効になりました。API サーバーは不明なフィールドの検証をサポートし、これにより将来的に kubectl からこの機能を削除できます。詳細については、「Server-side field validation」をご参照ください。Kubernetes 1.25 では、新しい
ContainerCheckpointアルファ機能が追加され、Kubelet Checkpoint API が有効になります。詳細については、「Kubelet Checkpoint API」をご参照ください。Kubernetes 1.25 では、新しい
PodHasNetworkConditionアルファ機能が追加されました。この機能により、kubelet は Pod にPodHasNetwork条件をマークできるようになります。詳細については、「PodHasNetwork」をご参照ください。Kubernetes 1.25 では、新しい
UserNamespacesStatelessPodsSupportアルファ機能が追加され、ステートレス Pod のユーザー名前空間サポートが有効になります。Kubernetes 1.25 では、新しい
JobPodFailurePolicyアルファ機能が追加されました。これにより、コンテナの終了コードと Pod の状態に基づいて Job で Pod の障害を処理する方法を設定できます。この機能は Kubernetes 1.26 でベータ版になりました。Kubernetes 1.25 では、新しい
MultiCIDRRangeAllocatorAlpha 機能が追加されました。これにより、NodeIPAM は複数の ClusterCIDR をサポートできるようになります。コントローラーのサポートを有効にするには、--cidr-allocator-type=MultiCIDRRangeAllocatorを使用して kube-controller-manager を設定します。Kubernetes 1.25 では、
StatefulSetMinReadySecondsが GA になりました。minReadySecondsフィールドは StatefulSet でデフォルトでサポートされており、無効にすることはできません。Kubernetes 1.25 では、
CronJobTimeZoneがベータ版になりました。TimeZoneフィールドは CronJob でデフォルトで使用でき、無効にすることはできません。Kubernetes 1.25 では、
DaemonSetUpdateSurgeが GA になりました。MaxSurgeフィールドは DaemonSet でデフォルトで使用でき、無効にすることはできません。Kubernetes 1.25 では、
IdentifyPodOSが GA になりました。spec.podOSフィールドはデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.25 では、
CSIInlineVolumeが GA になりました。CSI インラインボリュームのサポートはデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.25 では、
EphemeralContainersが GA になりました。エフェメラルコンテナのサポートはデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.25 では、新しい
CSINodeExpandSecret機能が追加されました。これにより、ノードが追加されたときに使用するために、シークレット認証データを CSI ドライバーに渡せるようになります。Kubernetes 1.25 では、
CSIMigrationが GA になりました。この機能はデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.25 では、
CSIMigrationPortworxがベータ版になりました。Kubernetes 1.25 では、
ProbeTerminationGracePeriodはベータ版のままですが、そのデフォルト値はtrueに変更されました。詳細については、「Probe-level terminationGracePeriodSeconds」をご参照ください。Kubernetes 1.26 では、
JobTrackingWithFinalizersが GA になりました。デフォルトでは、Job の完了は残りの Pod を数えるのではなく、ファイナライザーを使用して追跡されます。詳細については、「Job tracking with finalizers」をご参照ください。Kubernetes 1.26 では、新しい
PDBUnhealthyPodEvictionPolicyアルファ機能が追加されました。これにより、PodDisruptionBudget で異常な Pod の退去ポリシーを指定できるようになります。Kubernetes 1.26 では、動的リソース割り当て API のサポートが有効になりました。これにより、カスタムパラメーターを持ち、Pod のライフサイクルから独立したリソースの管理と使用に対応します。
Kubernetes 1.26 では、新しい
StatefulSetStartOrdinalアルファ機能が追加されました。これにより、StatefulSet の開始序数を設定できるようになります。Kubernetes 1.26 では、
ServiceInternalTrafficPolicyが GA になりました。これにより、internalTrafficPolicyフィールドを使用して Service の内部トラフィックポリシーを設定できます。この機能はデフォルトで有効になっており、無効にすることはできません。詳細については、「Service Traffic Policy」をご参照ください。Kubernetes 1.26 では、新しい
ValidatingAdmissionPolicyアルファ機能が追加されました。これは、CEL 式を使用して拡張可能なアドミッションコントローラーを実装するものです。Kubernetes 1.26 では、
MixedProtocolLBServiceが GA になりました。これにより、LoadBalancerタイプの同じ Service インスタンスで異なるプロトコルを使用できます。Kubernetes 1.26 では、
EndpointSliceTerminatingConditionが GA になりました。これにより、EndpointSlice のTerminatingおよびServing条件フィールドを使用できます。この機能は無効にできません。Kubernetes 1.26 では、
APIServerIdentityがベータ版になりました。デフォルトでは、アクティブな各 API サーバーに対してkube-system名前空間に Lease を作成します。Kubernetes 1.26 では、
DelegateFSGroupToCSIDriverが GA になり、無効にすることはできません。Kubernetes 1.26 では、
NodeOutOfServiceVolumeDetachがベータ版になり、デフォルトで有効になりました。ノードがnode.kubernetes.io/out-of-servicetaint でサービス停止中とマークされると、この taint を許容しない Pod は強制的に削除されます。そのノードで終了した Pod に対して、ボリュームのデタッチが直ちに実行されます。Kubernetes 1.26 では、
ServiceIPStaticSubrangeが GA になりました。これにより、Service の ClusterIP 割り当て戦略が ClusterIP 範囲を細分化できるようになります。Kubernetes 1.26 では、
CPUManagerおよびDevicePluginsが GA になりました。これらの機能はデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.26 では、新しい
ComponentSLIsアルファ機能が追加されました。これにより、kubelet、kube-scheduler、kube-proxy、kube-controller-manager、cloud-controller-manager などの Kubernetes コンポーネントで/metrics/slisエンドポイントが有効になります。これにより、ヘルスチェックメトリックのスクレイピングが可能になります。Kubernetes 1.26 では、
WindowsHostProcessContainersが GA になりました。Windows HostProcess コンテナのサポートはデフォルトで有効になっています。Kubernetes 1.26 では、
ExpandedDNSConfigがベータ版になりました。これにより、より多くの DNS 検索ドメインとより長い検索ドメインリストを使用できます。これにはランタイムのサポートが必要です。Kubernetes 1.26 では、
LegacyServiceAccountTokenNoAutoGenerationが GA になりました。これにより、Secret に基づくサービスアカウントトークンの自動生成が停止します。この機能はデフォルトで有効になっており、無効にすることはできません。Kubernetes 1.26 では、
ProxyTerminatingEndpointsがベータ版になり、デフォルトで有効になりました。これにより、ExternalTrafficPolicyがLocalに設定されている場合に、kube-proxy が終了中のエンドポイントを処理できるようになります。Kubernetes 1.26 では、新しい
LegacyServiceAccountTokenTrackingアルファ機能が追加され、デフォルトでは無効になっています。この機能は、有効期限を示すために、Secret のサービスアカウントトークンにkubernetes.io/legacy-token-last-usedというラベルを追加します。Kubernetes 1.26 では、
PodDisruptionConditions機能はベータ版に昇格し、デフォルトで有効になります。中断が原因で Pod が削除されていることを示すために、Pod のステータスにDisruptionTarget条件を追加できます。Pod の終了理由に関する詳細については、reasonフィールドで確認できます。詳細については、「Pod の中断条件」をご参照ください。
Kubernetes 1.26 の機能強化
セキュリティ強化
ノード上の以下の機密性の高い Kubernetes ファイルのアクセス権限がさらに強化されました。
ファイルパス | 強化されたアクセス権限 |
/etc/kubernetes/admin.conf | 600 |
/etc/kubernetes/kube.conf | 600 |
/etc/kubernetes/controller-manager.conf | 600 |
/etc/kubernetes/kubelet.conf | 600 |
/etc/kubernetes/scheduler.conf | 600 |
/etc/kubernetes/manifests/*.yaml | 600 |
/etc/kubernetes/pki/*.key | 600 |
/etc/kubernetes/pki/*.crt | 600 |
/etc/kubernetes/pki/dashboard/*.crt | 600 |
/etc/kubernetes/pki/etcd/*.pem | 600 |
/var/lib/etcd/cert/*.pem | 600 |
/var/lib/etcd/cert/*.csr | 600 |
/var/lib/kubelet/pki/*.crt | 600 |
/var/lib/kubelet/config.yaml | 600 |
/usr/lib/systemd/system/etcd.service | 600 |
/etc/systemd/system/kubelet.service | 600 |
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf | 600 |