Alibaba Cloud の Container Compute Service (ACS) は、認定された Kubernetes 準拠のプラットフォームです。このトピックでは、Kubernetes 1.28 の主な変更点 (アップグレードに関する考慮事項、主な変更点、新機能、非推奨の機能と API、フィーチャーゲートなど) について説明します。
コンポーネントのバージョン
次の表に、ACK クラスターの主要コンポーネントのバージョンを示します。
主要コンポーネント | バージョン |
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 および TerwayControlplane v1.5.0 以降 |
アップグレードに関する考慮事項
コンポーネント | 考慮事項 |
CephFS および Ceph RBD ストレージボリュームプラグイン | クラスターで CephFS または Ceph RBD ボリュームプラグインを使用している場合は、out-of-tree ドライバーに移行し、関連する互換性、安定性、またはパフォーマンスのリスクを評価してください。 |
基本概念
この Kubernetes バージョンでの機能の変更点や非推奨事項について学ぶ前に、以下の概念を理解しておく必要があります。
主な変更点
Kubernetes v1.28 では、不要な再試行を減らすためにスケジューリングロジックが最適化され、スケジューラー全体のパフォーマンスが向上しました。
カスタムスケジューラープラグインを使用している場合は、パフォーマンスを向上させるために更新してください。詳細については、「スケジューリングフレームワークの変更」をご参照ください。
CSI 移行に関して、Kubernetes コミュニティは、CSI 標準を実装する out-of-tree ドライバーへの in-tree ストレージプラグインの移行を継続しています。CSI 移行は v1.25 で GA になりました。v1.27 では、
storage.k8s.io/v1beta1API と in-tree EBS ストレージプラグインが削除されました。v1.28 では、in-tree CephFS ボリュームプラグインのコードが削除され、kubernetes.io/rbdプラグインは非推奨となり、CephFS CSI ドライバーに切り替える必要があります。バージョン 1.28.9-aliyun.1 では、以下の CVE 脆弱性が修正されています。
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
新機能
Kubernetes v1.28
非グレースフルなノードシャットダウン機能が GA (一般提供) になりました。ノードが予期せず (たとえば、停電により) シャットダウンした場合、ステートフルアプリケーションは正常なノードで再起動され、サービスの継続性が確保されます。
NodeOutOfServiceVolumeDetach フィーチャーゲートが GA になりました。これにより、異常なノードで終了した Pod からボリュームを即座にデタッチできるため、他のノードで迅速に回復できます。
遡及的なデフォルト StorageClass の割り当てが一般提供になりました。以前は、デフォルトの StorageClass が作成される前に
storageClassNameが指定されていない PVC が存在する場合、PVC は無期限にpending状態のままでした。この更新により、デフォルトの StorageClass が作成された後、storageClassNameが指定されていない PVC は、デフォルトの StorageClass を使用するように自動的に更新されます。Job の障害を処理するために、2 つの新機能が導入されました。
JobPodReplacementPolicy (アルファフィーチャーゲート) は、元の Pod が
Failedフェーズ (status.phase: Failed) に入った後にのみ、代替 Pod が作成されることを保証します。これは、deletionTimestampを持つ Pod が即座に置き換えられる以前の動作とは異なり、2 つの Pod が同じインデックスとノードリソースを競合する可能性がありました。JobBackoffLimitPerIndex (アルファフィーチャーゲート) を使用すると、
.spec.backoffLimitPerIndexフィールドを使用して、インデックス付き Job の特定のインデックスに対する再試行制限を設定できます。これにより、単一のインデックスが継続的に失敗し、グローバルな.spec.backoffLimitに達した場合に Job 全体が失敗するのを防ぎます。
完了数 (
completion) が 100,000 を超え、並列度 (parallelism) が 10,000 を超えるように構成されたインデックス付き Job がある場合、多数の Pod が失敗したときに Job の終了ステータスを追跡できないことがあります。そのため、Job の作成時にパラメーターが高すぎる場合は、警告メッセージが表示されます。CRD 検証ルールに
reasonおよびfieldPathフィールドが含まれるようになり、検証の失敗時に特定の理由とフィールドパスを返すことができるようになりました。詳細については、「CRD Validation Expression Language」をご参照ください。Webhook リクエストのフィルタリングが CEL 式をサポートするようになり、最大 64 の一致条件を指定できるようになりました。詳細については、「リクエストのマッチング: matchConditions」をご参照ください。
新しい SidecarContainers フィーチャーゲートは、サイドカーコンテナのネイティブサポートを追加し、コンテナの起動順序を最適化できます。たとえば、ロギングサイドカーコンテナを他のコンテナより先に起動して、ログ収集の信頼性を向上させることができます。詳細については、「Kubernetes v1.28: ネイティブサイドカーコンテナの導入」をご参照ください。この機能は v1.28 ではアルファ版であり、デフォルトでは無効になっています。
PVC の
.status.resizeStatusフィールドは、PVC のリサイズ操作のステータスを示す.status.allocatedResourceStatusマップに置き換えられました。詳細については、「PersistentVolumeClaimStatus」をご参照ください。インデックス付き Job と StatefulSet の両方で管理される Pod に、Pod インデックスラベルが含まれるようになりました。
ValidatingAdmissionPolicy (ベータ版) は、検証アドミッション Webhook をデプロイする代わりとして、リソースリクエストを検証するための宣言的な方法を提供します。CEL 式で記述された複雑な検証ルールをサポートします。API サーバーは CEL 式に対してリクエストを検証し、評価に合格したリクエストのみを承認します。
Kube Controller Manager は、CronJob コントローラーの同時実行性を構成するための
--concurrent-cron-job-syncsフラグと、Job コントローラー用の--concurrent-job-syncsフラグを追加します。詳細については、「--concurrent-cron-job-syncs」と「--concurrent-job-syncs」をご参照ください。API サーバーには、次の最適化が含まれています。
キャッシュからの GetList 操作のメモリ消費が改善されました。詳細については、「GetList テストデータ」をご参照ください。
グレースフルシャットダウン中に、API サーバーのレプリカが 1 つしか残っていない場合でも、Kubernetes Service Endpoints が適切に削除されるようになりました。
OpenAPI v2 コントローラーは CRD 情報を遅延的に集約するように設定され、OpenAPI v2 仕様は大幅に削減されました。OpenAPI v2 を要求するクライアントがいない場合、これにより API サーバーの CPU とメモリ消費が削減され、多数の CRD をインストールする際のパフォーマンスが向上します。ただし、最初のクライアントリクエストは遅くなります。クライアントを OpenAPI v3 をサポートするようにアップグレードすることを推奨します。
新しい Consistent Reads from Cache フィーチャーゲートにより、List リクエストを完全な一貫性で watch キャッシュから提供できるようになります。
メトリクスエンドポイントを通じて、より多くの監視メトリクスが利用可能になりました。
非推奨の機能
Kubernetes v1.28
in-tree CephFS ボリュームプラグインのコードは削除されました。
代わりに CephFS CSI ドライバーの使用を推奨します。
RBD ボリュームプラグイン (
kubernetes.io/rbd) は非推奨となり、将来のバージョンで削除される予定です。代わりに Ceph RBD CSI ドライバーを使用することを推奨します。
KMSv1 は非推奨です。KMSv1 を引き続き使用するには、
--feature-gates=KMSv1=trueフラグを設定する必要があります。詳細については、「KMS v1beta1 を非推奨としてマーク」をご参照ください。KMSv2 の使用を推奨します。
Kube Controller Manager の起動フラグ
--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 は、Pod が十分なストレージを持つノードにスケジュールされるように、利用可能なストレージ容量を公開します。CSIStorageCapacity の storage.k8s.io/v1beta1 API バージョンは v1.24 で非推奨となり、v1.27 で削除されました。
v1.24 以降利用可能な storage.k8s.io/v1 を使用することを推奨します。詳細については、「Pod スケジューリングのためのストレージ容量制約 KEP」をご参照ください。
フィーチャーゲート
このセクションでは、主な変更点のみを記載します。詳細については、「フィーチャーゲート」をご参照ください。
Kubernetes v1.28
NodeOutOfServiceVolumeDetach:node.kubernetes.io/out-of-serviceTaint でノードがサービス停止中とマークされると、この Taint を許容しない Pod は強制的に削除され、そのボリュームは即座にデタッチされます。このフィーチャーゲートは v1.28 で GA となり、常に有効です。AdmissionWebhookMatchCondition:デフォルトで有効になっており、これにより Webhook は一致条件で CEL 式を使用できます。UnknownVersionInteroperabilityProxy:この機能はアルファ版です。複数の API サーバーバージョンが存在する場合に、リクエストを正しい API サーバーにプロキシします。詳細については、「混合バージョンプロキシ」をご参照ください。IPTablesOwnershipCleanup:この機能は GA です。Kubelet は KUBE-MARK-DROP および KUBE-MARK-MASQ iptables チェーンを作成しなくなりました。ConsistentListFromCache:この機能はアルファ版です。これにより、API サーバーは List リクエストを完全な一貫性で watch キャッシュから提供できます。ProbeTerminationGracePeriod:この機能は GA で、デフォルトで有効です。プローブレベルの terminationGracePeriodSeconds を設定できます。GA に昇格したいくつかのフィーチャーゲート (
DelegateFSGroupToCSIDriver、DevicePlugins、KubeletCredentialProviders、MixedProtocolLBService、ServiceInternalTrafficPolicy、ServiceIPStaticSubrange、EndpointSliceTerminatingConditionなど) が削除されました。
関連ドキュメント
Kubernetes v1.27 および v1.28 の完全な変更履歴については、「CHANGELOG-1.27」および「CHANGELOG-1.28」をご参照ください。