Alibaba Cloud Container Service for Kubernetes は、Kubernetes 準拠認定を受けたプラットフォームです。このドキュメントでは、Kubernetes 1.33 の ACK リリースにおける主な変更点をハイライトし、アップグレードに関する注意事項、新機能、非推奨 API、およびフィーチャーゲートについて説明します。
コンポーネントのバージョン
次の表に、ACK で使用される主要コンポーネントのバージョンを示します。
主要コンポーネント | バージョン |
Kubernetes | 1.33.1-aliyun.1、1.33.3-aliyun.1 |
etcd | v3.5.21 |
containerd | 2.1.6 |
CoreDNS | v1.11.3.5-5321daf49-aliyun |
CSI | |
CNI | Flannel v0.15.1.22-20a397e6-aliyun |
Terway および TerwayControlplane v1.14.0 以降 |
アップグレードに関する注意事項
クラスターをバージョン 1.33 にアップグレードする際、バージョン 1.20 以前で作成され、その後更新またはコンテナ再起動が一度も行われていない Pod は、1 回再起動されます。
主な変更点
バージョン 1.33 以降、ACK ではデフォルトで containerd 2.1 が使用されます。既存のクラスターについては、ノードのアップグレード時にコンテナランタイムが containerd 2.1 にアップグレードされます。詳細については、「containerd 2.1 の概要」をご参照ください。
バージョン 1.33 以降、新規の ACK マネージドクラスター には、最新の ack-ram-authenticator コンポーネントがデフォルトでインストールされます。詳細については、「[プロダクトアナウンス] ACK マネージドクラスター v1.33 以降で ack-ram-authenticator をデフォルトでインストール」をご参照ください。
機能の変更点
インプレース Pod サイズ変更 機能が Beta に昇格し、デフォルトで有効になりました。この機能により、Pod を再起動せずにコンテナの CPU およびメモリリソース構成を動的に変更できます。
これより、kubectl で
--subresourcesオプションを使用して特定のサブリソースを調整できるようになりました。たとえば、kubectl edit pod <pod-name> --subresource resizeを実行することで、Pod のリソースサイズを動的に調整できます。バージョン 1.33 でサポートされるサブリソースは、status、scale、およびresizeです。EndpointSlices の TopologyAwareHints 機能が Generally Available (GA) になりました。Beta アノテーション
service.kubernetes.io/topology-modeは非推奨となりました。トポロジーポリシーを定義するには、spec.trafficDistributionフィールドを使用することを推奨します。たとえば、trafficDistributionをPreferCloseに設定すると、トラフィックはクライアントと同じゾーン内のエンドポイントに優先的にルーティングされます。詳細については、「Traffic distribution」をご参照ください。Pod の
.status.resizeフィールドは非推奨となり、設定できなくなりました。代わりに、2 つの新しい条件フィールドが追加されました。PodResizeInProgressおよびPodResizePendingです。DisableNodeKubeProxyVersion フィーチャーゲートがデフォルトで有効になり、無効化できなくなりました。kubelet はノード上で
status.kubeProxyVersionフィールドを設定しなくなります。StatefulSet の
.spec.serviceNameフィールドがオプションとなり、その検証が厳格化され、DNS-1123 標準への準拠が求められるようになりました。既存の StatefulSet の.spec.serviceNameが検証に失敗した場合、このフィールドを手動で削除するまで新しい Pod を作成できません。この更新により、DNS 検証が Pod 作成フェーズから StatefulSet リソース構成フェーズに移行し、StatefulSet コントローラーによる失敗リトライが削減されます。Git-Repo ボリュームプラグインはデフォルトで無効になりました。使用するには、
GitRepoVolumeDriverフィーチャーゲートを有効にする必要があります。バージョン 1.33.3-aliyun.1 は、CVE-2024-4563 を修正しています。
機能
サイドカーコンテナ が GA となり、デフォルトで有効になりました。サイドカーコンテナは特殊なタイプの Init コンテナであり、Pod のライフサイクル全体を通じて実行され、
restartPolicy: Alwaysを設定するとプローブをサポートします。OrderedNamespaceDeletion 機能が Beta に昇格しました。この機能は名前空間リソースの削除プロセスを最適化します。具体的には、名前空間を削除する際に、まずワークロードの Pod を削除し、次に NetworkPolicy やストレージリソースなどの依存リソースを削除します。これにより、重要なセキュリティリソースが削除された後に Pod が孤立するのを防ぎます。
SupplementalGroupsPolicy 機能が Beta に昇格し、デフォルトで有効になりました。Pod の
.spec.securityContext.supplementalGroupsPolicyフィールドを使用して、ボリュームのアクセス権限を詳細に制御できます。詳細については、「Configure fine-grained SupplementalGroups control for a Pod」をご参照ください。MultiCIDRServiceAllocator 機能が GA となり、デフォルトで有効になりました。この機能により、サービスの ClusterIP 割り当てを記録するための ServiceCIDR および IPAddress リソースが導入されます。ServiceCIDR を使用して、割り当て可能な ClusterIP の範囲を動的に拡張できます。
JobBackoffLimitPerIndex 機能が GA となりました。これにより、インデックス付きジョブの各インデックスごとに Pod の最大再試行回数を指定できます。
JobSuccessPolicy 機能が GA となりました。これにより、ジョブのカスタム成功ポリシーを定義できます。たとえば、どのインデックスが成功する必要があるか、または成功するインデックスの数を指定することで、ジョブの完了を判断できます。詳細については、「Job's SuccessPolicy Goes GA」をご参照ください。
ImageVolume 機能が Beta に昇格しましたが、デフォルトでは無効です。API サーバーおよび kubelet 上でフィーチャーゲートを手動で有効にすることで、Pod が
imageボリュームソースを使用できるようになります。これにより、コンテナイメージを読み取り専用ボリュームとしてマウントできます。UserNamespacesSupport 機能が Beta に昇格し、デフォルトで有効になりました。これにより、Pod が Linux ユーザー名前空間を使用してコンテナのセキュリティを強化できます。この機能は既存の Pod には影響しません。使用するには、
pod.spec.hostUsersを手動で指定する必要があります。詳細については、「User Namespaces enabled by default」をご参照ください。RelaxedDNSSearchValidation 機能が Beta に昇格し、デフォルトで有効になりました。これにより、Pod の
.spec.dnsConfig.searchesフィールドに.や_などの特殊文字を使用できるようになり、DNS 構成の柔軟性が向上します。kube-apiserver は、デフォルトで WatchList メカニズムを無効にし、代わりに StreamingCollectionEncodingToJSON および StreamingCollectionEncodingToProtobuf を含むストリーミングエンコーディングメカニズムを使用します。この変更により、大規模なリソースリストリクエストをストリーミングすることで List 操作のパフォーマンスが向上します。多くのリソースを含む List リクエストでは、メモリ使用量が大幅に削減され、システムの安定性が向上します。詳細については、「Streaming List responses」をご参照ください。
kube-controller-manager は、WatchListClient 機能を積極的に有効にしなくなりました。
CPUManagerPolicyOptions 機能が GA となり、デフォルトで有効になりました。これにより、CPU マネージャーのリソース割り当てポリシーを詳細に調整できます。
Pod が排他的な CPU を要求する場合、SMT 配置を強制して、割り当てられた CPU が完全な物理コアを占有するようにします。詳細については、「cpu manager extension to reject non SMT-aligned workload」をご参照ください。
NUMA ノード間で CPU リソースを割り当てる際、リソースが均等に分散されるようにします。詳細については、「Add CPUManager policy option to distribute CPUs across NUMA nodes instead of packing them」をご参照ください。
MatchLabelKeysInPodAffinity 機能が GA となり、デフォルトで有効になりました。これにより、ポッドアフィニティルールに
matchLabelKeysおよびmismatchLabelKeysフィールドが追加され、Pod の共同配置をより正確に制御できます。NodeInclusionPolicyInPodTopologySpread 機能が GA となり、デフォルトで有効になりました。これにより、Pod トポロジースプレッド制約 で
nodeAffinityPolicyおよびnodeTaintsPolicyを使用して、スケジュール可能なノードを動的にフィルターできます。nodeAffinityPolicy:デフォルトは Honor です。Pod のnodeSelectorまたはnodeAffinityに一致するノードのみがトポロジースプレッド計算で考慮されます。nodeTaintsPolicy:デフォルトは Ignore です。nodeAffinityおよびnodeSelectorルールは無視され、すべてのノードがトポロジースプレッド計算で考慮されます。
HonorPVReclaimPolicy 機能が GA となり、デフォルトで有効になりました。これにより、PV の
reclaimPolicyがDeleteに設定されている場合、PV または PVC の削除順序に関係なく、ポリシーに従って基盤となるストレージリソースが確実に削除されます。これにより、ストレージリソースのリークを防止できます。ProcMountType 機能が Beta に昇格しました。Pod の
securityContext.procMountフィールドを使用して、コンテナ内の /proc ファイルシステムのマウントタイプをカスタマイズできます。これにより、/proc へのアクセスを詳細に制御でき、Pod のセキュリティと隔離が向上します。この機能は、ユーザー名前空間内で特権なしコンテナを実行する際に役立ちます。/proc の制限を緩和することで、互換性と柔軟性が向上します。PodLifecycleSleepActionAllowZero 機能が Beta に昇格しました。これにより、
preStopライフサイクルフック内のsleep操作の待機時間を 0 に設定できるようになりました。これより、
ResourceQuotaを使用して、特定の VolumeAttributesClass に関連付けられた PVC の数を制限できるようになりました。スケジューラーのパフォーマンス最適化:
SchedulerPopFromBackoffQ 機能が追加され、デフォルトで有効になりました。activeQ が空の場合、バックオフキュー (backoffQ) から直接 Pod をポップできるようにすることで、スケジューリングキューのロジックを最適化します。これにより、Pod のスケジューリング遅延が大幅に削減されます。
SchedulerAsyncPreemption が Beta に昇格し、デフォルトで有効になりました。これにより、スケジューラーがプリエンプティブスケジューリングを非同期で実行できるようになります。プリエンプションは高コストな処理であるため、非同期で実行することでスケジューリング遅延を削減できます。
Pod トポロジースプレッド制約を使用する Pod のスケジューリングパフォーマンスが最適化されました。
非推奨 API
Kubernetes 1.33 ではデフォルトで containerd 2.1 が使用され、CRI v1alpha2 API はサポートされなくなりました。ワークロードがこの API バージョンに依存している場合は、互換性を確保するために CRI v1 API に切り替える必要があります。
Endpoints v1 API は正式に非推奨となりました。EndpointSlice API を使用することを推奨します。EndpointSlice API は Kubernetes 1.21 以降安定しており、デュアルスタックネットワークサポートなどの機能を導入しています。Endpoints v1 API は現時点では削除されません。詳細については、「Continuing the transition from Endpoints to EndpointSlices」をご参照ください。
apidiscovery.k8s.io/v2beta1 API グループは無効になりました。クライアントはこの API を使用してクラスター内の登録済み API リソースをすべて照会します。安定版の v2 バージョンへの移行を推奨します。古いクライアントはフォールバックメカニズムを使用して、サービス検出のために非集約化された v1 API を自動的に使用できるため、すぐにエラーが報告されることはありません。ただし、クライアントが v2 バージョンをサポートしていない場合、完全かつ非集約化されたデータを取得するために複数の API 呼び出しを行う必要があり、リクエスト数および遅延が増加する可能性があります。
参考資料
Kubernetes 1.33 の完全なチェンジログについては、「CHANGELOG-1.33」および「Kubernetes v1.33: Octarine」をご参照ください。