Alibaba Cloud Container Compute Service (ACS) は、Certified Kubernetes Conformance Program に準拠しています。このトピックでは、Kubernetes 1.30 での変更点 (昇格された機能、新機能、非推奨の機能と API、コンポーネントのバージョンなど) について説明します。
コンポーネントのバージョン
ACS クラスター上の Kubernetes 1.30 では、以下のコンポーネントが更新されています。
| コンポーネント | バージョン |
|---|---|
| Kubernetes | 1.30.1-aliyunacs.1 |
| etcd | v3.5.9 |
| containerd | 1.6.28 |
| CoreDNS | v1.9.3.10-7dfca203-aliyun |
| CSI | v1.30.1-98960d8-aliyun |
| CNI (Flannel) | v0.15.1.22-20a397e6-aliyun |
| Terway and TerwayControlplane | 1.9.0 以降 |
Kubernetes 1.30 以降、ネットワークプラグインとして Terway を使用し、ネットワークポリシーサポートを有効にした新規 ACS クラスターでは、拡張 Berkeley パケットフィルター (eBPF) を使用してネットワークポリシーが実装されます。既存のクラスターとコンポーネントをアップグレードしても、現在の動作は変更されません。詳細については、「ACS クラスターでのネットワークポリシーの使用」をご参照ください。
機能
Kubernetes 1.29 の機能
以下の機能は Kubernetes 1.29 で導入され、ACS Kubernetes 1.30 クラスターに含まれています。
PreStop フックの sleep アクション
PreStop フックで sleep アクションが利用可能になり、コンテナを終了する前に指定した期間一時停止させることができるようになりました。詳細については、「KEP-3960: Introducing Sleep Action for PreStop Hook」をご参照ください。
サイドカーコンテナ (ベータ版、デフォルトで有効)
SidecarContainers フィーチャーゲートはベータ版に昇格し、デフォルトで有効になりました。init コンテナで restartPolicy: Always を設定すると、サイドカーコンテナとして実行されます。サイドカーコンテナは、メインアプリケーションコンテナや他の init コンテナに影響を与えることなく、独立して起動、停止、再起動します。詳細については、「サイドカーコンテナ」をご参照ください。
複数の Service CIDR (アルファ版、デフォルトで無効)
Service CIDR を使用して、ClusterIP Service の IP アドレス範囲を動的に指定できるようになりました。このフィーチャーゲートはアルファ版であり、デフォルトでは無効です。詳細については、「KEP-1880: Multiple Service CIDRs」をご参照ください。
PVC API での VolumeResourceRequirements の使用
永続ボリューム要求 (PVC) API は、requests と limits のみを含む独立した VolumeResourceRequirements 構造を使用するようになりました。これにより、コンテナ API の resources 構造への変更 (例えば claims フィールドの追加) が、意図せず PVC API に影響を与えることを防ぎます。詳細については、「ボリュームリソース要件」をご参照ください。
PodReadyToStartContainers (ベータ版、デフォルトで有効)
PodReadyToStartContainers フィーチャーゲートはベータ版に昇格し、デフォルトで有効になりました。この条件は、Pod サンドボックスが作成され、ネットワークが設定されたことを示し、kubelet に正確な Pod ステータス情報を提供します。詳細については、「Pod の条件」をご参照ください。
Pod アフィニティにおける matchLabelKeys と mismatchLabelKeys
Pod アフィニティと Pod アンチアフィニティで matchLabelKeys と mismatchLabelKeys がサポートされるようになりました。これらのフィールドは、Deployment のローリングアップデート中にスケジューラが古い Pod と新しい Pod を区別できないというスケジューリングの問題に対処します。Pod アフィニティに matchLabelKeys を設定すると、Deployment は pod-template-hash ラベルを ReplicaSet に追加するため、スケジューラは同じハッシュ値を持つ Pod をグループ化できます。詳細については、「KEP-3633」をご参照ください。
ValidatingAdmissionPolicy の型チェックの CRD への拡張
コア Kubernetes API リソースに加えて、ValidatingAdmissionPolicy の型チェックは CustomResourceDefinition (CRD) と API 拡張機能も対象とするようになり、ポリシーの信頼性と有効なクラスター設定の確保に役立ちます。詳細については、「型チェック」をご参照ください。
UserNamespacesPodSecurityStandards (アルファ版、デフォルトで無効)
UserNamespacesPodSecurityStandards フィーチャーゲートは、ユーザー名前空間での Pod セキュリティ標準のサポートを追加し、コンテナが Pod Security Context で非 root または指定されたユーザー ID で実行できるようにします。このフィーチャーゲートはアルファ版であり、デフォルトで false に設定されています。詳細については、「KEP-127: Update PSS based on feature gate」をご参照ください。
DisableNodeKubeProxyVersion (アルファ版、デフォルトで無効)
DisableNodeKubeProxyVersion フィーチャーゲートは、ノードオブジェクトの status.nodeInfo.kubeProxyVersion フィールドを非推奨にします。kubelet は kube-proxy のバージョンを確実に識別できない場合があるため、このフィールドの値は不正確になる可能性があります。このフィーチャーゲートはアルファ版であり、デフォルトで false に設定されています。
JobBackoffLimitPerIndex (ベータ版、デフォルトで有効)
JobBackoffLimitPerIndex フィーチャーゲートはベータ版に昇格し、デフォルトで有効になりました。これにより、インデックス付きジョブにおいてインデックスごとの最大リトライ回数を設定できます。詳細については、「静的な作業割り当てによる並列処理のためのインデックス付きジョブ」をご参照ください。
Kubernetes 1.30 の機能
ImageMaximumGCAge (ベータ版)
ImageMaximumGCAge は、未使用のコンテナイメージがガベージコレクションによって削除されるまでの最大 TTL を設定します。デフォルト値は "0s" で、TTL ベースのクリーンアップを無効にします。このフィーチャーゲートは Kubernetes 1.30 でアルファ版 (Kubernetes 1.29) からベータ版に昇格しました。
image_pull_duration_seconds メトリック (アルファ版)
kubelet に新しい image_pull_duration_seconds メトリックが追加され、イメージのプル期間を追跡できるようになりました。アルファ版メトリックの完全なリストについては、「アルファ版 Kubernetes メトリックのリスト」をご参照ください。
LegacyServiceAccountTokenCleanUp (GA、デフォルトで有効)
LegacyServiceAccountTokenCleanUp フィーチャーゲートは一般提供 (GA) となり、デフォルトで有効になりました。クリーンアッププロセスは次のように動作します:
-
ServiceAccount に関連付けられた自動生成された Secret が一定期間 (デフォルトでは 1 年) 使用されておらず、どの Pod にもマウントされていない場合、kube-controller-manager はそれに
kubernetes.io/legacy-token-invalid-sinceラベル (現在の日付に設定) を付けます。 -
ラベルが付けられた後、一定期間 (デフォルトでは 1 年) Secret がまだ使用されていない場合、kube-controller-manager はそれを自動的に削除します。
まだ削除されていないラベル付きの Secret を復元するには、kubernetes.io/legacy-token-invalid-since ラベルを削除します。詳細については、「自動生成されたレガシー ServiceAccount トークンのクリーンアップ」および「レガシー ServiceAccount トークンクリーナー」をご参照ください。
--nodeport-addresses が設定されていない場合の NodePort の動作変更
kube-proxy に --nodeport-addresses が設定されていない場合 (デフォルト)、NodePort Service の更新は、すべてのノード IP アドレスではなく、プライマリノードの IP アドレスにのみ影響するようになりました。詳細については、「#122724」をご参照ください。
お使いのワークロードが、すべてのノード IP アドレスを更新する NodePort Service に依存している場合は、Kubernetes 1.30 にアップグレードする前に --nodeport-addresses を明示的に設定してください。
OIDC 発行者 URL と ServiceAccount 発行者 URL は異なる必要がある
OIDC 発行者 URL と API サーバーの ServiceAccount 発行者 URL は、同じ値を使用してはなりません。両方に同じパラメーターを使用すると、設定の競合やセキュリティの問題が発生します。詳細については、「#123561」をご参照ください。
お使いのクラスターで OIDC 発行者 URL と API サーバーの ServiceAccount 発行者 URL が同じパラメーターで設定されている場合は、Kubernetes 1.30 にアップグレードする前に設定を更新してください。
LoadBalancerIPMode (ベータ版)
LoadBalancerIPMode フィーチャーゲートはベータ版に昇格しました。これは、LoadBalancer Service に .status.loadBalancer.ingress.ipMode フィールドを追加し、ロードバランサーの IP アドレスに送信されたリクエストがどのように転送されるかを指定します。このフィールドは、.status.loadBalancer.ingress.ip が設定されている場合にのみ使用できます。詳細については、「ロードバランサーのステータスの IPMode の指定」および「Service のロードバランサー IP モード」をご参照ください。
HPA コンテナリソースメトリック (GA)
コンテナごとのリソースメトリックに基づく Horizontal Pod Autoscaler (HPA) のスケーリングは、Kubernetes 1.30 で一般提供 (GA) となりました。これにより、Pod の集約リソース使用量に基づいてスケーリングするのではなく、Pod 内の各コンテナに独立したスケーリングしきい値を設定できます。詳細については、「コンテナリソースメトリック」をご参照ください。
AdmissionWebhookMatchConditions (GA、デフォルトで有効)
AdmissionWebhookMatchConditions フィーチャーゲートは一般提供 (GA) となり、デフォルトで有効で、無効にすることはできません。これにより、アドミッション Webhook に一致条件を定義して、Webhook がトリガーされるタイミングをより細かく制御できます。詳細については、「動的アドミッション制御」をご参照ください。
JobSuccessPolicy (アルファ版)
JobSuccessPolicy フィーチャーゲートがアルファ版として追加されました。これにより、成功した Pod のサブセットに基づいて Job の完了を宣言できます。具体的には、特定の Pod インデックス (X、Y、Z など) を指定するか、成功したインデックスの最小数を指定します。詳細については、「Job の成功/完了ポリシー」をご参照ください。
RelaxedEnvironmentVariableValidation (アルファ版、デフォルトで無効)
RelaxedEnvironmentVariableValidation フィーチャーゲートがアルファ版として追加されました。有効にすると、環境変数名に、等号 (=) を除くほとんどの印字可能な ASCII 文字 (コードポイント 32 から 126) を含めることができます。このフィーチャーゲートはデフォルトで無効です。詳細については、「#123385」をご参照ください。
CustomResourceFieldSelectors (アルファ版、デフォルトで無効)
CustomResourceFieldSelectors フィーチャーゲートがアルファ版として追加されました。これにより、CRD に selectableFields を設定して、フィールドセレクターが List、Watch、DeleteCollection リクエストをフィルターできるようになります。このフィーチャーゲートはデフォルトで無効です。詳細については、「カスタムリソースフィールドセレクター」をご参照ください。
CRDValidationRatcheting (ベータ版、デフォルトで有効)
CRDValidationRatcheting フィーチャーゲートはベータ版に昇格し、デフォルトで有効になりました。CRD 検証ルールが更新された場合、API サーバーは、更新で失敗しているフィールドが変更されない限り、新しい検証にすでに失敗している既存リソースの更新をブロックしなくなりました。これにより、OpenAPI v3 スキーマを通じて検証される CRD の移行中に、新しいスキーマルールが既存のリソースを破壊するのを防ぎます。詳細については、「CRD 検証ラチェット」をご参照ください。
Downward API が IPv4/IPv6 デュアルスタックのホスト IP をサポート
Downward API は、IPv4/IPv6 デュアルスタックをサポートするために status.hostIPs を公開するようになりました。status.hostIPs リストの最初の IP は、常に status.hostIP と一致します。詳細については、「Downward API」をご参照ください。
NodeLogQuery (ベータ版、デフォルトで無効)
NodeLogQuery フィーチャーゲートはベータ版に昇格しましたが、デフォルトでは無効のままです。有効にすると、/logs エンドポイントを介してノードサービスログをクエリできます。詳細については、「ログクエリ」をご参照ください。
非推奨の機能
Kubernetes 1.29
CronJob のタイムゾーン: CRON_TZ や TZ の代わりに .spec.timeZone を使用
CronJob は、.spec.schedule での CRON_TZ または TZ タイムゾーン設定をサポートしなくなりました。代わりに、Kubernetes 1.25 以降利用可能な .spec.timeZone を使用してください。
お使いの CronJob が .spec.schedule で CRON_TZ または TZ を使用している場合は、アップグレードする前に .spec.timeZone に移行してください。詳細については、「CronJob の制限事項」をご参照ください。
ClusterCIDR v1alpha1 API の削除
networking/v1alpha1 API の ClusterCIDR (アルファ版) は Kubernetes 1.29 で削除されました。参考として、「ClusterCIDR v1alpha1」をご参照ください。
Kubernetes 1.30
kubectl apply --prune-whitelist の削除
kubectl apply の --prune-whitelist フラグは Kubernetes 1.30 で削除されました。--prune-whitelist が非推奨になってから利用可能であった --prune-allowlist を代わりに使用してください。詳細については、「--prune」をご参照ください。
お使いのスクリプトやパイプラインで --prune-whitelist を使用している場合は、アップグレードする前に --prune-allowlist に更新してください。
SecurityContextDeny アドミッションプラグインの削除
Kubernetes 1.27 で非推奨となった SecurityContextDeny アドミッションプラグインは、Kubernetes 1.30 で削除されました。代わりに、Kubernetes 1.25 以降安定版となりデフォルトで有効になっている PodSecurity アドミッションプラグインを使用してください。詳細については、「PodSecurity」をご参照ください。
お使いのクラスターで SecurityContextDeny が有効になっている場合は、アップグレードする前に PodSecurity アドミッションプラグインに切り替えてください。
非推奨の API
FlowSchema と PriorityLevelConfiguration の flowcontrol.apiserver.k8s.io/v1beta2 API バージョンは Kubernetes 1.29 で非推奨になりました。
以下のいずれかのサポートされている API バージョンに移行してください:
-
flowcontrol.apiserver.k8s.io/v1(Kubernetes 1.29 以降利用可能、推奨) -
flowcontrol.apiserver.k8s.io/v1beta3(Kubernetes 1.26 以降利用可能)
移行する前に、以下のフィールド名の変更にご注意ください:
| API バージョン | 古いフィールド | 新しいフィールド | デフォルト | 注記 |
|---|---|---|---|---|
flowcontrol.apiserver.k8s.io/v1 |
spec.limited.assuredConcurrencyShares |
spec.limited.nominalConcurrencyShares |
30 | 明示的な値 0 は 30 |
flowcontrol.apiserver.k8s.io/v1beta3 |
spec.limited.assuredConcurrencyShares |
spec.limited.nominalConcurrencyShares |
— | — |
flowcontrol.apiserver.k8s.io/v1beta2 リソースを使用している場合は、この API バージョンが削除される前に v1 または v1beta3 に移行してください。
フィーチャーゲート
フィーチャーゲートは、Kubernetes の実験的な機能や製品版に昇格した機能を制御します。各ゲートには、以下のいずれかのステージがあります:
| ステージ | デフォルト | 注記 |
|---|---|---|
| アルファ | 無効 | 実験的、変更される可能性があります |
| ベータ | 有効 | ほぼ安定、GA 前に変更される可能性があります |
| GA | 有効、無効化不可 | フィーチャーゲートは不要になります |
フィーチャーゲート、そのステージ、バージョンの完全なリストについては、「フィーチャーゲート」をご参照ください。