Container Service for Kubernetes (ACK) は、認定Kubernetes適合プログラムの条項に厳密に準拠しています。 このトピックでは、更新ノート、主要な変更、新機能、非推奨の機能とAPI、機能ゲートなど、Kubernetes 1.28の更新について説明します。
バージョン更新
以下の主要コンポーネントは、Kubernetes 1.28をサポートするためにACKによって更新および最適化されています。
キーコンポーネント | バージョン |
Kubernetes | 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 | v1.26.5-92f859a-aliyun |
CNI | フランネルv0.15.1.22-20a397e6-aliyun |
Terway v1.5.0以降、およびTerwayControlplane v1.5.0以降 | |
NVIDIAコンテナーランタイム | v3.13.0 |
Ingressコントローラ | v1.8.0-aliyun.1 |
更新ノート
コンポーネント | 説明 |
CephFSおよびCeph RBDボリュームプラグイン | クラスターがCephFSおよびCeph RBDボリュームプラグインを使用している場合は、Kubernetesが提供するプラグインドライバーの代わりにオフツリードライバーを使用しているかどうかを確認する必要があります。 また、オフツリードライバの互換性、安定性、およびパフォーマンスを確認する必要があります。 |
条件
このトピックを読む前に、次の用語を学ぶことをお勧めします。
主な変更
スケジューラのスケジューリングロジックは、無効な再試行を減らし、パフォーマンスを向上させるためにKubernetes 1.28で最適化されています。
クラスターでカスタムスケジューラープラグインを使用している場合は、パフォーマンスを向上させるためにプラグインを最適化および更新することを推奨します。 詳細については、「スケジューリングフレームワークの変更」をご参照ください。
Kubernetesコミュニティは、既存のストレージプラグインドライバーを標準のCSI APIを使用するオフツリードライバーに置き換えるためのCSI移行ソリューションを提供します。 CSI移行機能は、Kubernetes 1.25のGA段階にあります。
storage.k8s.io/v1beta1
のAPIとElastic Block Service (EBS) プラグインは、Kubernetes 1.27で削除されます。 CephFSボリュームプラグインコードが削除され、kubernetes 1.28でKubernetes. io/rbd
が廃止されました。 代わりに、CephFS CSIドライバが使用される。 さらに、Ceph RBDボリュームを、Kubernetes 1.28のオフツリーCSIドライバーを使用するプラグインに移行できなくなりました。次のCVEバグは、バージョン1.28.9-aliyun.1で修正されました。
CVE-2023-45288
CVE-2024-3177
CVE-2024-24786
機能
Kubernetes 1.27
ポッドがターミナルフェーズに正しく移行できない問題が修正されました。 失敗フェーズは、保留中に削除されたポッドに割り当てられます。 [成功] または [失敗] フェーズ (ポッドの終了状態に応じて) は、実行中に削除されるポッドに割り当てられます。 これにより、ポッドを作成するジョブがポッド障害ポリシーを使用している場合、ポッドが削除中にPending状態でスタックする可能性があるという問題が修正されました。
ポッドが
RestartPolicy=Always
で構成されている場合、ポッドが削除された後、成功フェーズがポッドに割り当てられる可能性があります。 したがって、コントローラを変更する必要があります。 詳細については、「再起動されないすべてのポッドにターミナルフェーズを正しく設定する」をご参照ください。永続ボリューム (PV) のReadWriteOncePod機能はベータ版に達しました。 この機能により、ボリュームアクセスを1つのポッドに制限できます。 詳細については、「PersistentVolumes Graduates to Betaのシングルポッドアクセスモード」をご参照ください。
ポッドトポロジの広がり制約を使用して、クラスター内のポッドがゾーン間でどのように広がるかを制御できます。 次の機能がベータ版に達しました。
minDomains
(ポッドが拡散されるドメインの最小数を指定) 、nodeTaintsPolicy
(ポッド拡散中のノードの汚れの扱い方を指定) 、nodeAffinityPolicy
(ポッド拡散中のノードアフィニティの扱い方を指定) 、whenUnsatisable
(ポッドがスプレッド制約に準拠していない場合の場合の処理方法を指定) 。 詳細については、「詳細なポッドトポロジのスプレッドポリシーがベータ版に到達」をご参照ください。
APIサーバーに送信されたリソースを検証するためのサーバー側フィールド検証機能がGAに達しました。 Kubectl機能の検証はクライアントではスキップされ、サーバー側で
strict
モードで実行されます。 kubectlが検証に失敗すると、エラーがスローされます。 詳細については、次をご参照ください: サーバー側フィールド検証とOpenAPI V3がGAに移行。OpenAPI V3は新しいOpenAPI標準です。 OpenAPI V3はKubernetes 1.23で導入され、Kubernetes 1.27でGAに到達しました。 詳細については、次をご参照ください: サーバー側フィールド検証とOpenAPI V3がGAに移行。
Horizontal Pod Autoscaler (HPA) APIを使用すると、コンテナリソースメトリックを設定して、HPAが個々のコンテナのリソース使用状況を追跡し、それに応じてリソースをスケールできるようになります。 この機能はKubernetes 1.27でベータ版に達しました。 ポッドの平均リソース使用量を示すリソースメトリックと比較して、コンテナリソースメトリックは個々のコンテナのリソース使用量を示します。 これにより、ポッド内のサイドカーコンテナのリソース使用量は少ないが、アプリケーションコンテナのリソース使用量は多いため、ポッドの平均リソース使用量ではスケールアウトアクティビティをトリガーできないという問題を解決できます。
複数のStatefulSet機能がベータに達しました。これには、0以外の番号からポッドにシーケンス番号を割り当てる機能、指定された永続ボリュームクレーム (PVC) を削除する機能、スケールイン活動中に作成されたPVCを自動的に削除する機能が含まれます。
ポッドとコンテナーを再起動することなく、ポッドの
resources
フィールドで指定されたCPUおよびメモリリソースのサイズを変更するための新機能が追加されました。 ノードは、ポッドの要求
に基づいてポッドにリソースを割り当て、制限
に基づいてポッドのリソース使用を制限します。 一部のフィールドは、ポッドリソースのインプレースサイズ変更をサポートするためにポッドに追加されます。 詳細については、「コンテナーに割り当てられたCPUおよびメモリリソースのサイズ変更」をご参照ください。 この機能はKubernetes 1.27でAlphaに達し、デフォルトで無効になっています。kubeletの
serializeImagePulls
フィールドをfalse
に設定して、デフォルトのシリアルイメージプルモードを使用する代わりにパラレルイメージプルを有効にできます。 Kubernetes 1.27にmaxParallelImagePullsフィールドが追加され、並行してプルできるイメージの数が制限されています。 これにより、イメージプルが過剰な帯域幅やディスクI/Oを消費するのを防ぎます。Kubernetes 1.27には、ボリュームスナップショットAPIに加えて、クラッシュに対応したボリュームグループスナップショットAPIが導入されており、ある時点で複数のPVのスナップショットを作成できます。 詳細については、「ボリュームグループスナップショット用のAPIの導入」をご参照ください。
Kubernetes 1.28
非グレースフルノードのシャットダウン機能はGAに達しました。 電力不足などの例外によりノードがシャットダウンした場合、StatefulSetは、業務の中断を避けるために、別のノードに同じ名前のポッドを作成する必要があります。
NodeOutOfServiceVolumeDetach機能ゲートがGAに達しました。 この機能を有効にすると、例外によりノードがシャットダウンされると、ノードの終了したポッドに対してボリュームのデタッチ操作がすぐに実行されます。 これにより、サービス外ノードのポッドを他のノードですばやく回復できます。
遡及的なデフォルトのStorageClass割り当て機能はGAに達しました。 この機能を導入する前に、デフォルトのStorageClassが存在しないときに
storageClassName
なしでPVCを作成すると、PVCはPending状態のままになります。 この機能が導入された後、デフォルトのStorageClassが作成されると、storageClassName
のないPVCは自動的にデフォルトのStorageClassを使用します。ジョブの失敗を避けるために、2つの機能が導入されます。
ポッドが削除された直後に置換ポッドを作成する
deletionTimestamp
機能ゲートと比較して、[JobPodReplacementPolicy] 機能ゲート (アルファステージ) は、ポッドに失敗フェーズ (status.phase: Failed
) が割り当てられた後にのみ置換ポッドを作成します。 このポリシーは、2つのポッドが同じインデックスとノードリソースを同時に使用することを防ぎます。JobBackoffLimitPerIndex機能ゲート (アルファフェーズ) を設定できます
. spec.backoffLimitPerIndex
インデックスごとのポッド障害の最大再試行回数を制限します。 この機能を導入する前に、インデックスの連続したポッド障害の数が. spec.backoffLimit
、対応するインデックス付きジョブは失敗します。
インデックス付きジョブの
完了
フィールドが100,000を超える値に設定されている場合、ジョブの並列処理
フィールドは10,000を超える値に設定され、多数のポッドが失敗すると、ポッドの終端フェーズトレースが失敗する可能性があります。 この問題を防ぐために、ジョブの作成時に上記のフィールドを過度に大きな値に設定すると、警告が表示されます。CRD検証が失敗したときに理由とフィールドパスを返すために、
理由
フィールドとfieldPath
フィールドがCustomResourceDefinition (CRD) 検証ルールに追加されます。 詳細については、「CRD検証式言語」をご参照ください。Common Expression Language (CEL) 式は、webhookマッチングリクエストで使用できます。 最大64のマッチング条件がサポートされています。 詳細については、「一致するリクエスト: matchConditions」をご参照ください。
サイドカーコンテナが起動される時刻を指定できるように、SidecarContainersフィーチャゲートが導入されています。 たとえば、ログ収集の信頼性を向上させるために、他のコンテナよりも先にログ収集コンテナを起動できます。 詳細については、「Kubernetes v1.28: ネイティブサイドカーコンテナーの紹介」をご参照ください。 この機能はKubernetes 1.28でAlphaに達し、デフォルトで無効になっています。
. status.resizeStatus
PVCのフィールドは、. status.allocatedResourceStatus
マップフィールドは、PVC用にサイズ変更されているリソースの状態を格納します。 詳細については、「PersistentVolumeClaimStatus」をご参照ください。ポッドインデックス (シーケンス番号) は、インデックス付きジョブとStatefulSetsによって作成されたポッドにラベルとして追加されます。
ValidatingAdmissionPolicy機能ゲート (ベータフェーズ) は、リソースリクエストを検証するための承認Webhookの検証方法に代わる宣言型の機能を提供します。 フィーチャゲートでは、CEL式を使用して複雑な検証ルールを記述することもできます。 APIサーバーは、CEL式に対してリソース要求を検証します。
-- concurrent-cron-job-syncs
フラグをKubernetesコントローラーマネージャーに追加してCronJobコントローラーの同時実行性を設定し、-- concurrent-job-syncs
フラグを追加してJobコントローラーの同時実行性を設定します。 詳細については、「 -- concurrent-cron-job-syncs」および「 -- concurrent-job-syncs」をご参照ください。APIサーバーは最適化されています。
キャッシュからリスト (GetList) を取得するメモリ使用量が削減されます。 詳細については、「GetListテストデータ」をご参照ください。
レプリケートされたAPIサーバーが1つしか存在しない場合、Kubernetesサービスのエンドポイントが削除されない問題が修正されました。 これにより、グレースフルシャットダウン中にKubernetes Servicesのエンドポイントが確実に削除されます。
OpenAPI v2コントローラは、CRDからの情報を集約するのが面倒になります、OpenAPI v2仕様は削減されます。 クライアントがOpenAPI v2にリクエストを送信しない場合、APIサーバーのCPUおよびメモリ使用量が削減されます。 加えて、多数のCRDを設置する効率が改善される。 しかし、これは初回要求の処理を遅くする。 クライアントをOpenAPI v3をサポートするバージョンに更新することを推奨します。
ウォッチキャッシュを使用してLISTリクエストの一貫した読み取りを保証できるように、[キャッシュからの一貫性のある読み取り] 機能ゲートが導入されました。
メトリクスAPIを呼び出すことで、さまざまなメトリクスを収集できます。
非推奨の機能
Kubernetes 1.27
インツリーAWS EBSストレージプラグインは、オフツリーCSIプラグインに置き換えられます。 詳細については、「cloud-provider-aws」をご参照ください。
ノードの
spec.externalID
フィールドは非推奨です。 クライアントがこのフィールドを更新する要求を送信すると、警告が返されます。 クライアントに警告を返す方法の詳細については、「役立つ警告」をご参照ください。Secure Computing Mode (seccomp) がKubernetes 1.19でGAに達しました。 このモードでは、ポッドまたはコンテナが実行できるシステム呼び出しを制限して、ワークロードのセキュリティを向上させることができます。 アルファステージの
seccomp.security.alpha.kubernetes.io/pod
およびcontainer.seccomp.security.alpha.kubernetes.io
のアノテーションは、Kubernetes 1.19では廃止され、Kubernetes 1.27では削除されます。ポッドまたはコンテナーには、
securityContext.seccompProfile
フィールドを使用することを推奨します。Kubernetesコントローラーマネージャーコマンドからは、
-- pod-eviction-timeout
(NotReadyノードでのpod evictionのグレースフルピリオドを指定) および-- enable-taint-manager
(指定されたテイントを持つノードからポッドを削除) のフラグが削除されます。 デフォルトでは、指定されたテイントを持つノードからポッドを削除する機能が有効になっています。kubeletコマンドからは、
-- container-runtime
、-- container-runtime-endpoint
、-- image-service-endpoint
のフラグが削除されます。 dockershimが-- container-runtime
から削除された後、remote
は保持され、Kubernetes 1.24で非推奨になり、Kubernetes 1.27で削除されます。 kubeletコマンドで-- container-runtime-endpoint
および-- image-service-endpoint
フラグを指定できなくなりました。 これらの設定を使用するには、代わりにkubelet構成ファイルを変更します。SecurityContextDenyアドミッションコントローラーは廃止され、後のバージョンでは削除されます。
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ノードプールを作成できなくなりました。
Alibaba Cloud Linux 3やContainerOS 3.1などの他のオペレーティングシステムを使用するノードプールを作成できます。 詳細については、「ノードプールの作成」をご参照ください。
非推奨API
CSIStorageCapacity APIを使用すると、現在使用可能なストレージ容量を照会して、十分なストレージリソースを持つノードにポッドがスケジュールされていることを確認できます。 storage.k8s.io/v1beta1
のAPIのバージョンは、Kubernetes 1.24では廃止され、Kubernetes 1.27では削除されます。
storage.k8s.io/v1
バージョンの使用を推奨します。 このバージョンは、Kubernetes 1.24以降のバージョンで利用できます。 詳細については、「ポッドスケジューリングKEPのストレージ容量制約」をご参照ください。
機能ゲート
このセクションでは、主な変更点のみを示します。 詳細については、「機能ゲート」をご参照ください。
Kubernetes 1.27
アルファステージの
NodeLogQuery
機能ゲートが追加されました。 kubeletに対してenableSystemLogHandler
およびenableSystemLogQuery
をtrue
に設定した後、kubecltを使用してノードログを照会できます。StatefulSetStartOrdinal
機能ゲートはベータに達しました。 このフィーチャゲートを使用すると、StatefulSetsによって作成されたポッドにゼロ以外の番号からシーケンス番号を割り当てることができます。 デフォルトでは、この機能ゲートは有効になっています。StatefulSetAutoDeletePVC
機能ゲートがベータに達しました。 新しいポリシーは、StatefulSetsがvolumeClaimTemplate
から作成したPVCを削除するかどうかを制御します。IPv6DualStack
機能ゲートはKubernetes 1.23でGAに達し、デフォルトで有効になっています。 コンポーネントコードはKubernetes 1.27で削除されます。クラスターにIPv4/IPv6デュアルスタックを手動で設定した場合は、クラスターを更新する前に設定を削除してください。
アルファステージの
ServiceNodePortStaticSubrange
機能ゲートが追加され、NodePortサービスへのポート割り当ての競合が軽減されます。 この機能ゲートは、NodePortサービスのポート範囲を2つのバンドに分割します。 動的ポート割り当ては、高帯域を使用する。 ポート競合のリスクが低い低帯域を使用して、ポートをNodePortサービスに静的に割り当てることができます。 詳細については、「NodePortサービスへのポート割り当ての回避」をご参照ください。アルファステージの
InPlacePodVerticalScaling
機能ゲートが追加され、ポッドとコンテナを再起動せずにポッドのCPUとメモリリソースのサイズを変更できるようになりました。ボリュームを拡張するための次の機能ゲートがGAに達し、デフォルトで有効になっています。
ExpandCSIVolumes
(CSIボリュームを拡張) 、ExpandInUsePersistentVolumes
(使用中のPVを拡張) 、ExpandPersistentVolumes
(PVを拡張) 。ツリー内ストレージプラグインを、ツリー外CSIドライバを使用するプラグインに移行するための
CSIMigration
機能ゲートは、デフォルトで常に有効になっています。 この機能ゲートはKubernetes 1.27で削除されます。インラインボリュームの
CSIInlineVolume
機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 この機能ゲートはKubernetes 1.27で削除されます。エフェメラルコンテナの
EphemeralContainers
フィーチャーゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 この機能ゲートはKubernetes 1.27で削除されます。LocalStorageCapacityIsolation
機能ゲートは、emptyDir
ボリュームの一時的なストレージ容量の分離をサポートします。 ローカルストレージの使用量が制限を超えたときにポッドを削除することで、ポッドのローカルストレージの使用量を厳しく制限できます。 この機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 Kubernetes 1.27では、機能ゲートが削除されます。NetworkPolicyEndPort
機能ゲートを使用すると、ネットワークポリシーのendPort
フィールドを設定して複数のポートを指定できます。 この機能ゲートを導入する前に、指定できるポートは1つだけです。 この機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 Kubernetes 1.27では、機能ゲートが削除されます。StatefulSetMinReadySeconds
機能ゲートを使用すると、StatefulSetsのminReadySeconds
を設定できます。 この機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 Kubernetes 1.27では、機能ゲートが削除されます。DaemonSetUpdateSurge
機能ゲートでは、DaemonSetsのmaxSurge
を設定できます。 この機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 Kubernetes 1.27では、機能ゲートが削除されます。IdentifyPodOS
機能ゲートを使用すると、ポッドのオペレーティングシステムを指定できます。 この機能ゲートはKubernetes 1.25でGAに達しており、デフォルトで常に有効になっています。 Kubernetes 1.27では、機能ゲートが削除されます。ReadWriteOncePod
機能ゲートがベータに達し、デフォルトで有効になっています。 この機能ゲートを使用すると、ReadWriteOncePod
モードでPVにアクセスできます。
Kubernetes 1.28
NodeOutOfServiceVolumeDetach
機能ゲートがnode.kubernetes.io/out-of-service
のテントを追加してノードをサービス外としてマークすると、ノード上の許容範囲と一致しないポッドは強制的に削除され、ボリュームはすぐにデタッチされます。 この機能ゲートはKubernetes 1.28でGAに達しており、デフォルトで常に有効になっています。AdmissionWebhookMatchCondition
機能ゲートはデフォルトで有効になっており、CEL式をwebhookマッチング条件として使用できます。UnknownVersionInteroperabilityProxy
機能ゲートがAlphaに達しました。 この機能ゲートは、複数のAPIサーバーバージョンが存在する場合、正しいAPIサーバーにリクエストを送信できます。 詳細については、「混合バージョンプロキシ」をご参照ください。IPTablesOwnershipCleanup
機能ゲートはGAに達しました。 このフィーチャゲートにより、kubeletはKUBE-MARK-DROPおよびKUBE-MARK-MASQのiptablesルールを作成しなくなります。ConsistentListFromCache
フィーチャゲートがAlphaに達しました。 この機能ゲートにより、APIサーバーはウォッチキャッシュを使用して、LISTリクエストの一貫した読み取りを保証できます。ProbeTerminationGracePeriod
機能ゲートはGAに達し、デフォルトで有効になっています。 この機能ゲートでは、プローブレベルterminationGracePeriodSecondsを使用できます。GAステージの次の機能ゲートが削除されます。
DelegateFSGroupToCSIDriver
、DevicePlugins
、KubeletCredentialProviders
、MixedProtocolLBService
、ServiceInternalTrafficPolicy
、ServiceIPStaticSubrange
、およびEndpointSliceTerminatingCondition
。
関連ドキュメント
Kubernetes 1.27およびKubernetes 1.28のリリースノートの詳細については、「CHANGELOG-1 27」および「CHANGELOG-1 28」をご参照ください。