Container Service for Kubernetes (ACK) は、Certified Kubernetes Conformance Program の条件に厳密に準拠しています。このトピックでは、Kubernetes 1.28 の更新内容について、更新ノート、主な変更点、新機能、非推奨の機能と API、およびフィーチャーゲートを含めて説明します。
バージョンの更新
Alibaba Cloud Container Compute Service (ACS) によって、Kubernetes 1.28 をサポートするために、以下の主要コンポーネントが更新および最適化されています。
主要コンポーネント | バージョン |
Kubernetes | v1.28.3-aliyunacs.2 |
etcd | v3.5.9 |
CoreDNS | v1.9.3.10-7dfca203-aliyun |
CRI | containerd 1.6.22.1-20240524143336 |
CSI | v1.30.1-1.acs-685ce77-aliyun |
CNI | Terway 1.5.0 以降、および TerwayControlplane 1.5.0 以降 |
更新ノート
コンポーネント | 説明 |
CephFS および Ceph RBD ボリュームプラグイン | クラスターで CephFS および Ceph RBD ボリュームプラグインを使用している場合は、プラグインが Kubernetes によって提供されるプラグインドライバーではなく、オフツリードライバーを使用しているかどうかを確認する必要があります。また、オフツリードライバーの互換性、安定性、およびパフォーマンスも確認する必要があります。 |
用語
このトピックを読む前に、以下の用語を理解しておくことをお勧めします。
主な変更点
Kubernetes 1.28 では、スケジューラーのスケジューリングロジックが最適化され、無効な再試行が減少し、パフォーマンスが向上しました。
カスタムスケジューラープラグインを使用している場合は、パフォーマンスを向上させるためにプラグインを最適化および更新することをお勧めします。詳細については、スケジューリングフレームワークの変更点を参照してください。
Kubernetes コミュニティは、標準の CSI API を使用するオフツリードライバーで既存のストレージプラグインドライバーを置き換えるためのCSI 移行ソリューションを提供しています。CSI 移行機能は、Kubernetes 1.25 では GA ステージにあります。Kubernetes 1.27 では、
storage.k8s.io/v1beta1
API と Elastic Block Service (EBS) プラグインが削除されました。Kubernetes 1.28 では、CephFS ボリュームプラグインコードが削除され、kubernetes.io/rbd
は非推奨になりました。代わりに、CephFS CSI ドライバーが使用されます。また、Kubernetes 1.28 では、Ceph RBD ボリュームをオフツリー CSI ドライバーを使用するプラグインに移行することはできなくなりました。1.28.9-aliyun.1 では、以下の CVE 脆弱性が修正されています。
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
関数と機能
Kubernetes 1.28
正常ではないノードのシャットダウン機能が GA に達しました。停電などの例外によりノードがシャットダウンされた場合、StatefulSet はビジネスの中断を避けるために、別のノードに同じ名前のポッドを作成する必要があります。
NodeOutOfServiceVolumeDetach フィーチャーゲートが GA に達しました。この機能を有効にすると、例外によりノードがシャットダウンされたときに、ノード上の終了したポッドに対してボリュームデタッチ操作がすぐに実行されます。これにより、サービス外ノード上のポッドが他のノードで迅速に回復できます。
遡及的なデフォルト StorageClass 割り当て機能が GA に達しました。この機能が導入される前は、デフォルトの StorageClass が存在しない場合に
storageClassName
フィールドなしで PVC を作成すると、PVC は Pending 状態のままになります。この機能が導入された後、デフォルトの StorageClass が作成されると、storageClassName
フィールドのない PVC は自動的にデフォルトの StorageClass を使用します。ジョブの失敗を回避するために、2 つの機能が導入されました。
ポッドが削除された直後に置換ポッドを作成する
deletionTimestamp
フィーチャーゲートと比較して、JobPodReplacementPolicy フィーチャーゲート (アルファステージ) は、ポッドに Failed フェーズ (status.phase: Failed
) が割り当てられた後にのみ置換ポッドを作成します。このポリシーにより、2 つのポッドが同じインデックスとノードリソースを同時に使用することを防ぎます。JobBackoffLimitPerIndex フィーチャーゲート (アルファステージ) を使用すると、
.spec.backoffLimitPerIndex
を設定して、インデックスごとのポッド障害の最大再試行回数を制限できます。この機能が導入される前は、インデックスの連続したポッド障害の回数が.spec.backoffLimit
に達すると、対応するインデックス付きジョブは失敗します。
インデックス付きジョブの
completion
フィールドが 100,000 より大きい値に設定され、ジョブのparallelism
フィールドが 10,000 より大きい値に設定され、多数のポッドが失敗した場合、ポッドの端末フェーズの追跡が失敗する可能性があります。この問題を防ぐために、ジョブを作成するときに上記のフィールドを過度に大きな値に設定すると、警告が表示されます。CRD 検証に失敗した場合に理由とフィールドパスを返すために、
reason
フィールドとfieldPath
フィールドが CustomResourceDefinition (CRD) 検証ルールに追加されました。詳細については、CRD 検証式言語を参照してください。Common Expression Language (CEL) 式は、webhook マッチングリクエストで使用できます。最大 64 個の一致条件がサポートされています。詳細については、リクエストのマッチング: matchConditionsを参照してください。
SidecarContainers フィーチャーゲートが導入され、サイドカーコンテナを起動するタイミングを指定できるようになりました。たとえば、ログ収集コンテナを他のコンテナの前に起動して、ログ収集の信頼性を向上させることができます。詳細については、Kubernetes v1.28: ネイティブサイドカーコンテナの紹介を参照してください。この機能は Kubernetes 1.28 でアルファに達し、デフォルトでは無効になっています。
PVC の
.status.resizeStatus
フィールドは、.status.allocatedResourceStatus
マップフィールドに置き換えられ、PVC のサイズ変更中のリソースの状態を格納します。詳細については、PersistentVolumeClaimStatusを参照してください。ポッドインデックス (シーケンス番号) が、インデックス付きジョブと StatefulSet によって作成されたポッドにラベルとして追加されます。
ValidatingAdmissionPolicy フィーチャーゲート (ベータステージ) は、リソースリクエストを検証するための admission webhook の検証方法の宣言的な代替手段を提供します。また、このフィーチャーゲートを使用すると、CEL 式を使用して複雑な検証ルールを記述できます。API サーバーは、CEL 式に対してリソースリクエストを検証します。
Kubernetes コントローラーマネージャーに
--concurrent-cron-job-syncs
フラグが追加され、CronJob コントローラーの同時実行性を設定できるようになりました。また、--concurrent-job-syncs
フラグが追加され、ジョブコントローラーの同時実行性を設定できるようになりました。詳細については、--concurrent-cron-job-syncs および --concurrent-job-syncs を参照してください。API サーバーが最適化されました。
キャッシュからリスト (GetList) を取得する際のメモリ使用量が削減されました。詳細については、GetList テストデータを参照してください。
複製された API サーバーが 1 つだけ存在する場合に Kubernetes サービスのエンドポイントが削除されない問題が修正されました。これにより、正常なシャットダウン中に Kubernetes サービスのエンドポイントが削除されることが保証されます。
OpenAPI v2 コントローラーは、CRD から情報を集約するために遅延されます。また、OpenAPI v2 仕様が削減されます。クライアントが OpenAPI v2 にリクエストを送信しない場合、API サーバーの CPU とメモリ使用量が削減されます。また、多数の CRD をインストールする効率も向上します。ただし、これにより初回リクエストの処理速度が低下します。クライアントを OpenAPI v3 をサポートするバージョンに更新することをお勧めします。
キャッシュからの整合性のある読み取りフィーチャーゲートが導入され、watch キャッシュを使用して LIST リクエストの整合性のある読み取りを保証できるようになりました。
メトリクス API を呼び出すことにより、さまざまなメトリクスを収集できます。
非推奨の機能
Kubernetes 1.28
イントリー CephFS プラグインコードが削除されました。
CephFS CSI ドライバーを使用することをお勧めします。
Ceph RBD ボリュームをオフツリー CSI ドライバーを使用するプラグインに移行するためのサポートは非推奨になり、今後のバージョンで削除される予定です。
イントリープラグインコードが削除される前に移行を完了することをお勧めします。
RBD ボリュームプラグイン (kubernetes.io/rbd) は非推奨になり、今後のバージョンで削除される予定です。
CephFS CSI ドライバーを使用することをお勧めします。
KMSv1 は非推奨になりました。KMSv1 を引き続き使用するには、
--feature-gates=KMSv1=true
を設定します。詳細については、これ以上の修正なしで KMS v1beta1 を非推奨としてマークを参照してください。KMSv2 を使用することをお勧めします。
Kubernetes コントローラーマネージャーコマンドの
--volume-host-cidr-denylist
フラグと--volume-host-allow-local-loopback
フラグは非推奨になりました。kubelet コマンドの
--azure-container-registry-config
フラグは非推奨になりました。image-credential-provider-config
フラグと--image-credential-provider-bin-dir
フラグを使用することをお勧めします。Windows ノードプールを作成できなくなりました。
非推奨の API
CSIStorageCapacity API を使用すると、現在の使用可能なストレージ容量をクエリして、ポッドが十分なストレージリソースを持つノードにスケジュールされるようにすることができます。storage.k8s.io/v1beta1
API のバージョンは Kubernetes 1.24 で非推奨になり、Kubernetes 1.27 で削除されました。
storage.k8s.io/v1
バージョンを使用することをお勧めします。このバージョンは、Kubernetes 1.24 以降のバージョンで使用できます。詳細については、ポッドスケジューリングのストレージ容量の制約 KEPを参照してください。
フィーチャーゲート
このセクションでは、主な変更点のみをリストしています。詳細については、フィーチャーゲートを参照してください。
Kubernetes 1.28
NodeOutOfServiceVolumeDetach
フィーチャーゲートがnode.kubernetes.io/out-of-service
taint を追加してノードをサービス外としてマークすると、ノード上で toleration と一致しないポッドは強制的にエビクトされ、ボリュームはすぐにデタッチされます。このフィーチャーゲートは Kubernetes 1.28 で GA に達し、常にデフォルトで有効になっています。AdmissionWebhookMatchCondition
フィーチャーゲートはデフォルトで有効になっており、CEL 式を webhook マッチング条件として使用できます。UnknownVersionInteroperabilityProxy
フィーチャーゲートがアルファに達しました。このフィーチャーゲートは、複数の API サーバーバージョンが存在する場合に、正しい API サーバーにリクエストを送信できます。詳細については、混合バージョンproxyを参照してください。IPTablesOwnershipCleanup
フィーチャーゲートが GA に達しました。このフィーチャーゲートにより、kubelet は KUBE-MARK-DROP および KUBE-MARK-MASQ iptables ルールを作成しなくなります。ConsistentListFromCache
フィーチャーゲートがアルファに達しました。このフィーチャーゲートにより、API サーバーは watch キャッシュを使用して LIST リクエストの整合性のある読み取りを保証できます。ProbeTerminationGracePeriod
フィーチャーゲートが GA に達し、デフォルトで有効になっています。このフィーチャーゲートを使用すると、プローブレベル terminationGracePeriodSecondsを使用できます。GA ステージの以下のフィーチャーゲートが削除されました:
DelegateFSGroupToCSIDriver
、DevicePlugins
、KubeletCredentialProviders
、MixedProtocolLBService
、ServiceInternalTrafficPolicy
、ServiceIPStaticSubrange
、およびEndpointSliceTerminatingCondition
。
参照
Kubernetes 1.27 および Kubernetes 1.28 のリリースノートの詳細については、CHANGELOG-1.27 および CHANGELOG-1.28 を参照してください。