Kubernetes 1.36 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてまとめました。
アップグレード時の注意事項
- なし
項目ごとの変更
依存
非推奨
- なし!
APIの変更
-
ACTION REQUIRED: kubeadm に組み込まれていた flex-volume のサポートが削除されました。SIG Storage は v1.22 以降、flex-volume からの移行を推奨しており、ユーザーには flex-volume の使用をやめるよう案内されていました。kubeadm ユーザーが引き続きこの機能を使用したい場合は、v1.36 へアップグレードする前に、以下を行う必要があります。
-
distrolessベースではない KCM 用のカスタムイメージを用意する - KCM に
--flex-volume-plugin-dirフラグを渡す - kubeadm の extraVolumes 機構を使って、KCM の
static Podに/usr/libexec/kubernetes/kubelet-plugins/volume/execディレクトリをマウントする
以前は、ユーザーがこのフラグを渡した場合、kubeadmが自動的にこのディレクトリをマウントしていました。(#136423, @neolit123)
-
一瞬、KCM ってなんだ?と思ってしまった。「Kube-controller-manager」
- manifest ベースの Admission Control 設定の alpha サポートが追加されました(KEP-5793)。
ManifestBasedAdmissionControlConfigフィーチャーゲートを有効にすると、admission webhook と CEL ベースのポリシーを、AdmissionConfigurationのstaticManifestsDirフィールドを通じて、ディスク上の静的 manifest ファイルから読み込めるようになります。これらのポリシーは API server の起動時点から有効になり、etcdが利用できない状態でも維持されます。また、API 経由で管理される Admission 関連リソースが変更されないよう保護できます。 (#137346, @aramase)
Admission Control の設定を Kubernetes API オブジェクトではなく、kube-apiserver のローカルディスク上の manifest から読み込めるようにする機能。
- API Server の起動時からポリシーを有効化できる。
- 十分な権限を持つユーザーが Admission 関連リソース自体を変更・削除してしまう、という問題を防ぐ。
-
DRA: device taints and tolerations(KEP #5055)が beta に昇格しました。
ResourceSliceにおけるDeviceTaintsのサポートはデフォルトで有効になっています。DeviceTaintRulesのサポートを利用するには、resource.k8s.io/v1beta2を有効にし、さらにDeviceTaintRulesフィーチャーゲートを有効にする必要があります。(#137170, @pohly) -
DRA の
DRAPrioritizedList機能が GA に昇格しました。(#136924, @troychiu) -
複数の component-base メトリクス(
kubernetes_build_info,rest_client_requests_total,rest_client_request_duration_seconds,running_managed_controllers)の安定性レベルが Alpha から Beta に昇格しました。これにより、これらのメトリクスを利用する側に対して、API とラベルの安定性についてより強い保証が提供されます。(#136154, @bhope) -
DRA の consumable capacity 機能を制御する
DRAConsumableCapacityフィーチャーゲートが、デフォルトで有効になりました。(#136611, @sunya-ch) -
kubelet、kube-scheduler、cloud controller manager、kube-proxy の /configz エンドポイントを更新し、APIVersion フィールドと Kind フィールドもシリアライズするようにしました。また、内部型ではなく公開型を使用するようにしました。(#136044, @SergeyKanzhelev)
各コンポーネントの設定値を返す /configz なんてあったんですね。
機能
- 新しい
RuntimeServiceのストリーミング RPC(StreamPodSandboxes,StreamContainers,StreamContainerStats,StreamPodSandboxStats,StreamPodSandboxMetrics)と、新しいImageServiceのストリーミング RPC(StreamImages)が追加されました。(#136987, @bitoku)
gRPC の 16MB メッセージサイズ制限に当たる問題を回避するために追加されたらしい。
-
Kubernetes のストリーミング転送処理と CRI ストリーミングサーバーコード向けに、新しい staging module として
k8s.io/streamingとk8s.io/cri-streamingが導入されました。k8s.io/apimachinery/pkg/util/httpstream(spdy と wsstream を含む)は、k8s.io/streamingを内部的に利用する非推奨の互換ラッパーとして引き続き利用可能です。また、抽出された SPDY roundtripper は、NO_PROXY/no_proxyにおける CIDR マッチングの挙動を維持します。 (#137298, @dims) -
kubeadm:kubeadm config validateに--allow-deprecated-apiフラグが追加されました。デフォルトでは、このコマンドは非推奨 API に対して警告を出力しますが、このフラグが指定された場合は警告を出力しません。加えて、kubeadm config migrateおよびkubeadm config validateコマンドに不足していたv1beta4のUpgradeConfigurationサポートが追加されました。(#135148, @neolit123) -
kubeadm:Nodeオブジェクトのpatch処理の挙動を変更し、未知の、つまりallowlistに含まれていない API エラーが発生した場合でも、早期終了せず、pollingの期間内でリトライするようにしました。(https://github.com/kubernetes/kubernetes/pull/135776), @neolit123)
エラーが起きてもリトライする変更は kubeadm でよく見る修正。
-
kubeadm:kubeadm upgradeのCreateJob preflight checkのタイムアウトを 1 分に延長しました。これにより、Windows worker node がpreflight checkを実行するための時間に余裕ができます。このチェックではpauseイメージを使用します。そのため、イメージの pull に時間がかかる場合は、worker 上でkubeadm config images pull --kubernetes-version TARGETを実行して事前にイメージを pull するか、--ignore-preflight-errorsを指定してこのpreflight checkをスキップできます。(#136273, @neolit123)
以前のタイムアウトは15秒で preflight check を行なっていたため、特にWindowsの pause イメージが大きく、pullする時間がかかって失敗することが多かったようです。
-
kubeadm:ControlPlaneKubeletLocalModeフィーチャーゲートを削除しました。この機能はv1.35で GA に昇格し、有効状態に固定されていました。(#135773, @neolit123) -
kubeadm:preflight checkのContainerRuntimeVersionは、インストールされているコンテナランタイムがRuntimeConfig gRPCメソッドをサポートしているかを検証するようになりました。v1.37より古いkubeletバージョンでは、preflight warningを返します。(#136898, @carlory)
v1.37 からコンテナランタイムが RuntimeConfig gRPC メソッドをサポートしていることが要件になりそう?
- kubeadm: kubeadm join を使用する際、--v=1 以上のログ詳細度を指定している場合は、discovery に使用された CA 証明書の情報を出力するようになりました。(#137102, [@sivchari]
Documentation
- なし!
テスト失敗
- なし!
バグ、もしくはリグレッション
-
Server-Side Applyと、client-goのExtract{TypeName}()およびExtract{TypeName}From()関数において、空の配列やmapが誤って「存在しないもの」として扱われていた問題を修正しました。また、associative list内のatomic要素が誤って重複していた問題も修正しました。(#135391, @jpbetz)
「空だが明示的に存在する値」と「フィールドが存在しない状態」は結構違うので違うので直ってよかった。
Field Manger とかにも影響ありそう。
-
kubeadm:etcdのlearner memberはclient trafficを処理しないため、learner memberのclient URLをc.Endpointsに追加しないようkubeadmを修正しました。(#137251, @pacoxu) -
kubeadm:kubeadm join実行時に、etcdのlearner memberが起動したことを確認してからvoting memberへ昇格するように変更しました。(#136014, @SataQiu) -
kubeadm:/var/lib/kubelet/kubeadm-flags.envファイルの内容がKUBELET_KUBEADM_ARGS=""の場合に、kubeadm upgradeが失敗するバグを修正しました。(#136127, @carlory) -
kubeadm:reset時に/var/lib/kubelet配下のpeer mountをアンマウントする際、EINVALエラーを無視するようにしました。(#137494, @fuweid)
EINVAL は Linux syscall で返る “invalid argument” 系のエラーです。アンマウント処理では、対象がすでにマウントポイントではない、あるいは unmount 対象として扱えない状態になっている場合などに返ることがあります。
kubeadm reset 中に無視できるエラーは無視することで、kubeadm reset を中断しないようにする修正のようです。
-
kubeadm:extraArgsを使ってユーザー指定の上書きを適用する際、生成される引数リストを英数字順にソートしないようにしました。ソートされるのはデフォルト引数のみで、ユーザー指定の上書きは指定された順序を保持します。これにより、kube-apiserverの--service-account-issuerのように、順序が意味を持つフラグをより細かく制御できるようになります。(#135400, @neolit123) -
pauseイメージをv3.10.2に更新しました。(#138199, @neolit123)
Windows pause イメージのベース を mcr.microsoft.com/oss/v2/kubernetes/windows-pause-image-base:v0.4.1 に更新し、Windows Server 2025 / ltsc2025 をサポート。今回も Linux は関係なし。
REGISTRY ?= staging-k8s.gcr.io
IMAGE = $(REGISTRY)/pause
- TAG ?= 3.10.1
+ TAG ?= 3.10.2
REV = $(shell git describe --contains --always --match='v*')
# Architectures supported: amd64, arm, arm64, ppc64le and s390x
@@ -32,7 +32,7 @@ OUTPUT_TYPE ?= docker
BASE.linux := scratch
# Source for windows pause image base is located at https://github.com/microsoft/windows-pause-image-base
# BASE.windows includes separate manifests per os.version.
- BASE.windows := mcr.microsoft.com/oss/kubernetes/windows-pause-image-base:v0.4.1@sha256:37cc10768383b55611d724a05eb18564cb5184c89b0c2faa7d4eff63475092df
+ BASE.windows := mcr.microsoft.com/oss/v2/kubernetes/windows-pause-image-base:v0.4.1@sha256:ba474944e82cac8913e0a402c7727c35d469977026b636bf460f0d52112c4e4f
BASE := ${BASE.${OS}}
JQ_IMAGE := ghcr.io/jqlang/jq@sha256:a186dcd84a1e28bb48cdf3d7768b890d08621a87bb651fadb7db6815a6bf5ad5
その他(クリーンアップまたはFlake)
-
kubeadm: アップグレード時に/var/lib/kubelet/kubeadm-flags.envからkubeletフラグ--pod-infra-container-imageを削除するcleanup処理を取り除きました。このcleanupは、v1.35へアップグレードする際に必要だったものです。(#135807, [@carlory] -
kubeadm:etcdのバージョンがv3.6.0未満の場合に使用していた、非推奨のetcdフラグ --experimental-initial-corrupt-checkと--experimental-watch-progress-notify-intervalの使用を削除しました。(#135701, @neolit123) -
cri-apiクライアントは、初期化時にloggerではなくcontextを受け取るようになりました。(#137248, @SergeyKanzhelev)