Container Service for Kubernetes (ACK) は Kubernetes 準拠認定を取得しています。このリリースノートでは、ACK の Kubernetes 1.27 および 1.28 におけるパッチ、新機能、非推奨 API、およびフィーチャーゲートの変更点をまとめています。
アップストリームのチェンジログ: CHANGELOG-1.27、CHANGELOG-1.28。
Kubernetes 1.28 にスペックアップする前に、以下の破壊的変更を確認してください。
-
CephFS インツリー ボリュームプラグインの削除: Kubernetes 1.28 で CephFS インツリー ボリュームプラグインが削除されました。インツリー ドライバーを使用しているクラスターは、スペックアップ後に動作しなくなります。スペックアップ前に CephFS CSI ドライバー への移行を完了し、互換性、安定性、またはパフォーマンスに関するリスクを評価してください。
-
Ceph RBD CSI 移行の不可能化: Kubernetes 1.28 以降、Ceph RBD ボリューム (
kubernetes.io/rbd) をアウトオブツリー CSI ドライバーへ移行することはできなくなりました。今後のリリースで完全に削除される予定です。削除前に移行を完了させてください。 -
IPv6DualStack フィーチャーゲートの削除:
IPv6DualStackフィーチャーゲートは Kubernetes 1.27 で削除されました。クラスター構成で手動設定している場合は、スペックアップ前に削除してください。 -
kubelet エンドポイントフラグの設定ファイル移行:
--container-runtime-endpointおよび--image-service-endpointフラグは、kubelet コマンドライン引数として渡すことができなくなりました。スペックアップ前にこれらの設定を kubelet 設定ファイルに移動してください。
コンポーネントバージョン
Kubernetes 1.28 向け ACK クラスターの主要コンポーネントバージョンです。
| 主要コンポーネント | バージョン |
|---|---|
| Kubernetes | 1.28.15-aliyun.1、1.28.9-aliyun.1、および 1.28.3-aliyun.1 |
| etcd | v3.5.9 |
| CoreDNS | v1.9.3.10-7dfca203-aliyun |
| CRI | containerd 1.6.20 |
| CSI | サポートされている最新バージョンにアップグレードしてください。変更履歴: CSI プラグイン、CSI プロビジョナー。 |
| CNI | Flannel v0.15.1.22-20a397e6-aliyun |
| CNI (Terway) | Terway および TerwayControlplane v1.5.0 以降 |
| NVIDIA Container Runtime | v3.13.0 |
| Ingress Controller | v1.8.0-aliyun.1 |
セキュリティパッチ
| バージョン | 修正済み CVE |
|---|---|
| 1.28.15-aliyun.1 | CVE-2024-10220 |
| 1.28.9-aliyun.1 | CVE-2023-45288、CVE-2024-3177、CVE-2024-24786 |
新機能
Kubernetes 1.28
非グレースフルノードシャットダウン(GA)
電源障害などの理由でノードが予期せずシャットダウンした場合、Kubernetes は同じ名前の StatefulSet Pod を別のノードに自動的に再スケジュールし、サービス中断を防ぎます。本機能は GA になりました。
遡及的なデフォルト StorageClass 割り当て(GA)
これまで、storageClassName を指定しない PVC は、デフォルト StorageClass が存在しない場合、Pending 状態のまま無期限に待機していました。Kubernetes は、後から作成されたデフォルト StorageClass を、storageClassName を指定しない未バインドの PVC に割り当てるようになりました。本機能は GA になりました。
スケジューラのパフォーマンス
スケジューラのリトライロジックにより、無効なスケジューリング試行が削減され、パフォーマンスが向上します。クラスターでカスタムスケジューラプラグインを使用している場合は、新しいスケジューリングフレームワークに対応するよう更新してください。詳細については、「Scheduling framework changes」をご参照ください。
ジョブ失敗時の処理
失敗したジョブの処理方法を改善するため、次の 2 つの新しい Alpha フィーチャーゲートが導入されました。
-
`JobPodReplacementPolicy`: 元の Pod が
Failedフェーズ (status.phase: Failed) に到達した場合にのみ置き換え Pod が作成されます。deletionTimestampが設定された時点では作成されません。これにより、同じインデックスを同時に 2 つの Pod が占有してノードリソースを消費する事態を防ぎます。 -
`JobBackoffLimitPerIndex`: Indexed Job で
.spec.backoffLimitPerIndexを設定すると、共有の.spec.backoffLimitに対してすべての失敗をカウントするのではなく、インデックスごとのリトライ回数に上限を設けることができます。特定のインデックスが継続的に失敗しても、ジョブ全体が失敗することはありません。
大規模 Indexed Job の警告
ジョブの completion が 100,000 を超え、かつ parallelism が 10,000 を超え、さらに多数の Pod が失敗している場合、Kubernetes は警告を表示します。この規模では終了ステータスが正確に追跡されない可能性があります。
CRD 検証の改善
CRD 検証ルールに reason および fieldPath フィールドが追加されました。CEL 式が失敗した場合、API サーバーは reason コードと失敗したフィールドパスを返します。詳細については、「CRD Validation Expression Language」をご参照ください。
Webhook の CEL 式によるマッチング
Webhook の matchConditions が CEL 式(1 Webhook あたり最大 64 個)をサポートするようになりました。これにより、完全なアドミッションコントローラーを実装せずに、どのリクエストが Webhook をトリガーするかを詳細に制御できます。詳細については、「Matching requests: matchConditions」をご参照ください。
ValidatingAdmissionPolicy(Beta)
ValidatingAdmissionPolicy は、検証用アドミッション Webhook の代わりとなる、宣言的でクラスター内完結型の機能を提供します。ポリシーオブジェクト内に直接 CEL 式を記述すると、API サーバーが一致するすべてのリクエストに対して式を評価します。Webhook インフラストラクチャーは不要です。詳細については、「ValidatingAdmissionPolicy」をご参照ください。
PVC サイズ変更ステータスフィールドの置き換え
PVC の .status.resizeStatus フィールドは、各リソースのサイズ変更状態を個別に追跡するマップである .status.allocatedResourceStatus に置き換えられました。.status.resizeStatus を読み取るツールはすべて更新してください。詳細については、「PersistentVolumeClaimStatus」をご参照ください。
Indexed Job および StatefulSet の Pod インデックスラベル
Indexed Job および StatefulSet から作成された Pod には、順序インデックスがラベルとして含まれるようになりました。これにより、位置に基づく Pod 選択が簡素化されます。
Kube Controller Manager の同時実行フラグ
コントローラーの同時実行数を制御するための 2 つの新しいフラグが追加されました。
-
--concurrent-cron-job-syncs: CronJob の調整ワーカーの同時実行数を設定します。 -
--concurrent-job-syncs: Job の調整ワーカーの同時実行数を設定します。
詳細については、「--concurrent-cron-job-syncs」および「--concurrent-job-syncs」をご参照ください。
API サーバーの最適化
-
GetList メモリ使用量の削減: キャッシュから提供されるリストリクエストのメモリ使用量が削減されました。詳細については、「GetList test data」をご参照ください。
-
エンドポイントクリーンアップの修正: グレースフルシャットダウン中に API サーバーレプリカが 1 つだけ残っている場合、Kubernetes サービスのエンドポイントが削除されないバグが修正されました。
-
OpenAPI v2 の遅延集約: OpenAPI v2 コントローラーは、リクエストがあった場合にのみ CRD 情報を集約するようになりました。これにより、クライアントがエンドポイントをポーリングしていない場合の CPU およびメモリオーバーヘッドが削減されます。大量の CRD をインストールする際の所要時間が短縮されますが、初回リクエストが遅くなる可能性があります。クライアントを OpenAPI v3 に移行することを推奨します。
-
ConsistentListFromCache(Alpha):
ConsistentListFromCacheフィーチャーゲートにより、API サーバーは監視キャッシュから一貫性を保証した LIST リクエストを提供できるようになり、etcd の負荷が軽減されます。 -
追加の監視メトリクス: メトリクスエンドポイントを通じて、より多くのメトリクスが利用可能になりました。
Kubernetes 1.27
Pod 終了ステータスの修正
-
Pending状態で削除された Pod のステータスが、Failedに設定されるようになりました。 -
Running状態で削除された Pod のステータスが、コンテナの終了コードに基づいてSucceededまたはFailedに設定されるようになりました。
これにより、失敗ポリシーを持つ Pod が Pending 状態で停止してしまうバグが修正されました。RestartPolicy=Always を持つ Pod は、削除後に Succeeded を表示する場合があります。影響がある場合は、コントローラーを確認してください。詳細については、「Set the termination status for pods that do not require a restart」をご参照ください。
PersistentVolumes の ReadWriteOncePod(Beta)
ReadWriteOncePod はボリュームを単一の Pod に限定します。ReadWriteOnce(同一ノード上の複数の Pod を許可)よりも制限が厳しくなります。詳細については、「Single Pod Access Mode for PersistentVolumes graduates to Beta」をご参照ください。
Pod トポロジースプレッド制約(Beta)
トポロジースプレッド制約のいくつかのオプションが Beta となり、デフォルトで有効になりました。minDomains(対象ドメインの最小数)、nodeTaintsPolicy(Taint 付きノードのカウント方法)、nodeAffinityPolicy(アフィニティで除外されたノードのカウント方法)、および whenUnsatisfiable(制約を満たせない場合の動作)です。詳細については、「More fine-grained pod topology spread policies」をご参照ください。
サーバー側フィールド検証(GA)
API サーバーがリソースフィールドをサーバー側で検証するようになりました。kubectl は自動的に Strict モードを使用し、クライアント側の検証をスキップします。サーバーがフィールドを拒否した場合はエラーを返します。詳細については、「Server Side Field Validation and OpenAPI V3 move to GA」をご参照ください。
OpenAPI v3(GA)
Kubernetes 1.23 で導入された OpenAPI v3 が GA になりました。 詳細については、「サーバーサイドのフィールド検証と OpenAPI v3 の GA への移行」をご参照ください。
HPA ContainerResource メトリクスタイプ(Beta)
HPA が ContainerResource メトリクスタイプをサポートするようになりました。これにより、Pod の平均値ではなく、個々のコンテナのリソース使用量に基づいてスケーリングが行われます。これにより、低使用率のサイドカーが平均値をしきい値以下に引き下げ、アプリケーションコンテナがリソース不足であってもスケールアウトできないという一般的な問題が解消されます。詳細については、「Container resource metrics」をご参照ください。
StatefulSet の機能強化(Beta)
次の 2 つの StatefulSet 機能が Beta になりました。
-
`StatefulSetStartOrdinal`:
ordinals.startフィールドを使用して、ゼロ以外の数値から Pod の順序番号を開始できます。 -
`StatefulSetAutoDeletePVC`: Pod が削除された場合や StatefulSet のスケールイン時に、
volumeClaimTemplateから作成された PVC を削除するかどうかを制御できます。
インプレース Pod 垂直スケーリング(Alpha)
InPlacePodVerticalScaling(Alpha、デフォルトで無効)により、Pod を再起動せずに実行中のコンテナの CPU およびメモリの requests および limits を変更できます。詳細については、「Resize CPU and memory resources assigned to containers」をご参照ください。
並列イメージプル
kubelet 設定で serializeImagePulls: false を設定すると、イメージを並列でプルできます。ネットワーク帯域幅やディスク I/O を飽和させないようにするため、1.27 で追加された maxParallelImagePulls を使用して同時プル数を制限できます。詳細については、「Serial and parallel image pulls」をご参照ください。
ボリュームグループスナップショット(Alpha)
ボリュームグループスナップショット API を使用すると、複数の PersistentVolume のクラッシュ整合性のあるスナップショットを一度に作成できます。詳細については、「Introducing an API for volume group snapshots」をご参照ください。
非推奨機能および API
Kubernetes 1.28
| 非推奨機能 | 影響 | 必要な操作 |
|---|---|---|
| インツリー CephFS ボリュームプラグイン | 1.28 でコードが削除されました。インツリー ドライバーを使用しているワークロードは動作しなくなります。 | スペックアップ前に CephFS CSI ドライバー への移行を完了させてください。 |
| Ceph RBD CSI 移行 | Kubernetes 1.28 以降、Ceph RBD ボリュームをアウトオブツリー CSI ドライバーに移行することはできなくなりました。今後のリリースで完全に削除される予定です。 | 削除前に移行を完了させてください。 |
RBD ボリュームプラグイン (kubernetes.io/rbd) |
非推奨となりました。今後のリリースで削除される予定です。 | CephFS CSI ドライバー に切り替えてください。 |
| Key Management Service (KMS) v1 | 非推奨となりました。 | KMSv2 を使用してください。一時的に KMSv1 を使用し続ける場合は、--feature-gates=KMSv1=true を設定してください。詳細については、「Mark KMS v1beta1 as deprecated」をご参照ください。 |
KCM フラグ --volume-host-cidr-denylist および --volume-host-allow-local-loopback |
非推奨となりました。今後のリリースで削除される予定です。 | Kube Controller Manager 構成からこれらのフラグを削除してください。 |
kubelet フラグ --azure-container-registry-config |
非推奨となりました。今後のリリースで削除される予定です。 | 代わりに image-credential-provider-config および --image-credential-provider-bin-dir を使用してください。 |
| Windows ノードプール | Windows ノードプールの作成はサポートされなくなりました。 | Alibaba Cloud Linux 3 または ContainerOS 3.1 ノードプールを使用してください。詳細については、「ノードプールの作成と管理」をご参照ください。 |
Kubernetes 1.27
| 非推奨機能 | 影響 | 必要な操作 |
|---|---|---|
| インツリー AWS EBS ストレージプラグイン | アウトオブツリー CSI プラグインに置き換えられました。 | 詳細については、「cloud-provider-aws」をご参照ください。 |
ノードの spec.externalID フィールド |
非推奨となりました。このフィールドを更新するクライアントは警告を受け取ります。 | spec.externalID の更新を停止してください。 |
Alpha seccomp アノテーション (seccomp.security.alpha.kubernetes.io/pod、container.seccomp.security.alpha.kubernetes.io) |
v1.27 で削除されました。これらのアノテーションに依存するワークロードは、seccomp 設定を静かに失います。 | 代わりに securityContext.seccompProfile フィールドを使用してください。 |
KCM フラグ --pod-eviction-timeout および --enable-taint-manager |
1.27 で削除されました。 | Kube Controller Manager 構成からこれらのフラグを削除してください。 |
kubelet フラグ --container-runtime |
1.27 で削除されました(1.24 から非推奨)。 | 操作は不要です。デフォルトの remote 値が維持されます。 |
kubelet フラグ --container-runtime-endpoint および --image-service-endpoint(CLI フラグとして) |
コマンドラインフラグとして設定できなくなりました。 | これらを kubelet 設定ファイルに移動してください。 |
SecurityContextDeny アドミッションコントローラー |
非推奨となりました。今後のリリースで削除される予定です。 | Pod Security Admission または検証用 Webhook に移行してください。 |
非推奨 API
storage.k8s.io/v1beta1 CSIStorageCapacity API は 1.24 で非推奨となり、1.27 で削除されました。storage.k8s.io/v1(1.24 から利用可能)を使用してください。詳細については、「Storage Capacity Constraints for Pod Scheduling KEP」をご参照ください。
フィーチャーゲートの変更
フィーチャーゲートは Kubernetes 機能の成熟度を定義します。
-
Alpha: デフォルトで無効です。実験的であり、変更される可能性があります。
-
Beta: デフォルトで有効です。ほとんどのクラスターで十分に安定しています。
-
GA(Generally Available): 常に有効です。フィーチャーゲートは削除されます。
GA に昇格
以下のフィーチャーゲートが GA に昇格し、常に有効になりました。フィーチャーゲートは削除されています。
Kubernetes 1.28:
| フィーチャーゲート | 機能 |
|---|---|
NodeOutOfServiceVolumeDetach |
ノードに node.kubernetes.io/out-of-service が追加されると、寛容性を持たない Pod は強制的に削除され、そのボリュームは即座にデタッチされます。これにより、他のノードでの迅速な回復が可能になります。 |
IPTablesOwnershipCleanup |
Kubernetes は KUBE-MARK-DROP および KUBE-MARK-MASQ iptables チェーンを作成しなくなりました。 |
ProbeTerminationGracePeriod |
プローブレベルの terminationGracePeriodSeconds を有効にして、ライブネスプローブおよびスタートアッププローブの Pod レベルの猶予期間をオーバーライドできるようにします。 |
DelegateFSGroupToCSIDriver、DevicePlugins、KubeletCredentialProviders、MixedProtocolLBService、ServiceInternalTrafficPolicy、ServiceIPStaticSubrange、EndpointSliceTerminatingCondition |
さまざまな安定した機能が常に有効になりました。フィーチャーゲートは削除されています。 |
Kubernetes 1.27:
| フィーチャーゲート | 機能 |
|---|---|
ExpandCSIVolumes、ExpandInUsePersistentVolumes、ExpandPersistentVolumes |
CSI ボリューム、使用中の PV、および一般的な PV のボリューム拡張。これら 3 つはすべて常に有効になりました。 |
CSIInlineVolume |
Pod 仕様内のインライン CSI ボリューム。1.25 から GA となり、1.27 で削除されました。 |
EphemeralContainers |
一時的なデバッグコンテナ。1.25 から GA となり、フィーチャーゲートは削除されました。 |
LocalStorageCapacityIsolation |
Pod ごとの emptyDir 使用量にハードリミットを設定します。kubelet はリミットを超えた Pod をエビクションします。1.25 から GA となり、1.27 で削除されました。 |
NetworkPolicyEndPort |
endPort フィールド。1.25 から GA となり、1.27 で削除されました。 |
StatefulSetMinReadySeconds |
minReadySeconds フィールド。1.25 から GA となり、1.27 で削除されました。 |
DaemonSetUpdateSurge |
maxSurge フィールド。1.25 から GA となり、削除されました。 |
IdentifyPodOS |
os フィールド。1.25 から GA となり、削除されました。 |
CSIMigration |
インツリーからアウトオブツリー CSI への移行は v1.25 で GA に達しました。フィーチャーゲートは常に有効となり、削除されました。 |
Beta に昇格(デフォルトで有効)
Kubernetes 1.28:
| フィーチャーゲート | 機能 |
|---|---|
AdmissionWebhookMatchCondition |
Webhook の matchConditions で CEL 式を使用可能。1 Webhook あたり最大 64 個の条件を設定可能。 |
Kubernetes 1.27:
| フィーチャーゲート | 機能 |
|---|---|
StatefulSetStartOrdinal |
StatefulSet の Pod 順序番号をゼロ以外の数値から開始可能。 |
StatefulSetAutoDeletePVC |
StatefulSet の Pod 削除時に PVC の自動削除を制御可能。 |
ReadWriteOncePod |
ReadWriteOncePod アクセスモード。 |
Alpha として新規追加(デフォルトで無効)
Kubernetes 1.28:
| フィーチャーゲート | 機能 |
|---|---|
UnknownVersionInteroperabilityProxy |
クラスター内で複数の API サーバーバージョンが共存している場合に、リクエストを適切な API サーバーにルーティングします。詳細については、「Mixed version proxy」をご参照ください。 |
ConsistentListFromCache |
API サーバーが監視キャッシュを使用して、一貫性を保証した LIST リクエストを提供できるようにします。 |
Kubernetes 1.27:
| フィーチャーゲート | 機能 |
|---|---|
NodeLogQuery |
kubelet 設定で enableSystemLogHandler: true および enableSystemLogQuery: true を設定した後、kubectl でノードログをクエリできます。 |
ServiceNodePortStaticSubrange |
NodePort 範囲を 2 つの帯域に分割します。動的割り当ては上位帯域を使用し、下位帯域は静的割り当て用に予約されます。これにより、ポート競合が減少します。詳細については、「Avoid collisions assigning ports to NodePort Services」をご参照ください。 |
InPlacePodVerticalScaling |
Pod を再起動せずにコンテナの CPU およびメモリをサイズ変更可能。 |
削除(設定不要)
Kubernetes 1.27:
v1.23 で GA に達したため、IPv6DualStack フィーチャーゲートは削除されました。クラスター構成で手動設定している場合は、スペックアップ前に削除してください。