Alibaba Cloud Container Service for Kubernetes は、認定された Kubernetes 準拠のサービスです。このトピックでは、ACK における Kubernetes 1.35 リリースの主な変更点について説明します。これには、アップグレードに関する考慮事項、主な変更点、新機能、非推奨の機能と API、およびフィーチャーゲートが含まれます。
コンポーネントのバージョンガイド
次の表に、ACK クラスターでサポートされているコアコンポーネントのバージョンを示します。
コアコンポーネント | バージョン番号 |
Kubernetes | 1.35.1-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.5 |
CoreDNS | v1.12.1.2 |
CSI | |
CNI | Flannel v0.15.1.23-33d25c1-aliyun |
Terway および TerwayControlplane は v1.15.0 以降 |
主な変更点
バージョン 1.35 以降、Kubernetes は cgroup v1 をサポートしなくなりました。cgroup v2 のサポートはバージョン 1.25 で安定版になりました。ノードのオペレーティングシステムは cgroup v2 をサポートする必要があります。そうでない場合、kubelet は起動しません。
ACK オペレーティングシステムイメージの cgroup バージョンサポートについては、「オペレーティングシステム」をご参照ください。オペレーティングシステムの置き換えまたはアップグレード方法については、「オペレーティングシステムの置き換え」をご参照ください。
機能の変更点
サービスの
trafficDistributionフィールドのPreferSameNodeオプションが、一般提供 (GA) となりました。このオプションは、同じノード上のエンドポイントにトラフィックを優先的にルーティングします。現在のノードで利用可能なエンドポイントがない場合にのみ、他のノードにフォールバックします。この機能の
PreferSameTrafficDistributionフィーチャーゲートは、バージョン 1.34 以降、デフォルトで有効になっています。これはPreferSameNodeとPreferSameZoneの両方をサポートします。元のPreferCloseオプションはPreferSameZoneに名前が変更されました。PodObservedGenerationTrackingが安定しました。Pod のspecが更新されると、その.metadata.generationがインクリメントされます。Kubelet は、処理済みのspecバージョンを Pod の.status.observedGenerationフィールドに記録します。これにより、コントローラーとオペレーターは、Pod の変更 (インプレーススケーリングなど) がノードに反映されたかどうかを正確に判断し、ステータス更新の遅延に起因する問題を回避できます。ノード トポロジー マネージャーのポリシー オプション
max-allowable-numa-nodes(max-allowable-numa-nodes)は、現在安定版です。トポロジー マネージャーは、8 個を超える NUMA ノードを備えたサーバーでアフィニティを正しく計算できます。Downward API は現在、
topology.kubernetes.io/zoneやtopology.kubernetes.io/regionなどのノードトポロジーラベルを Pod に注入することをサポートしています。StorageVersionMigratorは現在 Beta 版であり、デフォルトで無効になっています。この機能は、ストレージバージョン移行機能を外部ツールから Kubernetes の内部実装に移行します。詳細については、「Storage Version Migrator をインツリーに移行」をご参照ください。MutableCSINodeAllocatableCountは、現在デフォルトで有効になっています。この機能により、CSI ドライバーはノード上の割り当て可能なボリューム数を定期的に更新できます。これにより、ボリューム容量が不足しているノードに Pod がスケジュールされるのを防ぎ、ノードの割り当て可能なボリューム容量が適時に更新されない場合に発生する可能性のあるContainerCreating状態で停止してしまうことを防止できます。Opportunistic batching の導入により、スケジューラは中間スケジューリング結果をキャッシュできるようになりました。これにより、類似した Pod のスケジューリングスループットが大幅に向上します。
MaxUnavailableStatefulSetは現在ベータ版であり、デフォルトで有効です。この機能により、StatefulSet のローリング更新ストラテジーでmaxUnavailableフィールドを設定できます。このフィールドは、更新中の利用不可状態の Pod の最大数を指定します。Pod 証明書機能はベータ版となり、デフォルトで無効になっています。この機能は、Pod が kube-apiserver と相互認証を行うための証明書生成をサポートします。また、証明書の自動ローテーションもサポートしており、従来の ServiceAccount トークンよりも安全な認証方式を提供します。詳細については、「KEP-4317: Pod Certificates」をご参照ください。
kubectl は KYAML フォーマットをサポートするようになりました。KYAML は、標準的な YAML の解析中に発生する可能性のある曖昧さやセキュリティの問題を解決するために Kubernetes 向けに設計された YAML のサブセットです。この機能は、
KUBECTL_KYAML=false環境変数を設定することで無効にできます。詳細については、「Introducing KYAML」をご参照ください。HorizontalPodAutoscaler (HPA) の
behaviorフィールドで、設定可能な許容値のしきい値がサポートされるようになりました。以前は、スケーリングの決定は 10% の固定されたグローバルな許容値に依存していました。現在は、要件に合わせてしきい値を柔軟に設定できます。ユーザー名前空間 (User Namespaces) はベータ版になりました。この機能により、Pod はホストから隔離されたユーザー名前空間で実行できます。コンテナプロセスは、その名前空間内では root (UID 0) として実行できますが、ホスト上では特権のないゼロ以外のユーザー ID にマッピングされます。これにより、コンテナエスケープに起因する権限昇格のセキュリティリスクが軽減されます。
ImageVolume機能がデフォルトで有効になりました。これにより、Pod でimageタイプのボリュームを使用できます。このボリュームタイプは、コンテナイメージのコンテンツを読み取り専用ボリュームとして Pod にマウントします。この機能を使用するには、containerd のバージョンが 2.1 以降である必要があります。KubeletEnsureSecretPulledImagesはベータ版となり、デフォルトで有効になっています。この機能は、imagePullPolicy: IfNotPresentを使用する Pod に対して認証情報の検証を強制することで、マルチテナントクラスターのセキュリティを強化します。これにより、認証情報を持つ Pod がプライベートイメージをノードにプルした後、同じノード上の認証情報を持たない他の Pod がローカルキャッシュからその機密イメージにアクセスできてしまうシナリオを防ぎます。ContainerRestartRulesはベータ版となり、デフォルトで有効になっています。この機能は、より詳細なコンテナレベルの再起動ポリシー設定を提供します。個々のコンテナに対してrestartPolicyおよびrestartPolicyRulesフィールドを指定することで、Pod レベルの再起動ポリシーをオーバーライドできます。詳細については、「Individual container restart policy and rules」をご参照ください。CSI ドライバーは、
CSIDriverオブジェクトでspec.serviceAccountTokenInSecretsフィールドをtrueに設定できるようになりました。この設定により、ServiceAccount トークンはvolume contextに直接配置されるのではなく、Secret を使用してマウントされます。これにより、ログやエラーメッセージでの意図しない認証情報の漏洩を防ぐことができます。詳細については、「CSI driver opt-in for service account tokens via secrets field」をご参照ください。Deployment オブジェクトに
terminatingReplicasフィールドが追加されました。このフィールドは、削除タイムスタンプを持つが、まだシステムから完全に削除されていない Pod の数を記録します。
非推奨に関する注意事項
バージョン 1.35 以降、kube-proxy の
ipvsモードは非推奨となり、将来のバージョンで削除される予定です。公式の推奨は、v1.33 以降安定版となっているnftables モードに切り替えることです。nftablesモードは比較的新しいため、ACK は新規クラスター作成時にデフォルトで引き続きipvsモードを使用します。ACK は、後続のバージョンでnftablesモードをサポートする予定です。Terway Datapath V2 を使用できます。これは kube-proxy に依存しません。
バージョン 1.35 は、containerd 1.x をサポートする最後のバージョンです。バージョン 1.36 以降にアップグレードする前に、containerd をバージョン 2.x にアップグレードする必要があります。ACK クラスターでは、バージョン 1.33 以降、デフォルトで containerd 2.x が使用されています。詳細については、「containerd 2.1 の概要」をご参照ください。
関連リンク
Kubernetes 1.35 の完全な変更履歴については、「CHANGELOG-1.35」および「Kubernetes v1.35: Timbernetes (The World Tree Release)」をご参照ください。