Alibaba Cloud の Container Service for Kubernetes は、コミュニティリリースに準拠していることが認定されています。このトピックでは、Kubernetes 1.34 の ACK リリースにおける主な変更点について説明します。これには、アップグレードに関する考慮事項、主な変更点、新機能、非推奨の機能と API、および機能ゲートが含まれます。
コンポーネントバージョンのガイド
次の表に、ACK クラスターのコアコンポーネントのバージョンを示します。
コアコンポーネント | バージョン番号 |
Kubernetes | 1.34.1-aliyun.1, 1.34.3-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.3 |
CoreDNS | v1.11.3.5-5321daf49-aliyun |
CSI | |
CNI | Flannel v0.15.1.23-33d25c1-aliyun |
Terway および TerwayControlplane は v1.15.0 以降 |
主な変更点
バージョン 1.34 以降、新しいノードプールを作成する際に OS イメージを指定しない場合、デフォルトで Alibaba Cloud Linux 3 のコンテナ最適化バージョンが使用されます。
バージョン 1.34 以降、Terway ネットワークプラグイン を使用し、DataPath V2 が有効になっている新しいクラスターでは、Terway を使用するノード上で kube-proxy コンテナが実行されなくなります。DataPath V2 は eBPF を使用して、共有 ENI モードでのネットワークアクセスを高速化します。
この変更は、新しいクラスターにのみ適用されます。
バージョン 1.34 以降、ACK Pro クラスターで通常ノードプールおよびマネージドノードプールを作成する際に、
serverTLSBootstrapパラメーターとRotateKubeletServerCertificate機能ゲートがデフォルトで有効になります。この設定を有効にすると、ノードプール内の各ノードの kubelet サーバーサイド証明書が自動的にローテーションされます。また、この設定により、クラスター CA が kubelet サーバーサイド証明書を検証できるようになり、クラスターノードのセキュリティが強化されます。
バージョン 1.34 以降、kubelet サーバーサイドでは
TLS_RSA_WITH_AES_256_GCM_SHA384およびTLS_RSA_WITH_AES_128_GCM_SHA256TLS 暗号スイートがサポートされなくなりました。既存のクラスターをバージョン 1.34 にアップグレードすると、新しいノードにはこの変更が自動的に適用されます。バージョン 1.34 以降、登録時にノードを
unschedulableとしてマークすることがサポートされなくなりました。その結果、ノードプール設定の ノードをスケジューリング不可にする は無効になります。詳細については、「kubelet: remove --register-schedulable flag #122384」をご参照ください。代替策として、ノードの Taint を使用して、新しく登録されたノードに Pod がスケジュールされるのを防ぐことができます。Taint を設定する際は、キーとして
node.kubernetes.io/unschedulableを使用しないでください。
機能の変更点
動的リソース割り当て (DRA) のコア機能が一般提供 (GA) となり、デフォルトで有効になりました。DRA を使用すると、ワークロードは必要なデバイスプロパティを指定してリソースをリクエストできます。スケジューラはデバイスの割り当てを処理し、割り当てられたデバイスにアクセスできるノードに Pod を配置します。その後、デバイスドライバーと kubelet がデバイスを設定し、Pod にアクセス権を付与します。
その他の DRA 関連機能はベータ版に昇格し、デフォルトで有効になっています。これらの機能には、管理者がモニタリングや診断のために限られた権限で既に使用中のデバイスにアクセスするサポートが含まれます。また、リクエスト時に適切なデバイス割り当てプランのオプションリストを設定することもサポートしています。さらに、Kubelet はノード上の Pod に割り当てられた DRA リソースを監視し、レポートするようになりました。
Kubelet は、コンテナイメージリポジトリでの認証に短期的な認証情報を使用することをサポートします。これにより、長期的な認証情報を使用することに伴う潜在的なリスクを回避し、セキュリティを向上させます。詳細については、「Service Account Token Integration for Image Pulls Graduates to Beta」をご参照ください。
ジョブの Pod 置換ポリシーが GA となり、置換 Pod の作成が最適化されました。デフォルトでは、古い Pod が終了を開始するとすぐに置換 Pod が作成されるため、リソース競合が発生する可能性があります。
.spec.podReplacementPolicyフィールドを設定することで、古い Pod が完全に終了するまで置換 Pod の作成を遅らせることができます。これにより、リソース競合や不要なノードのスケールアウトを回避できます。RecoverVolumeExpansionFailureが GA となりました。この機能により、PVC でリクエストされた容量が大きすぎてボリューム拡張に失敗した場合でも、PVC の容量リクエストを減らすことで回復できます。ボリューム属性クラスが GA となり、デフォルトで有効になりました。この機能により、共通のボリュームパラメーターを
VolumeAttributesClassオブジェクトで定義できます。PVC はこのオブジェクトを参照してこれらのパラメーターを適用できます。静的 Pod によって参照される API オブジェクト (Secret、ConfigMap、PVC、ServiceAccount など) が存在しない場合、kubelet はそのコンテナを起動しません。これにより、Pod が依存関係の欠落した状態で起動し、不安定な状態になるのを防ぎます。
kube-apiserver の安定性とパフォーマンスが、以下の点で最適化されました:
読み取りリクエストはキャッシュから提供されるようになりました。これにより、etcd へのパススルーリクエストが減少し、kube-apiserver のメモリプレッシャーが低減します。バージョン 1.31 では Consistent Reads from Cache のサポートが導入され、バージョン 1.34 では履歴データ用の Snapshottable API server cache のサポートが追加されました。
LISTリクエストでは、データをストリームとして返すことができます。これにより、サーバーサイドはリクエスト処理時に一定の少量のメモリを使用でき、大量のデータをプルするクライアントによって引き起こされるサーバーサイドのメモリスパイクを防ぎます。詳細については、「Streaming Encoding for LIST Responses」をご参照ください。
バージョン 1.34.3-aliyun.1 では、DRA を使用してリソースをリクエストする Pod が削除時に
Terminating状態でスタックする問題が解決されました。詳細については、「#133920」をご参照ください。
機能
PodLevelResources がベータ版に昇格しました。従来のコンテナレベルのリソース定義とは異なり、この機能では Pod レベルで合計リソースリクエストとリミットを設定できます。これにより、Pod 内のすべてのコンテナのリソース消費が Pod 自体のリミットを超えないように保証されます。詳細については、「Pod Level Resource Specifications」をご参照ください。
この機能は Windows ノードではサポートされていません。
デフォルトで、kubectl はユーザープリファレンスを
.kubercファイルで定義することをサポートします。認証情報を含むkubeconfigファイルとは異なり、このファイルは機密性の低いクライアント設定を保存するために特化しています。詳細については、「Introduce kuberc」をご参照ください。ExternalServiceAccountTokenSignerがベータ版に昇格しました。この機能はExternalJWTSignergRPC サービスを導入し、ローカルの静的キー署名方式の代わりに外部のキー管理ソリューションを使用して ServiceAccount トークンに署名します。SchedulerAsyncAPICallsがベータ版に昇格し、kube-scheduler での非同期 API 呼び出しがデフォルトで有効になります。この機能は、スケジューリングサイクル中のブロッキング API 呼び出しによって引き起こされる kube-scheduler のパフォーマンスボトルネックを解決します。これらの呼び出しを非同期で処理することにより、スケジューリングレイテンシーを短縮し、遅い API 応答によってスケジューラスレッドがブロックされるのを防ぎ、スケジュール不可能な Pod に対してより迅速なリトライ機会を提供します。詳細については、「Asynchronous API calls during scheduling」をご参照ください。
WindowsGracefulNodeShutdownがベータ版に昇格し、Windows ノードの正常なノードシャットダウンをサポートします。PreferSameTrafficDistribution がベータ版に昇格しました。これにより、Service の
.spec.trafficDistributionフィールドをPreferSameZoneまたはPreferSameNodeに設定することで、同じゾーンまたは同じノード内のエンドポイントへのトラフィックルーティングを優先できます。以前のPreferCloseオプションは非推奨になりました。詳細については、「Traffic Distribution」をご参照ください。kubeletPSI 機能がベータ版に昇格しました。これにより、kubelet は Summary API および Prometheus を通じて Pressure Stall Information (PSI) メトリックを公開できます。詳細については、「PSI Metrics for Kubernetes Graduates to Beta」をご参照ください。
CPU マネージャーの静的ポリシーは、
prefer-align-cpus-by-uncorecacheオプションをサポートするようになりました。これにより、個別のアンコアキャッシュアーキテクチャを持つプロセッサで実行されるワークロードのパフォーマンスが最適化されます。詳細については、「Introducing CPU Manager Static Policy Option for Uncore Cache Alignment」をご参照ください。
関連リンク
Kubernetes 1.34 の完全な変更履歴については、「CHANGELOG-1.34」および「Kubernetes v1.34: Of Wind & Will (O' WaW)」をご参照ください。