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 段階にあります。
storage.k8s.io/v1beta1API および Elastic Block Service (EBS) プラグインは、Kubernetes 1.27 で削除されました。CephFS ボリュームプラグインコードは削除され、kubernetes.io/rbdは Kubernetes 1.28 で非推奨になりました。代わりに、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/v1beta1API のバージョンは Kubernetes 1.24 で非推奨になり、Kubernetes 1.27 で削除されました。
storage.k8s.io/v1 バージョンを使用することをお勧めします。このバージョンは、Kubernetes 1.24 以降のバージョンで使用できます。詳細については、「ポッドスケジューリング KEP のストレージ容量の制約」をご参照ください。
フィーチャーゲート
このセクションでは、主な変更点のみをリストしています。詳細については、「フィーチャーゲート」をご参照ください。
Kubernetes 1.28
NodeOutOfServiceVolumeDetachフィーチャーゲートがnode.kubernetes.io/out-of-servicetaint を追加してノードをサービス停止中としてマークすると、ノード上で toleration と一致しないポッドは強制的にエビクトされ、ボリュームはすぐにデタッチされます。このフィーチャーゲートは Kubernetes 1.28 で GA に到達し、常にデフォルトで有効になっています。AdmissionWebhookMatchConditionフィーチャーゲートはデフォルトで有効になっており、CEL 式を Webhook マッチング条件として使用できます。UnknownVersionInteroperabilityProxyフィーチャーゲートがアルファ版に到達しました。このフィーチャーゲートは、複数の API サーバーバージョンが存在する場合に、正しい API サーバーにリクエストを送信できます。詳細については、「混合バージョン プロキシ」をご参照ください。IPTablesOwnershipCleanupフィーチャーゲートが GA に到達しました。このフィーチャーゲートにより、kubelet は KUBE-MARK-DROP iptables ルールと 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」をご参照ください。