Alibaba Cloud Container Service for Kubernetes (ACK) は、Kubernetes Certified Conformance プログラムに準拠しています。このトピックでは、ACK 向けの Kubernetes 1.30 の主な変更点について説明します。これには、更新ノート、新機能、非推奨の機能と API、および機能ゲートが含まれます。
コンポーネントのバージョン
次の表に、ACK クラスターのコアコンポーネントのバージョンを示します。
コアコンポーネント | バージョン番号 |
Kubernetes | 1.30.7-aliyun.1, 1.30.1-aliyun.1 |
etcd | v3.5.9 |
containerd | 1.6.28 |
CoreDNS | v1.9.3.10-7dfca203-aliyun |
CSI | |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway および TerwayControlplane v1.9.0 以降 説明 v1.30 以降、新しいクラスターを作成して Terway NetworkPolicy を選択すると、ネットワークポリシーは eBPF を使用して実装されます。クラスターまたはそのコンポーネントをアップグレードしても、この動作は変更されません。詳細については、「ACK クラスターでネットワークポリシーを使用する」をご参照ください。 |
更新ノート
カテゴリ | ノート | 解決策 |
オペレーティングシステム (OS) | CentOS および Alibaba Cloud Linux 2 は、ノードプールのオペレーティングシステムとしてサポートされなくなりました。詳細については、「[製品変更] Alibaba Cloud Linux 2 および CentOS 7 のメンテナンス終了に関するお知らせ」をご参照ください。 | ノードプールをアップグレードして、ノードプールのオペレーティングシステムを変更します。操作と関連する注意事項の詳細については、「ノードプールをアップグレードする」をご参照ください。 Alibaba Cloud の公式オペレーティングシステムである ContainerOS および Alibaba Cloud Linux 3 の使用を推奨します。 |
kube-proxy コンポーネント | v1.29 より後のバージョンでは、kube-proxy は `conntrack_max` 値の構成方法を変更します。これは、kube-proxy の構成と CPU コア数に基づいて、ノードの `conntrack_max` 値を計算して更新します。v1.23 から v1.28 までのバージョンでは、kube-proxy は手動で設定された `conntrack_max` 値を上書きしません。v1.29 以降にアップグレードすると、kube-proxy は新しいロジックに基づいて `conntrack_max` 値を自動的に下げる可能性があります。詳細については、#120448 をご参照ください。 | 以前に `conntrack_max` 値をカスタマイズした場合は、アップグレードする前に sysctl 値が変更されたかどうかを確認するには、クラスター検査機能を有効にします。詳細については、「クラスター検査を使用する」をご参照ください。 |
特徴
バージョン 1.30.7-aliyun.1 は、脆弱性 CVE-2024-10220 を修正します。
Kubernetes 1.29 において
PreStop フックにスリープアクションが追加されました。これにより、コンテナーは終了する前に指定された時間一時停止して、保留中のプロセスやネットワークリクエストを待つことができます。詳細については、KEP-3960: Introducing Sleep Action for PreStop Hook をご参照ください。
SidecarContainers はベータ版になり、デフォルトで有効になりました。この機能を使用すると、init コンテナーの
restartPolicyをAlwaysに設定することで、サイドカーコンテナーとして実行できます。サイドカーコンテナーは、メインのアプリケーションコンテナーや他の init コンテナーに影響を与えることなく、独立して開始、停止、または再起動できます。詳細については、Sidecar Containers をご参照ください。この機能を使用する場合、ノード上の kubelet のバージョンがコントロールプレーンのバージョンと同じであることを確認してください。
新しい ServiceCIDR リソースタイプを使用すると、クラスター内の Service の ClusterIP アドレスの範囲を動的に構成できます。この機能はアルファ版であり、デフォルトでは無効になっています。Service で利用可能な IP アドレスの数を動的に拡張する方法の詳細については、KEP-1880: Multiple Service CIDRs をご参照ください。
Persistent Volume Claim (PVC) とコンテナー API は、同じ ResourceRequirements 構造体を使用してリソースの
requestsとlimitsを定義していました。その結果、コンテナーのresources構造体が変更された場合 (たとえば、claimsフィールドが追加された場合)、PVC API も変更されました。そのため、PVC はrequestsとlimitsのみを含み、claimsを含まない別の VolumeResourceRequirements 構造体を使用するようになりました。詳細については、Volume resource requirements をご参照ください。PodReadyToStartContainers条件はベータ版になり、デフォルトで有効になりました。この条件は、Pod サンドボックスが作成され、そのネットワークが構成されたことを示します。これにより、kubelet は Pod の起動ステータスをより適切に追跡できます。詳細については、Pod conditions をご参照ください。PodAffinity と PodAntiAffinity は、`matchLabelKeys` と `mismatchLabelKeys` をサポートするようになりました。これにより、スケジューラがデプロイメントのローリングアップデート中に古い Pod と新しい Pod を区別できず、予期しないスケジューリング結果が発生するという問題が解決されます。PodAffinity に `matchLabelKeys` を構成すると、デプロイメントは
pod-template-hashラベルを ReplicaSet に追加します。デプロイメント内の各 Pod には、対応するハッシュ文字列が割り当てられます。これにより、スケジューラは同じpod-template-hash値を持つ Pod のみを評価するように指示され、同じ更新バッチ内の Pod を区別するのに役立ちます。詳細については、KEP-3633 をご参照ください。コア Kubernetes API リソースに加えて、ValidatingAdmissionPolicy の型チェックは、カスタムリソース定義 (CRD) と API 拡張タイプをサポートするようになりました。これにより、ポリシーの信頼性と正しいクラスター構成が保証されます。詳細については、type-checking をご参照ください。
新しい UserNamespacesPodSecurityStandards 機能ゲートは、ユーザー名前空間を Pod Security Standards と統合します。この機能が有効になっている場合、コンテナーは非ルートユーザーとして、または Pod の Security Context で定義された特定のユーザーとして実行できます。この機能はアルファ版であり、デフォルトでは無効になっています。将来のバージョンでも無効のままになる可能性があります。詳細については、KEP-127: Update PSS based on feature gate をご参照ください。
ノードオブジェクトの場合、新しい DisableNodeKubeProxyVersion 機能ゲートは
status.nodeInfo.kubeProxyVersionフィールドを非推奨にします。これにより、kubeProxyVersionフィールドがノードに設定されるのを防ぎます。kubelet は kube-proxy のバージョンを常に正確に識別できるわけではないため、このフィールドは不正確になる可能性があります。この機能はアルファ版であり、デフォルトでは無効になっています。JobBackoffLimitPerIndex 機能ゲートはベータ版になり、デフォルトで有効になりました。この機能を使用すると、インデックス付きジョブの各インデックスの最大再試行回数を指定できます。インデックス付きジョブの詳細については、「静的作業割り当てによる並列処理のためのインデックス付きジョブ」をご参照ください。
Kubernetes 1.30 において
ImageMaximumGCAge 機能を使用すると、kubelet は未使用のイメージが GC されるまでの最大生存時間 (TTL) を構成できます。イメージが指定された時間後に未使用のままである場合、GC の対象になります。デフォルト値は
"0s"で、時間制限が設定されていないことを意味します。この機能は v1.29 でアルファ版になった後、v1.30 でベータ版に昇格しました。kubelet は、イメージのプル時間を追跡するために
image_pull_duration_secondsメトリックを追加します。詳細については、「アルファ Kubernetes メトリックのリスト」をご参照ください。LegacyServiceAccountTokenCleanUp 機能ゲートは、一般提供 (GA) となり、デフォルトで有効になりました。ServiceAccount 用に自動生成されたシークレットが特定の期間 (デフォルトでは 1 年) 使用されず、どの Pod にもマウントされていない場合、kube-controller-manager は
kubernetes.io/legacy-token-invalid-sinceラベルをシークレットに追加します。ラベルの値は現在の日付であり、シークレットを無効としてマークします。シークレットが無効としてマークされた後、さらに特定の期間 (デフォルトでは 1 年) 使用されない場合、kube-controller-manager は自動的にそれを削除します。無効としてマークされたがまだ削除されていないシークレットを再アクティブ化するには、kubernetes.io/legacy-token-invalid-sinceラベルを削除します。詳細については、自動生成されたレガシー ServiceAccount トークンのクリーンアップおよびレガシー ServiceAccount トークンクリーナーをご参照ください。v1.30 では、kube-proxy の
--nodeport-addressesフラグが設定されていない場合 (これがデフォルトの動作です)、NodePort Service への更新は、ノードのすべての IP アドレスではなく、プライマリノードの IP アドレスにのみ影響します。詳細については、#122724 をご参照ください。構成の競合やセキュリティの問題を防ぐため、OIDC 発行者 URL を API Server の ServiceAccount 発行者 URL と同じ値で構成しないでください。詳細については、#123561 をご参照ください。
LoadBalancerIPMode 機能を使用すると、LoadBalancer タイプの Service に
.status.loadBalancer.ingress.ipModeフィールドを追加できます。このフィールドは、ロードバランサーの IP アドレスの転送動作を指定します。このフィールドは、.status.loadBalancer.ingress.ipフィールドも指定されている場合にのみ指定できます。LoadBalancerIPMode 機能は現在ベータ版です。詳細については、ロードバランサーのステータスの IPMode の指定およびサービスのロードバランサー IP モードをご参照ください。HorizontalPodAutoscaler (HPA) の ContainerResource メトリックに基づく Pod の自動スケーリングは、v1.30 で安定版になりました。この新しい動作により、HPA は Pod 全体のリソース使用量だけでなく、Pod 内の個々のコンテナーのリソース使用量に基づいてスケーリングできます。これは、Pod 内の最も重要なコンテナーのスケーリングしきい値を設定するのに役立ちます。詳細については、コンテナーリソースメトリックをご参照ください。
AdmissionWebhookMatchConditions 機能ゲートは GA になり、デフォルトで有効になり、無効にすることはできません。この機能を使用すると、アドミッション Webhook の一致条件を定義できます。これにより、Webhook がいつ呼び出されるかをより詳細に制御できます。詳細については、動的アドミッションコントロールをご参照ください。
新しい JobSuccessPolicy 機能を使用すると、成功した Pod のセットに基づいてジョブが正常に完了したことを宣言できます。成功ポリシーでは、特定のインデックス (Pod インデックス x、y、z など) またはインデックスの数 (インデックスのセットから 3 つの Pod など) を指定して、ジョブの完了を宣言できます。この機能はアルファ版です。詳細については、ジョブの成功/完了ポリシーをご参照ください。
新しい RelaxedEnvironmentVariableValidation 機能では、環境変数でほとんどの表示可能な ASCII 文字 (32 から 126 までのすべての文字、ただし
=を除く) を使用できます。この機能はアルファ版であり、デフォルトでは無効になっています。詳細については、「#123385」をご参照ください。新しい
CustomResourceFieldSelectors機能を使用すると、CRD にselectableFieldsを構成できます。これにより、フィールドセレクターを使用して、List、Watch、および DeleteCollection リクエストをフィルターできます。これにより、特定の基準を満たす CRD リソースを簡単に見つけたり管理したりできます。この機能はアルファ版であり、デフォルトでは無効になっています。詳細については、「カスタムリソースフィールドセレクター」をご参照ください。CRDValidationRatcheting 機能が更新されました。CRD に新しい入力規則を追加しても、API Server は、新しい入力規則によって既存のリソースが無効になった場合でも、そのリソースへの更新を拒否しません。この動作は、リソースの無効な部分が変更されない限り適用されます。この動作は、既存のリソースやユーザーには影響しません。これにより、新しい入力規則を安全に追加し、CRD を移行して検証に OpenAPI v3 スキーマを使用できます。この機能は現在ベータ版であり、デフォルトで有効になっています。詳細については、CRD 検証ラチェットをご参照ください。
Downward API は、
status.hostIPsフィールドを使用してデュアルスタック (IPv4 および IPv6) をサポートするようになりました。status.hostIPsリストの最初の IP アドレスは、常にstatus.hostIPと同じです。詳細については、「Downward API」をご参照ください。NodeLogQuery 機能を使用すると、
/logsエンドポイントを使用してノードサービスログをクエリできます。この機能はベータ版に昇格しましたが、デフォルトでは無効になっています。詳細については、「ログクエリ」をご参照ください。
非推奨の機能
Kubernetes 1.29 において
CronJob は、
.spec.scheduleでのCRON_TZまたはTZの設定をサポートしなくなりました。代わりに.spec.timeZoneフィールドを使用してください。これは v1.25 以降で利用可能です。詳細については、「CronJob の制限」をご参照ください。アルファ版であった networking/v1alpha1 ClusterCIDR API は削除されました。
Kubernetes 1.30 において
`kubectl apply` コマンドの
--prune-whitelistフラグは削除されました。代わりに--prune-allowlistを使用してください。詳細については、「--prune」をご参照ください。v1.27 で非推奨となった SecurityContextDeny アドミッションプラグインは、v1.30 で削除されました。代わりに PodSecurity アドミッションプラグインを使用してください。このプラグインは v1.25 以降安定版であり、デフォルトで有効になっています。詳細については、PodSecurity をご参照ください。
非推奨の API
FlowSchema および PriorityLevelConfiguration の `flowcontrol.apiserver.k8s.io/v1beta2` API バージョンは v1.29 で非推奨になりました。`flowcontrol.apiserver.k8s.io/v1` API バージョン (v1.29 以降で利用可能) または `flowcontrol.apiserver.k8s.io/v1beta3` API バージョン (v1.26 以降で利用可能) を使用してください。
`flowcontrol.apiserver.k8s.io/v1` の主な変更点は次のとおりです。
PriorityLevelConfiguration の
spec.limited.assuredConcurrencySharesフィールドはspec.limited.nominalConcurrencySharesに名前が変更されました。このフィールドは、指定されていない場合、デフォルトで 30 になります。明示的な値 0 は 30 に変更されません。`flowcontrol.apiserver.k8s.io/v1beta3` の主な変更点は次のとおりです。
PriorityLevelConfiguration の
spec.limited.assuredConcurrencySharesフィールドはspec.limited.nominalConcurrencySharesに名前が変更されました。
機能ゲート
Kubernetes の機能ゲート (バージョンのサポートや機能の説明など) の詳細については、Feature Gates をご参照ください。
機能ゲートには通常、次の 3 つのステージがあります。
アルファ: 機能はデフォルトで無効になっています。
ベータ: 機能は通常、デフォルトで有効になっています。
GA: 機能はデフォルトで有効になっており、無効にすることはできません。機能ゲートのトグルは不要になります。
リファレンス
Kubernetes 1.29 および 1.30 の完全な変更ログについては、CHANGELOG-1.29 および CHANGELOG-1.30 をご参照ください。