Container Service for Kubernetes (ACK) は、Certified Kubernetes Conformance Program の条件に厳密に準拠しています。このトピックでは、更新ノート、主な変更点、新機能、非推奨の機能と API、機能ゲート、セキュリティ強化など、Kubernetes 1.26 の更新内容について説明します。
バージョンの更新
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 v1.5.0 以降、および TerwayControlplane v1.5.0 以降 | なし |
更新ノート
主な変更点
Kubernetes 1.25 および 1.26 では、多数のベータ API が非推奨になっています。クラスターを Kubernetes 1.26 に更新する前に、非推奨のベータ API と対話する必要があるコントローラーまたはアプリケーションが、推奨される API バージョンを使用するように更新されているかどうかを確認してください。非推奨の API の詳細については、非推奨の API を参照してください。
Kubernetes 1.26 は CRI v1alpha2 をサポートしなくなりましたが、コンテナーランタイムが CRI v1 をサポートする必要があります。したがって、Kubernetes 1.26 は containerd 1.5 以前をサポートしていません。Kubernetes 1.26 では containerd 1.6 以降を使用してください。クラスターを Kubernetes 1.26 に更新する前に、まず containerd を 1.6.0 以降に更新する必要があります。
PSP アドミッションコントローラーは Kubernetes 1.21 で非推奨になり、Kubernetes 1.25 から削除されました。PSP アドミッションコントローラーは複雑であり、過剰な権限を提供する可能性があるため、セキュリティ上の問題を引き起こす可能性があります。詳細については、PodSecurityPolicy: The Historical Context を参照してください。
PSP アドミッションコントローラーを使用できるクラスターの場合は、クラスターを更新する前に、次の制限のいずれかを設定してください。
ACS が提供するポリシー管理機能を使用します。ACS は、Kubernetes のシナリオに最適なポリシーを多数提供しています。これらのポリシーは、構成と使用が簡単です。詳細については、Pod セキュリティポリシーの構成 を参照してください。
使いやすい組み込みの Pod セキュリティアドミッションを使用します。詳細については、Pod セキュリティアドミッション を参照してください。PodSecurityPolicy から組み込みの PodSecurity アドミッションコントローラーへの移行方法の詳細については、PodSecurityPolicy から組み込みの PodSecurity アドミッションコントローラーへの移行 を参照してください。
サードパーティのアドミッションプラグインを手動でデプロイおよび構成します。
1.26.15-aliyunacs.1 では、以下の Common Vulnerabilities and Exposures (CVE) の脆弱性が修正されています。
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
新機能
Kubernetes 1.23 では一時コンテナーのベータ版が使用され、Kubernetes 1.25 では安定版が使用されます。確認したい Pod がクラッシュした場合、または
kubectl exec
を実行するためのデバッグツールがない場合は、Pod 内で一時コンテナーを実行して Pod の状態を確認し、任意のコマンドを実行できます。詳細については、一時コンテナー を参照してください。Kubernetes 1.25 の cgroup v2 は安定フェーズに達しました。cgroup v2 は cgroup v1 の最適化バージョンです。詳細については、cgroup v2 について を参照してください。
Kubernetes 1.25 での Windows のサポートは継続的に最適化されています。たとえば、CI 単体テスト および 適合テスト がサポートされており、Windows の運用準備状況のための新しいリポジトリを作成できます。
Kubernetes 1.25 では、イメージレジストリ k8s.gcr.io は registry.k8s.io にリダイレクトされ、リクエストも registry.k8s.io にリダイレクトされます。詳細については、k8s.gcr.io の registry.k8s.io へのリダイレクト を参照してください。
Kubernetes 1.25 では、ネットワークポリシーの EndPort フィールドが一般提供 (GA) フェーズに達しました。ネットワークプラグインが EndPort フィールドをサポートしている場合は、ネットワークポリシーを構成するときに、このフィールドを使用してポートの範囲を指定できます。ネットワークプラグインが EndPort フィールドをサポートしておらず、このフィールドを使用してネットワークポリシーを作成した場合、ポリシーは単一ポートフィールドにのみ適用されます。詳細については、ネットワークポリシー を参照してください。
Kubernetes 1.25 では、ローカル一時ストレージ容量の分離が GA (正式リリース) フェーズに達しました。この機能は、EmptyDir ボリュームなど、Pod 間のローカル一時ストレージの容量分離をサポートします。Pod は、ローカル一時ストレージの消費量を厳しく制限できます。Pod がローカル一時ストレージの上限を超えて消費した場合、Pod はエビクトされます。詳細については、ローカル一時ストレージ容量の分離 を参照してください。
Kubernetes 1.25 では、一時 CSI ボリュームが安定バージョンに更新されました。一時 CSI ボリュームを使用する場合、永続ボリューム (PV) および永続ボリュームクレーム (PVC) から発生した CSI ボリュームを Pod の仕様で直接指定することはできません。詳細については、一時インライン CSI ボリューム を参照してください。
Kubernetes 1.25 では、Key Management Service (KMS) v2 alpha1 API が導入され、パフォーマンスが向上し、キーのローテーションと可観測性が最適化されました。API は AES-CBC を AES-GCM に置き換え、DEK を使用して静的データ (Kubernetes Secrets) を暗号化します。暗号化プロセス中に追加の操作は必要ありません。暗号化されたデータは、AES-GCM および AES-CBC を使用して復号化できます。詳細については、データ暗号化に KMS プロバイダーを使用する を参照してください。
Kubernetes 1.25 では、Container Object Storage Interface (COSI) 標準が導入され、オブジェクトストレージのプロビジョニングと消費が標準化されました。COSI はアルファフェーズにあります。
Kubernetes 1.25 では、PodHasNetwork が Pod の
status
フィールドで True に設定されている場合、Pod ランタイムサンドボックスが初期化および作成され、サンドボックスのネットワークが構成されます。これは、kubelet が PodHasNetwork が True に設定された後にのみ、イメージのプルを開始してコンテナーを起動するためです。したがって、このフィールドを使用して、イメージのプル速度やアプリケーションの負荷などの特性を除外した Pod の初期化レイテンシを示すことができます。PodHasNetwork を使用して、サービスレベル指標 (SLI) を正確に生成できます。PodHasNetwork はアルファフェーズにあります。PodHasNetwork を使用するには、kubelet で PodHasNetworkCondition 機能ゲートを有効にします。詳細については、これは、Pod について報告される既存の Initialized 条件とどう違うのですか? を参照してください。Kubernetes 1.25 では、StatefulSets の minReadySeconds フィールドが安定フェーズに達しました。このフィールドを使用すると、各 Pod が指定された期間待機できるため、StatefulSets のローリングアップデートが遅くなります。詳細については、minReadySeconds を参照してください。
Kubernetes 1.25 では、DaemonSet maxSurge が安定フェーズに達しました。maxSurge は、DaemonSet のローリングアップデート中にノードで作成できる追加の Pod の数を指定します。これは、DaemonSet のダウンタイムを最大限に短縮するのに役立ちます。2 つのアクティブな Pod がノード上の同じポートを共有することはできないため、DaemonSets で maxSurge と hostPort を同時に使用することはできません。詳細については、DaemonSet でローリングアップデートを実行する を参照してください。
Kubernetes 1.25 では、ユーザー名前空間を使用して Pod を実行するためのアルファサポートが追加されました。ユーザー名前空間では、Pod 内のルートユーザーを Pod 外のゼロ以外の ID にマップできます。ID は、コンテナービューからはルートユーザー ID であり、ホストビューからは通常の非特権 ID です。この機能を使用するには、UserNamespacesStatelessPodsSupport 機能ゲートを有効にし、コンテナーランタイムがこの機能をサポートしていることを確認する必要があります。詳細については、Kubernetes 1.25: ユーザー名前空間を使用して Pod を実行するためのアルファサポート を参照してください。
Kubernetes 1.25 では、RetroactiveDefaultStorageClass 機能ゲートが追加され、デフォルトの StorageClass が PVC に割り当てられる方法が変更されました。この機能ゲートが有効になる前は、StorageClass が PVC の前に作成された場合にのみ、デフォルトの StorageClass が PVC に割り当てられました。それ以外の場合、PVC の StorageClass は nil 状態のままです。この機能ゲートが有効になると、PVC などを削除してから再作成する必要がなくなります。デフォルトの StorageClass が PVC に自動的に割り当てられます。この機能ゲートは Kubernetes 1.26 でベータフェーズに達し、Kubernetes 1.26 ではデフォルトで有効になっています。
Kubernetes 1.25 では、JobPodFailurePolicy が追加されました。この機能を使用すると、Pod の終了コードと状態に基づいて Pod の中断を処理するようにジョブを構成できます。この機能は Kubernetes 1.26 でベータフェーズに達します。ジョブで podFailurePolicy フィールドを定義して、Pod の障害ポリシーを構成し、不要な Pod の再試行を回避し、Pod のエビクションを無視できます。詳細については、Pod 障害ポリシーを使用して Pod の中断を無視する を参照してください。
Kubernetes 1.25 では、PodTopologySpread がローリングアップデート中に Pod を均等に分散できないという問題が修正されました。minDomains フィールドのベータサポートが追加されました。
Kubernetes 1.25 では、kube-proxy が大規模クラスター向けに最適化されています。たとえば、1,000 個のエンドポイントを持つクラスターでは、未使用の iptables ルールが一定期間保持されます。最大保持期間は、iptables ルールの最大同期サイクルと同じです。したがって、毎回古い iptables ルールをスキャンする必要がなくなります。小規模クラスターでは、未使用の iptables ルールはすぐに削除されます。
Kubernetes 1.26 では、動的リソース割り当て API が追加されました。API を使用して、Pod 間または Pod 内のコンテナー間でリソースを要求および共有できます。API は、リソースを初期化するためのパラメーターも提供します。API はアルファフェーズにあります。この API を使用するには、DynamicResourceAllocation 機能ゲートと resource.k8s.io/v1alpha1 API グループを有効にし、管理するリソースのリソースドライバーをインストールする必要があります。詳細については、動的リソース割り当てのアルファ API を参照してください。
Kubernetes 1.26 では、非グレースフルノードシャットダウン がベータフェーズに達しました。ノードがシャットダウンされると、ノード上の Pod は Terminating 状態のままになり、VolumeAttachments を削除できません。Pod が StatefulSet によって作成された場合、重複する Pod 名は許可されないため、Pod を別のノードで再作成できません。kubelet によって実行されるノードシャットダウン監視に基づく グレースフルノードシャットダウン と比較して、
out-of-service
taint をノードに手動で追加して、非グレースフルノードシャットダウンをトリガーし、ノード上の Pod を別のノードに移行する必要があります。ノードが回復したら、taint を手動で削除する必要があります。Kubernetes 1.26 では、ボリュームを Pod にマウントするときに、fsGroup を CSI ドライバーに委任できます。この機能は、kubelet の代わりに CSI ドライバーが fsGroup を適用して、ファイルとディレクトリの権限を変更するためのメカニズムを提供します。この機能はユーザーに対して透過的です。CSI ドライバー開発者の場合は、CSI ドライバー fsGroup サポート を参照してください。
Kubernetes 1.26 では、Pod スケジューリングゲートが追加され、Pod がスケジューリングの準備ができたらスケジューラーに通知します。外部イベントにより多数の保留中の Pod をスケジューリングできない場合、スケジューラーのパフォーマンスに悪影響を及ぼします。前述の問題を解決するために、Pod スケジューリングゲートを使用すると、新しく作成された Pod がスケジューリングの準備ができていないことを主張できます。Pod に
spec.schedulingGates
が構成されている場合、スケジューラーは Pod のスケジューリング時に Pod を無視します。このゲートには、Pod がスケジューリングの準備ができたら確認し、ゲートを削除する外部コントローラーが必要です。詳細については、Pod スケジューリングの準備状況 を参照してください。Kubernetes 1.26 では、CPU マネージャーが GA フェーズに達しました。この機能は Kubernetes 1.10 でベータフェーズに達しました。CPU マネージャーは kubelet の一部であり、コンテナーに排他的な CPU を割り当てるために使用されます。CPU マネージャーは 3 つのポリシーをサポートしています。詳細については、ノードの CPU 管理ポリシーを制御する を参照してください。
Kubernetes 1.26 では、名前空間をまたがるストレージデータソースのアルファサポートが追加されました。この機能を使用すると、PVC に異なる名前空間に属するデータソースを指定できます。詳細については、Kubernetes v1.26: 名前空間をまたがるストレージデータソースのアルファサポート を参照してください。
Kubernetes 1.26 では、
.spec.unhealthyPodEvictionPolicy=AlwaysAllow
ポリシーを指定して、PodDisruptionBudget に常に異常な Pod のエビクションを許可させることができます。この機能はアルファフェーズにあります。この機能を使用するには、PDBUnhealthyPodEvictionPolicy 機能ゲートを有効にする必要があります。詳細については、異常な Pod のエビクションポリシー を参照してください。Kubernetes 1.26 では、コンテナーライフサイクルフック preStop および postStart の
httpGet
は、scheme
およびheaders
フィールドの設定に準拠しています。プローブと同じ方法で、カスタムヘッダーを構成し、HTTPS を有効にできます。HTTPS が誤って使用された場合、エラーメッセージが返され、システムは互換性の問題を引き起こすことなく HTTP に切り替えます。kubelet で--feature-gates=ConsistentHTTPGetHandlers=false
を指定して、この機能を無効にできます。Kubernetes 1.26 では、API Priority and Fairness (APF) は他の優先度レベルからシートを借用できます。
.spec.limited
に 2 つのフィールドが追加されました。lendablePercent
フィールドは、他の優先度レベルが現在のレベルから借用できるシートの割合を指定します。borrowingLimitPercent
フィールドは、他の優先度レベルから借用できるシートの数を指定します。Kubernetes 1.26 では、kube-controller-manager コンポーネントに
--concurrent-horizontal-pod-autoscaler-syncs
を設定して、Horizontal Pod Autoscaler (HPA) コントローラーが使用するワーカーの数を指定できます。Kubernetes 1.26 では、HPA のラベルセレクターが検証されます。複数の HPA が同じ Pod またはデプロイメントのコレクションを指している場合、HPA は有効にならず、AmbiguousSelector イベントが生成されます。
Kubernetes 1.26 では、
storageclass.kubernetes.io/is-default-class
アノテーションを追加することにより、複数の StorageClass がデフォルトの StorageClass として指定されている場合、システムは例外をスローする代わりに最新の StorageClass を選択します。
非推奨の機能
非推奨および削除されたストレージドライバー
Kubernetes 1.25 では、ストレージ統合のためのインツリーボリュームプラグインが削除されました。SIG Storage は、以前の Kubernetes バージョンでインツリーボリュームプラグインをアウトオブツリー Container Storage Interface (CSI) プラグインに移行するために、CSI 移行 をリリースしました。Kubernetes 1.25 では、コア CSI 移行 が GA フェーズに達しました。
Kubernetes 1.25 では、GlusterFS および Portworx インツリーボリュームプラグインは非推奨になり、Flocker、Quobyte、および StorageOS インツリーボリュームプラグインは削除されました。インツリー vSphere ストレージドライバー は、7.0u2 より前の vSphere バージョンをサポートしていません。
Kubernetes 1.26 では、GlusterFS インツリーストレージドライバーは非推奨になり、非推奨の OpenStack インツリーストレージ統合 (Cinder ボリューム) は削除されました。
iptables チェーン所有権のクリーンアップ
ほとんどの場合、Kubernetes はパケットが宛先に到達できるように iptables チェーンを作成します。iptables チェーンとその名前は Kubernetes の内部実装であり、内部使用のみに適しています。一部のコンポーネントは iptables チェーンに依存していますが、これらのチェーンは Kubernetes のどのコンポーネントの一部にもなることを意図していません。詳細については、Kubernetes の IPTables チェーンは API ではありません を参照してください。
1.25 以降の Kubernetes バージョンでは、kubelet は IPTablesCleanup 機能ゲートを使用して移行を段階的に完了します。これは、NAT テーブルに KUBE-MARK-DROP、KUBE-MARK-MASQ、KUBE-POSTROUTING などの iptables チェーンが作成されるのを防ぐのに役立ちます。
iptables チェーン所有権のクリーンアップ方法の詳細については、IPTables チェーン所有権のクリーンアップ を参照してください。
インツリー資格情報管理コードの削除
1.26 以降の Kubernetes バージョンでは、Azure および Google Cloud のネストされた ID 認証コードが client-go および kubectl から削除されました。認証プラグインを使用して置き換えることができます。詳細については、認証プラグイン を参照してください。
kube-proxy からユーザー空間モードを削除する
Kubernetes 1.26 では、ユーザー空間モードが削除されました。非推奨のユーザー空間モードは、Linux または Windows ではサポートされなくなりました。Linux ユーザーは iptables または IPVS を使用でき、Windows ユーザーはカーネル空間モードを使用できます。
--mode userspace
を使用するとエラーが発生します。Windows winkernel kube-proxy は、Windows HNS v1 API をサポートしなくなりました。
Kubectl は
--prune-whitelist
フラグを非推奨にしましたKubernetes 1.26 では、
--prune-whitelist
フラグは 非推奨 になり、非推奨--許可リストの枝刈り
Inclusive Naming Initiative をサポートするために に置き換えられました。非推奨のフラグは、後のバージョンで削除されます。DynamicKubeletConfig 機能ゲートの削除
DynamicKubeletConfig 機能ゲートは削除されました。ノードの kubelet 構成は、API を呼び出すことによって動的に更新できます。機能ゲートは Kubernetes 1.24 で kubelet から削除され、Kubernetes 1.26 で API サーバーから削除されました。これにより、コードが簡素化され、安定性が向上します。代わりに kubelet 構成ファイルを変更してから kubelet を再起動することをお勧めします。詳細については、コードから DynamicKubeletConfig 機能ゲートを削除する を参照してください。
コマンドライン引数の削除
Kubernetes 1.25 では、kubeadm UnversionedKubeletConfigMap が GA フェーズに達しました。デフォルトでは、kube-system または kubelet-config が kube-system または kubelet-config-x.yy の代わりに使用されます。
Kubernetes 1.25 では、kubeadm は
node-role.kubernetes.io/master:NoSchedule
ラベルをコントロールプレーンノードに追加しなくなりました。kubeadm upgrade apply が使用されると、ラベルは削除されます。Kubernetes 1.25 では、Seccomp アノテーション
seccomp.security.alpha.kubernetes.io/pod
およびcontainer.seccomp.security.alpha.kubernetes.io
はサポートされなくなりました。SeccompProfile を使用することをお勧めします。詳細については、seccomp を使用してコンテナーのシステムコールを制限する を参照してください。Kubernetes 1.25 および 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 が非推奨になっています。詳細については、非推奨の API を参照してください。
CronJob
1.25 以降の Kubernetes バージョンでは、batch/v1beta1 API を使用して CronJob を作成できなくなりました。Kubernetes 1.21 以降で使用可能な batch/v1 API を使用できます。
EndpointSlice
1.25 以降の Kubernetes バージョンでは、discovery.k8s.io/v1beta1 API を使用して EndpointSlice を作成できなくなりました。Kubernetes 1.21 以降で使用可能な discovery.k8s.io/v1 API を使用できます。
discovery.k8s.io/v1 の以下の変更点に特に注意する必要があります。
エンドポイントの NodeName フィールドは、非推奨の topology["kubernetes.io/hostname"]g フィールドの代わりに使用されます。
エンドポイントの Zone フィールドは、非推奨の topology["kubernetes.io/zone"] フィールドの代わりに使用されます。
Topology フィールドは、非推奨の deprecatedTopology フィールドに置き換えられます。フィールドは API v1 では使用できません。
Event
Kubernetes 1.25 では、events.k8s.io/v1beta1 API を使用してイベントを作成できなくなりました。Kubernetes 1.19 以降で使用可能な events.k8s.io/v1 API を使用できます。
events.k8s.io/v1 の以下の変更点に特に注意する必要があります。
type フィールドは、Normal または Warning にのみ設定できます。
involvedObject フィールドは regarding に名前が変更されました。
events.k8s.io/v1 イベントを作成するときは、action、reason、reportingController、および reportingInstance フィールドが必要です。
eventTime フィールドは、非推奨の firstTimestamp フィールドの代わりに使用されます。firstTimestamp フィールドは deprecatedFirstTimestamp に名前が変更され、events.k8s.io/v1 イベントでは許可されません。
series.lastObservedTime フィールドは、非推奨の lastTimestamp フィールドの代わりに使用されます。lastTimestamp フィールドは deprecatedLastTimestamp に名前が変更され、events.k8s.io/v1 イベントでは許可されません。
series.count フィールドは、非推奨の count フィールドの代わりに使用されます。count フィールドは deprecatedCount に名前が変更され、events.k8s.io/v1 イベントでは許可されません。
reportingController フィールドは、非推奨の source.component フィールドの代わりに使用されます。source.component フィールドは deprecatedSource.component に名前が変更され、events.k8s.io/v1 イベントでは許可されません。
reportingInstance フィールドは、非推奨の source.host フィールドの代わりに使用されます。source.host フィールドは deprecatedSource.host に名前が変更され、events.k8s.io/v1 イベントでは許可されません。
PodDisruptionBudget
1.25 以降の Kubernetes バージョンでは、policy/v1beta1 API を使用して PodDisruptionBudget を作成できなくなりました。Kubernetes 1.21 以降で使用可能な policy/v1 API を使用できます。
policy/v1 の以下の変更点に特に注意する必要があります。policy/v1 PodDisruptionBudgets で spec.selector が空 ({}) のままになっている場合、名前空間内のすべての Pod が選択されます。policy/v1beta1 PodDisruptionBudgets では、spec.selector が空のままになっている場合、Pod は選択されません。spec.selector を指定しない場合、どちらの API バージョンでも Pod は選択されません。
PodSecurityPolicy
1.25 以降の Kubernetes バージョンでは、policy/v1beta1 API を使用して PodSecurityPolicy を作成できなくなり、PSP アドミッションコントローラーは削除されました。PodSecurityPolicy から Pod セキュリティアドミッション またはサードパーティのアドミッション webhook に移行する必要があります。
移行の詳細については、PodSecurityPolicy から組み込みの PodSecurity アドミッションコントローラーへの移行 を参照してください。非推奨の詳細については、PodSecurityPolicy の非推奨: 過去、現在、そして未来 を参照してください。
RuntimeClass
1.25 以降の Kubernetes バージョンでは、node.k8s.io/v1beta1 API を使用して RuntimeClass を作成できなくなりました。Kubernetes 1.20 以降で使用可能な node.k8s.io/v1 API を使用できます。
HorizontalPodAutoscaler
1.25 以降の Kubernetes バージョンでは、autoscaling/v2beta1 API を使用して Horizontal Pod Autoscaler (HPA) を作成できなくなりました。
1.26 以降の Kubernetes バージョンでは、autoscaling/v2beta2 API を使用して HPA を作成できなくなりました。Kubernetes 1.23 以降で使用可能な autoscaling/v2 API を使用できます。
フロー制御リソース
1.26 以降の Kubernetes バージョンでは、flowcontrol.apiserver.k8s.io/v1beta1 API を使用して FlowSchema または PriorityLevelConfiguration を作成できなくなりました。API は、Kubernetes 1.23 以降で flowcontrol.apiserver.k8s.io/v1beta2 を使用できます。API は、Kubernetes 1.26 以降で flowcontrol.apiserver.k8s.io/v1beta3 を使用できます。
機能ゲート
機能ゲートには 3 つのフェーズがあります。アルファフェーズでは、機能ゲートはデフォルトで無効になっています。ベータフェーズでは、機能ゲートはデフォルトで有効になっています。GA フェーズでは、機能ゲートはデフォルトで有効になっており、無効にすることはできません。機能ゲートを有効および無効にするために使用されるスイッチは、後のバージョンで削除されます。詳細については、機能ゲート を参照してください。
Kubernetes 1.25 では、SeccompDefault がベータフェーズに達しました。SeccompDefault の使用方法の詳細については、seccomp を使用してコンテナーのシステムコールを制限する を参照してください。
Kubernetes 1.25 では、CustomResourceDefinition (CRD) Validation Expression Language がベータフェーズに達し、CustomResourceValidationExpressions がデフォルトで有効になっています。webhook を使用するよりも、Common Expression Language (CEL) を使用して CRD を検証する方が効率的です。詳細については、検証ルール を参照してください。
Kubernetes 1.25 では、ServerSideFieldValidation 機能ゲートがベータフェーズに達し、デフォルトで有効になっています。API サーバーは不明なフィールドを検証できます。したがって、フィールド検証機能は後のバージョンで kubectl から削除されます。詳細については、API サーバーでサポートされている不明なフィールドの検証 を参照してください。
Kubernetes 1.25 では、ContainerCheckpoint アルファ機能が追加され、Kubelet チェックポイント API が有効になっています。詳細については、Kubelet チェックポイント API を参照してください。
Kubernetes 1.25 では、PodHasNetworkCondition アルファ機能が追加されました。この機能により、kubelet は PodHasNetwork 条件を Pod に追加できます。詳細については、PodHasNetwork を参照してください。
Kubernetes 1.25 では、UserNamespacesStatelessPodsSupport アルファ機能が追加され、ステートレス Pod のユーザー名前空間が有効になりました。
Kubernetes 1.25 では、JobPodFailurePolicy アルファ機能が追加されました。この機能により、ジョブは Pod の終了コードと状態に基づいて Pod の中断を処理できます。この機能は Kubernetes 1.26 でベータフェーズに達します。
Kubernetes 1.25 では、MultiCIDRRangeAllocator アルファ機能が追加され、NodeIPAM が複数の ClusterCIDR をサポートできるようになりました。kube-controller-manager に
--cidr-allocator-type=MultiCIDRRangeAllocator
が構成されている場合、コントローラーは複数の ClusterCIDR をサポートできます。Kubernetes 1.25 では、StatefulSetMinReadySeconds 機能が GA フェーズに達しました。この機能はデフォルトで minReadySeconds フィールドをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、CronJobTimeZone 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、TimeZone フィールドをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、DaemonSetUpdateSurge 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、DaemonSet MaxSurge フィールドをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、IdentifyPodOS 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、spec.podOS フィールドをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、CSIInlineVolume 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、CSI インラインボリュームをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、EphemeralContainers 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、一時コンテナーをサポートしており、無効にすることはできません。
Kubernetes 1.25 では、CSINodeExpandSecret 機能が追加されました。この機能により、ノードを追加するときに、Secrets に格納されている ID 認証データを CSI ドライバーに渡すことができます。
Kubernetes 1.25 では、CSIMigration 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、無効にすることはできません。
Kubernetes 1.25 では、CSIMigrationPortworx 機能がベータフェーズに達しました。
Kubernetes 1.25 では、ProbeTerminationGracePeriod 機能はまだベータフェーズですが、デフォルト値が True に変更されました。詳細については、プローブレベルの terminationGracePeriodSeconds を参照してください。
Kubernetes 1.26 では、JobTrackingWithFinalizers 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、残りの Pod をカウントする代わりにジョブの Pod を追跡することによってジョブの進行状況を追跡します。詳細については、ファイナライザーを使用したジョブ追跡 を参照してください。
Kubernetes 1.26 では、PDBUnhealthyPodEvictionPolicy アルファ機能が追加され、PodDisruptionBudget の異常な Pod のエビクションポリシーを構成できるようになりました。
Kubernetes 1.26 では、動的リソース割り当て API がサポートされています。カスタムパラメーターと独立した Pod ライフサイクルを使用してリソースを管理および使用できます。
Kubernetes 1.26 では、StatefulSetStartOrdinal アルファ機能が追加され、StatefulSet 開始序数を構成できるようになりました。
Kubernetes 1.26 では、ServiceInternalTrafficPolicy 機能が GA フェーズに達しました。この機能により、internalTrafficPolicy フィールドを使用してサービスの内部トラフィックポリシーを定義できます。この機能はデフォルトで有効になっており、無効にすることはできません。詳細については、サービス内部トラフィックポリシー を参照してください。
Kubernetes 1.26 では、ValidatingAdmissionPolicy アルファ機能が追加されました。CEL 式を使用して、拡張可能なアドミッションコントローラーを実装できます。
Kubernetes 1.26 では、MixedProtocolLBService 機能が GA フェーズに達しました。この機能により、同じ LoadBalancer サービスで異なるプロトコルを使用できます。
Kubernetes 1.26 では、EndpointSliceTerminatingCondition 機能が GA フェーズに達しました。この機能は、EndpointSlice Terminating および Serving 条件フィールドをサポートするために有効になっており、無効にすることはできません。
Kubernetes 1.26 では、APIServerIdentity 機能がベータフェーズに達しました。デフォルトでは、この機能は kube-system で有効になっており、アクティブな API サーバーごとにリースを作成します。
Kubernetes 1.26 では、DelegateFSGroupToCSIDriver 機能が GA フェーズに達し、無効にすることはできません。
Kubernetes 1.26 では、NodeOutOfServiceVolumeDetach 機能がベータフェーズに達し、デフォルトで有効になっています。ノードをアウトオブサービスとしてマークするために
node.kubernetes.io/out-of-service
taint を追加した後、taint を許容しない Pod は強制的に削除されます。ボリュームデタッチ操作は、ノード上の終了した Pod に対して実行されます。Kubernetes 1.26 では、ServiceIPStaticSubrange 機能が GA フェーズに達しました。この機能により、Service ClusterIP 割り当てポリシーで ClusterIP 範囲を細分化できます。
Kubernetes 1.26 では、CPUManager および DevicePlugins 機能が GA フェーズに達しました。これらの機能はデフォルトで有効になっており、無効にすることはできません。
Kubernetes 1.26 では、ComponentSLIs アルファ機能が追加され、ヘルスチェックメトリクスを収集するために、以下の Kubernetes コンポーネントで
/metrics/slis
エンドポイントが有効になります。kubelet、kube-scheduler、kube-proxy、kube-controller-manager、および cloud-controller-manager。Kubernetes 1.26 では、WindowsHostProcessContainers 機能が GA フェーズに達しました。この機能はデフォルトで有効になっており、Windows HostProcess コンテナーをサポートしています。
Kubernetes 1.26 では、ExpandedDNSConfig 機能がベータフェーズに達しました。この機能により、より多くの DNS 検索パスとより長い DNS 検索パスリストが可能になります。この機能には、コンテナーランタイムのサポートが必要です。
Kubernetes 1.26 では、LegacyServiceAccountTokenNoAutoGeneration 機能が GA フェーズに達しました。この機能は、Secrets に基づく ServiceAccount トークンの自動生成を無効にします。この機能はデフォルトで有効になっており、無効にすることはできません。
Kubernetes 1.26 では、ProxyTerminatingEndpoints 機能がベータフェーズに達しました。この機能はデフォルトで有効になっており、ExternalTrafficPolicy=Local の場合に kube-proxy が終了エンドポイントを処理できるようにします。
Kubernetes 1.26 では、LegacyServiceAccountTokenTracking アルファ機能が追加されました。デフォルトでは、この機能は無効になっています。この機能は、トークンの有効期限を示すために、Secrets に基づいて生成された ServiceAccount トークンに
kubernetes.io/legacy-token-last-used
ラベルを追加します。Kubernetes 1.26 では、PodDisruptionConditions 機能がベータフェーズに達し、デフォルトで有効になっています。DisruptionTarget 条件を Pod に追加して、Pod が中断のために削除されようとしていることを示し、
reason
フィールドで Pod 終了の理由をクエリできます。詳細については、Pod 中断条件 を参照してください。
Kubernetes 1.26 の機能強化
セキュリティの強化
ACK は、クラスターノード上の以下の 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 |