Alibaba Cloud Container Service for Kubernetes は、Certified Kubernetes Conformance Program に厳密に準拠しています。このドキュメントでは、ACK の Kubernetes 1.34 リリースにおける重要な変更点について説明します。具体的には、アップグレードに関する注意事項、主な変更点、機能更新、非推奨 API、およびフィーチャーゲートが含まれます。
コンポーネントのバージョン
次の表は、ACK クラスターでサポートされているコアコンポーネントのバージョンを示しています。
コアコンポーネント | バージョン |
Kubernetes | 1.34.1-aliyun.1 および 1.34.3-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.6 |
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 Container-optimized が使用されます。
バージョン 1.34 以降、Terway ネットワークプラグイン を使用して DataPath V2 を選択して作成された新規クラスターでは、Terway がアクティブなノード上で kube-proxy コンテナが実行されなくなります。DataPath V2 は eBPF を使用して共有 ENI モードでのネットワークアクセスを高速化します。
この変更は、新規に作成されたクラスターにのみ適用されます。
バージョン 1.34 以降、ACK managed Pro cluster において、標準およびマネージドノードプール を作成する際に、
serverTLSBootstrapパラメーターおよびRotateKubeletServerCertificateフィーチャーゲートがデフォルトで有効になります。この構成により、ノードプール内のノード上の kubelet サーバー証明書が自動的にローテーションされるようになります。また、クラスター CA によるこれらの証明書の検証もサポートされ、クラスターノードのセキュリティが強化されます。
バージョン 1.34 以降、kubelet サーバーは
TLS_RSA_WITH_AES_256_GCM_SHA384およびTLS_RSA_WITH_AES_128_GCM_SHA256TLS 暗号スイートをサポートしなくなります。既存のクラスターをバージョン 1.34 にアップグレードした後、この変更は新規ノードに自動的に適用されます。バージョン 1.34 以降、登録中にノードを
unschedulableとしてマークできなくなり、unschedulable に設定 するノードプール構成は効果を持たなくなります。詳細については、「kubelet: remove --register-schedulable flag #122384」をご参照ください。新たに登録されたノードへの Pod スケジューリングを防ぐ代替手段として、ノードの Taint を使用することを推奨します。Taint を構成する際は、キーとして
node.kubernetes.io/unschedulableを使用しないでください。
機能更新
Dynamic Resource Allocation (DRA) のコア機能が General Availability (GA) に移行し、デフォルトで有効になりました。DRA を使用すると、ワークロードは必要なデバイス属性を指定してリソースをリクエストできます。スケジューラはデバイスを割り当て、そのデバイスにアクセス可能なノード上に Pod を配置します。その後、デバイスドライバーと kubelet がデバイスを構成し、Pod にアクセス権を付与します。
DRA 関連の他の機能も Beta に移行し、デフォルトで有効になっています。これらの機能により、管理者はモニタリングや診断のために、すでに利用中のデバイスに限定的な権限でアクセスできるようになります。また、リクエスト時に適切なデバイス割り当てオプションのリストを任意で構成でき、kubelet が Pod によって使用されている DRA リソースをモニターおよびレポートできるようになります。
kubelet は、コンテナイメージリポジトリとの認証に短期間有効な認証情報を使用できるようになりました。これにより、長期有効な認証情報の使用に伴うリスクを回避し、セキュリティが向上します。詳細については、「Service Account Token Integration for Image Pulls Graduates to Beta」をご参照ください。
ジョブの Pod 置き換えポリシーが GA に移行し、Pod 置き換えタイミングが最適化されました。デフォルトでは、古い Pod の終了処理が始まった時点で新しい置き換え Pod が作成されますが、これによりリソース競合が発生する可能性があります。
.spec.podReplacementPolicyフィールドを構成することで、古い Pod が完全に終了するまで置き換えを遅延させ、リソース競合や不要なノードスケーリングを回避できます。RecoverVolumeExpansionFailure機能が GA に移行しました。PVC で要求された容量が大きすぎてボリュームの拡張に失敗した場合、この機能を使用して容量要求を減らすことで回復できます。Volume Attributes Classes が GA に移行し、デフォルトで有効になりました。この機能により、共通のボリュームパラメーターを
VolumeAttributesClassオブジェクトとして定義できます。PVC はこのオブジェクトを参照して、定義済みのパラメーターを適用できます。kubelet は、Secrets、ConfigMaps、PVC、ServiceAccounts などの参照先 API オブジェクトが存在しない静的 Pod の起動を拒否するようになりました。これにより、依存関係の不足により Pod が未定義の状態になることを防止します。
kube-apiserver の安定性およびパフォーマンスに関する最適化:
読み取りリクエストはキャッシュから提供されるため、etcd へのパススルーリクエストが削減され、kube-apiserver のメモリ負荷が軽減されます。バージョン 1.31 では Consistent Reads from Cache がサポートされ、バージョン 1.34 では既存データのバージョンを保存する Snapshottable API server cache が追加されました。
LISTリクエストに対して、Kubernetes はストリーミング応答をサポートするようになりました。これにより、サーバーはリクエスト処理中に少量かつ一定のメモリしか使用しないため、クライアントが大量のデータをフェッチする際に発生するメモリ使用量の急増を効果的に防止できます。詳細については、「Streaming Encoding for LIST Responses」をご参照ください。
バージョン 1.34.3-aliyun.1 では、DRA を使用してリソースをリクエストする Pod が削除時に
Terminating状態で停止してしまう問題が修正されました。詳細については、「#133920」をご参照ください。
新機能
PodLevelResources が Beta に移行しました。従来のコンテナレベルのリソース定義とは異なり、この機能を使用すると、Pod レベルで全体のリソースリクエストおよび制限を設定できます。これにより、すべてのコンテナの合計リソース消費量が Pod の制限を超えないことが保証されます。詳細については、「Pod Level Resource Specifications」をご参照ください。
この機能は Windows ノードではサポートされていません。
kubectl は、デフォルトで
.kubercファイルでユーザーのプリファレンスを定義できるようになりました。kubeconfigファイルが認証情報を含むのに対し、このファイルは機密性のないクライアント側の構成専用に使用されます。詳細については、「Introduce kuberc」をご参照ください。ExternalServiceAccountTokenSignerが Beta に移行しました。この機能により、ExternalJWTSignergRPC サービスが導入され、ローカルの静的キーではなく、外部のキー管理ソリューションを使用して ServiceAccount トークンに署名できるようになります。SchedulerAsyncAPICallsが Beta に移行し、kube-scheduler における非同期 API 呼び出しがデフォルトで有効になりました。この機能は、スケジューリングサイクル中にブロッキング API 呼び出しによって引き起こされる kube-scheduler のパフォーマンスボトルネックに対処します。これらの呼び出しを非同期で処理することで、スケジューリング遅延が効果的に削減され、スケジューラスレッドが遅い API 応答によってブロックされるのを防ぎ、スケジュール不能な Pod に対してより迅速なリトライの機会を提供します。詳細については、「Asynchronous API calls during scheduling」をご参照ください。
WindowsGracefulNodeShutdownが Beta に移行し、Windows ノードでのグレースフルシャットダウンがサポートされるようになりました。PreferSameTrafficDistribution が Beta に移行しました。この機能により、Service の
.spec.trafficDistributionフィールドをPreferSameZoneまたはPreferSameNodeに設定することで、同じ可用性ゾーン内または同じノード上のエンドポイントにトラフィックを優先的にルーティングできます。以前のPreferCloseオプションは非推奨となりました。詳細については、「Traffic Distribution」をご参照ください。kubeletPSI が Beta に移行しました。これにより、kubelet は Summary API および Prometheus メトリックとして Pressure Stall Information (PSI) メトリックを公開できるようになります。詳細については、「PSI Metrics for Kubernetes Graduates to Beta」をご参照ください。
CPU マネージャーの static ポリシーが、分散型アンコアキャッシュアーキテクチャを持つプロセッサ上で実行されるワークロードのパフォーマンスを最適化するための
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)」をご参照ください。