Alibaba Cloud Container Service for Kubernetes は Kubernetes 準拠認定を取得しています。このドキュメントでは、ACK の Kubernetes 1.30 リリースにおける主な変更点(アップグレード時の注意事項、主要な変更、新機能、非推奨機能および API、フィーチャーゲートなど)をハイライトします。
コンポーネントのバージョン
次の表に、ACK クラスターのコアコンポーネントのバージョンを示します。
コアコンポーネント | バージョン |
Kubernetes | 1.30.7-aliyun.1、1.30.1-aliyun.1 |
etcd | v3.5.9 |
containerd | 1.6.39 |
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 コンポーネント | Kubernetes v1.29 より後のバージョンでは、kube-proxy が |
sysctl 値を変更しているかどうかを確認するには、クラスター検査機能を有効化できます。詳細については、「クラスター検査の使用」をご参照ください。 |
機能
バージョン 1.30.7-aliyun.1 は、CVE-2024-10220 の脆弱性に対処しています。
Kubernetes 1.29
PreStop フックにスリープ操作が追加され、コンテナが終了前に指定された期間一時停止できるようになりました。これにより、進行中の処理やネットワークリクエストを完了する時間が確保されます。詳細については、KEP-3960: PreStop フック向けスリープ操作の導入 をご参照ください。
SidecarContainers 機能が Beta となり、デフォルトで有効になりました。この機能により、init コンテナの
restartPolicyをAlwaysに設定できます。これにより、init コンテナがサイドカーコンテナに変わり、メインアプリケーションコンテナや他の Init コンテナに影響を与えることなく、個別に起動・停止・再起動が可能になります。詳細については、サイドカーコンテナ をご参照ください。この機能を使用する際は、ノード上の kubelet バージョンがコントロールプレーンのバージョンと一致していることを確認してください。
新しい ServiceCIDR リソースタイプにより、サービス用のクラスター IP アドレス範囲を動的に構成できるようになりました。この機能は Alpha であり、デフォルトでは無効です。サービスで利用可能な IP アドレス数を動的に拡張する方法については、KEP-1880: 複数のサービス CIDR をご参照ください。
PVC (Persistent Volume Claim) およびコンテナは、リソースの
requestsおよびlimitsを定義するために同じ ResourceRequirements 構造体を使用していました。そのため、コンテナのresources構造体が変更されると(例:claimsフィールドが追加された場合)、PVC API も変更されていました。このため、PVC は現在、requestsおよびlimitsのみを含み、claimsを含まない専用の VolumeResourceRequirements 構造体を使用します。詳細については、ボリュームリソース要件 をご参照ください。PodReadyToStartContainers機能が Beta となり、デフォルトで有効になりました。この機能により、Pod のサンドボックス環境が正常に作成され(コンテナランタイム環境が準備完了)、ネットワーク構成が完了したことを示すことができます。これにより、kubelet が Pod のステータスを把握しやすくなります。詳細については、Pod の条件 をご参照ください。PodAffinity および PodAntiAffinity が
matchLabelKeysおよびmismatchLabelKeysをサポートするようになりました。この機能により、デプロイメントのローリングアップデート中にスケジューラが新旧の Pod を区別できず、アフィニティおよびアンチアフィニティの期待通りのスケジューリング結果が得られない問題が解決されます。matchLabelKeysを PodAffinity に設定すると、デプロイメントが ReplicaSet にpod-template-hashラベルを追加します。これにより、デプロイメント内の各 Pod にハッシュ文字列が割り当てられ、スケジューラが同一のpod-template-hash値を持つ Pod のみを評価できるようになり、同じバッチで更新された Pod を簡単に識別できます。詳細については、KEP-3633 をご参照ください。コア Kubernetes API リソースに加え、ValidatingAdmissionPolicy の型チェックが CRD および API 拡張タイプをサポートするようになりました。これにより、ポリシーの信頼性およびクラスター構成の正確性が確保されます。詳細については、型チェック をご参照ください。
新しい
UserNamespacesPodSecurityStandardsフィーチャーゲートにより、ユーザーネームスペースと Pod Security Standards が統合されます。このフィーチャーゲートを有効にすると、Pod の Security Context 内でコンテナを非 root ユーザーまたは指定されたユーザー ID で実行できるようになります。このフィーチャーゲートは Alpha であり、デフォルトでfalseに設定されており、今後もfalseのままとなる可能性があります。詳細については、KEP-127: フィーチャーゲートに基づく PSS の更新 をご参照ください。ノードオブジェクト向けに DisableNodeKubeProxyVersion フィーチャーゲートが導入されました。このフィーチャーゲートにより、Kubernetes でノードの
status.nodeInfo.kubeProxyVersionフィールドの設定が非推奨となり、kubeProxyVersionフィールドの設定が無効化されます。kubelet は常に kube-proxy のバージョンを正確に識別できないため、このフィールドは常に正確とは限りません。このフィーチャーゲートは Alpha 段階であり、デフォルトで無効 (false) です。JobBackoffLimitPerIndexフィーチャーゲートが Beta に昇格し、デフォルトでtrueに設定されました。このフィーチャーゲートにより、インデックス付きジョブの各インデックスに対する最大再試行回数を指定できます。インデックス付きジョブの詳細については、「静的作業割り当てによる並列処理向けインデックス付きジョブの使用」をご参照ください。
Kubernetes 1.30 での変更
ImageMaximumGCAge フィーチャーゲートにより、kubelet が未使用イメージをガベージコレクションするまでの最大経過時間を設定できるようになりました。この期間を過ぎてもイメージが未使用のままの場合、ガベージコレクションメカニズムによってクリーンアップされます。デフォルト値は
"0s"であり、時間制限が設定されないことを意味します。このフィーチャーゲートは v1.29 で Alpha として導入され、v1.30 で Beta に昇格しました。Kubelet に、イメージプルの持続時間を追跡する新しいモニタリングメトリック
image_pull_duration_secondsが追加されました。詳細については、「Alpha Kubernetes メトリックの一覧」をご参照ください。LegacyServiceAccountTokenCleanUp フィーチャーゲートが GA に昇格し、デフォルトで有効になりました。特定の期間(デフォルトで 1 年間)使用されず、かつどの Pod にもマウントされていない ServiceAccount に関連付けられた自動生成 Secret に対して、kube-controller-manager が
kubernetes.io/legacy-token-invalid-sinceラベルを追加します。このラベルの値は現在の日付であり、Secret が無効であることを示します。無効とマークされた後、さらに特定の期間(デフォルトで 1 年間)使用されない場合、その Secret は kube-controller-manager によって自動的にクリーンアップされます。kubernetes.io/legacy-token-invalid-sinceラベルが付与されているが自動削除されていない Secret は、このラベルを削除することで再度有効化できます。詳細については、「自動生成されたレガシー ServiceAccount トークンのクリーンアップ」および「レガシー ServiceAccount トークンクリーナー」をご参照ください。v1.30 では、kube-proxy の
--nodeport-addressesフラグが設定されていない場合(デフォルト)、NodePort サービスの更新時にノードのすべての IP ではなく、プライマリ IP(プライマリノード IP)のみが更新されます。詳細については、#122724 をご参照ください。構成の競合およびセキュリティ上の問題を防ぐため、OIDC Issuer URL を API サーバー の ServiceAccount Issuer URL と同じ値に設定することはできません。詳細については、#123561 をご参照ください。
LoadBalancerIPMode フィーチャーゲートにより、LoadBalancer タイプのサービスにロードバランサー IP の転送動作を指定するための
.status.loadBalancer.ingress.ipModeフィールドが追加されました。このフィールドは、.status.loadBalancer.ingress.ipフィールドも指定されている場合にのみ設定可能です。LoadBalancerIPMode フィーチャーゲートは現在 Beta です。詳細については、「ロードバランサーのステータスにおける IPMode の指定」および「サービス向けロードバランサー IP モード」をご参照ください。コンテナリソースメトリックに基づく Horizontal Pod Autoscaler (HPA) が v1.30 で Stable に昇格しました。これにより、HPA が Pod 全体のリソース使用量だけでなく、個々のコンテナのリソース使用量に基づいて Pod をスケーリングできるようになります。これは、Pod 内で最も重要なコンテナ向けにスケーリングのしきい値を設定する際に役立ちます。詳細については、「コンテナリソースメトリック」をご参照ください。
AdmissionWebhookMatchConditionsフィーチャーゲートが GA に昇格しました。このフィーチャーゲートはデフォルトで有効であり、無効化できません。このフィーチャーゲートにより、アドミッション Webhook のマッチ条件を定義でき、Webhook のトリガータイミングをより細かく制御できます。詳細については、「動的アドミッション制御」をご参照ください。新しい
JobSuccessPolicyフィーチャーゲート(現在 Alpha)により、成功した Pod のセットに基づいてジョブの完了を宣言できるようになりました。成功ポリシーでは、成功した Pod の数または特定の Pod インデックスのリスト(例:インデックス x、y、z の Pod)を指定して、ジョブの完了を判断できます。詳細については、ジョブの成功/完了ポリシー をご参照ください。RelaxedEnvironmentVariableValidation フィーチャーゲートが追加され、環境変数でほとんどの表示可能な ASCII 文字(32~126 の範囲の文字で、
=を除く)を使用できるようになりました。このフィーチャーゲートは Alpha 段階であり、デフォルトで無効です。詳細については、#123385 をご参照ください。CustomResourceFieldSelectorsフィーチャーゲートが追加されました。この機能により、CRD に対してselectableFieldsフィールドを構成できます。その後、フィールドセレクター を使用して List、Watch、DeleteCollection リクエストをフィルターでき、特定の条件を満たす CRD リソースを簡単に検索または管理できます。このフィーチャーゲートは Alpha 段階であり、デフォルトで無効です。詳細については、「カスタムリソースフィールドセレクター」をご参照ください。CRDValidationRatchetingフィーチャーゲートが更新されました。CRD に新しい入力規則が追加された場合、API サーバー は、リソースの無効な部分が変更されていない限り、新しい入力規則に失敗する既存リソースの更新をブロックしなくなりました。これにより、OpenAPI v3 スキーマ を使用するように CRD を移行する際に、新しい入力規則を安全に展開でき、既存リソースへの影響を回避できます。このフィーチャーゲートは Beta に昇格し、デフォルトで有効です。詳細については、「CRD 入力規則のラチェティング」をご参照ください。Downward API が
status.hostIPsフィールドを使用してデュアルスタック(IPv4 および IPv6 の両方)をサポートするようになりました。status.hostIPsリストの最初の IP アドレスは常にstatus.hostIPと同じです。詳細については、「Downward API」をご参照ください。NodeLogQuery フィーチャーゲートにより、
/logsエンドポイントを使用してノードサービスのログをクエリできるようになりました。このフィーチャーゲートは Beta に昇格しましたが、デフォルトでは無効です。詳細については、「ログクエリ」をご参照ください。
非推奨機能
Kubernetes 1.29
CronJob は
CRON_TZまたはTZを.spec.scheduleフィールドでサポートしなくなりました。代わりに、v1.25 から利用可能な.spec.timeZoneフィールドを使用してください。詳細については、「CronJob の制限事項」をご参照ください。networking/v1alpha1ClusterCIDR API が削除されました。この API は Alpha であり、議論の余地があるものとされていました。
Kubernetes 1.30 での変更
kubectl applyコマンドから--prune-whitelistフラグが削除されました。代わりに--prune-allowlistを使用してください。詳細については、「--prune」をご参照ください。v1.30 で
SecurityContextDenyアドミッションプラグインが削除されました。このプラグインは v1.27 で非推奨となっていました。代わりに PodSecurity アドミッションプラグインの使用を推奨します。PodSecurity アドミッションプラグインは v1.25 で Stable に昇格し、デフォルトで有効です。詳細については、「PodSecurity」をご参照ください。
非推奨 API
flowcontrol.apiserver.k8s.io/v1beta2 API バージョンの FlowSchema および PriorityLevelConfiguration は 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 フィーチャーゲートの詳細(バージョンサポートおよび説明を含む)については、フィーチャーゲート をご参照ください。
フィーチャーゲートには通常、次の 3 つの段階があります。
Alpha:機能はデフォルトで無効です。
Beta:機能はデフォルトで有効です。
GA (General Availability):機能はデフォルトで有効であり、無効化できません。フィーチャーゲートは不要となります。
参考情報
Kubernetes 1.29 および 1.30 の完全なチェンジログについては、CHANGELOG-1.29 および CHANGELOG-1.30 をご参照ください。