はじめに
Kubernetes v1.36 がリリースされました 🎉
API Machinary単体の話だと、MutatingAdmissionPolicyのGA昇格と、client-goの変更が多くありました。特に KEP-5647: Stale Controller Mitigation 関連の、controllerが古いinformer cacheを読んでしまうのを抑制するための変更が入っています。また、すでに何バージョンに渡って有効ではありましたが、RealFIFOもGAとなり、今後DeltaFIFOのcleanupが始まっていきそうです。
他のSIGメインのAPI変更では、引き続きDynamic Resource Allocation (DRA)が多かったです。他には、In-place UpgradeではPod-level resourceや、sidecar以外のinitContainerにも対応しました。Schedulerでは、Workload-Aware ScheduleingでのTAS考慮や Preemptionなど、必要な機能がだいぶ出てきた感があります。
それでは、API周りの変更を担当するSIG-API Machineryの変更点をCHANGELOGからピックアックします。(📝がついた文章は、CHANGELOGの公式の内容ではなく筆者の補足です)
SIG, KEPについてはこちらを参照ください。
非推奨
-
metav1.FieldsV1のRawフィールドへの直接アクセスは非推奨になりました。FieldsV1を構築または読み取るコードは、新しいNewFieldsV1(string)、GetRawBytes()、GetRawString()、SetRawBytes()メソッドへ移行してください。(#137304, @aaron-prindle) [SIG API Machinery, Apps and Testing]
📝 FieldsV1 は managedFields のデータを格納するものです。k8sのmanagedFieldsはobjectで共通の値も多いため、同一データであれば共通のメモリを参照させて、最終的に API server や controller のメモリ削減につなげるため、この変更が入ったようです。
- credential plugin allowlist の
AllowlistEntry.NameをAllowlistEntry.Commandにリネームしました。(#137272, @pmengelbert) [SIG API Machinery, Auth, CLI and Testing]
API 変更
-
TopologyAwareWorkloadSchedulingfeature gate 配下で、PodGroup scheduling の topology-aware scheduling (TAS) 制約を表現するSchedulingConstraintsを追加しました。PodGroup scheduling 時に制約を考慮するPlacementGenerateextension point を実装したTopologyPlacementplugin も追加しました。(#137271, @brejman) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing] -
WorkloadAwarePreemptionfeature gate が有効な場合の workload-aware preemption をサポートするため、Workload API と PodGroup API にDisruptionMode、PriorityClassName、Priorityフィールドを追加しました。(#136589, @tosi3k) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing] -
container status に image volume の digest を含める
ImageVolumeWithDigestを追加しました。(#132807, @iholder101) [SIG API Machinery, Apps, Node and Testing] -
既存の認証局実装との互換性を高めるため、Pod Certificates beta API に PKCS#10 certificate signing request を表す
spec.stubPKCS10Requestを追加しました。spec.pkixPublicKeyとspec.proofOfPossessionはこのフィールドを優先する形で非推奨になりました。(#136729, @ahmedtd) [SIG API Machinery, Auth, Node and Testing] -
PodGroup object の削除保護メカニズムを追加しました。(#137641, @helayoty) [SIG API Machinery, Apps, Auth, Scheduling and Storage]
-
PodGroup resource が既存の Workload を参照し、宣言された PodGroupTemplate spec と一致することを検証する admission plugin を追加しました。(#137464, @helayoty) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing]
-
DRA (KEP-5491) の attribute に list 型サポートを追加しました。
DRAListTypeAttributesfeature gate(デフォルトでは無効)により、次の拡張が有効になります。- DRA driver は ResourceSlice の device attribute に list 型フィールド(
bools/ints/strings/versions)を使用できます。1 device あたりの attribute 値の数は、scalar と list を含めて 48 個までです。 - ResourceClaim の
matchAttribute/distinctAttribute制約は、scalar attribute と list attribute の両方で動作するようになりました。matchAttribute制約は、候補 device 間の list 値の共通部分が空でない場合に一致します。distinctAttribute制約(ConsumableCapacityfeature gate 配下)は、候補 device 間のすべての list 値が互いに素である場合に一致します。scalar 値は暗黙に 1 要素の set として扱われます。 - scalar attribute と list attribute の両方で包含判定を行う新しい CEL 関数
.includesを追加しました(例:device.attributes["dra.example.com"].model.includes("model-a"))。これにより、DRA driver が attribute value type を scalar から list、または list から scalar に変更する場合の移行をサポートします。(#137190, @everpeace) [SIG API Machinery, Node, Scheduling and Testing]
- DRA driver は ResourceSlice の device attribute に list 型フィールド(
-
CSI volume 向けの opt-in scheduling behavior を追加しました。(#137343, @gnufied) [SIG API Machinery, Scheduling and Storage]
-
declarative validation に stability-based lifecycle(Alpha/Beta/Stable)を追加しました。Scheduling Workload
v1alpha1は明示的な declarative enforcement を使用するようになりました。(#136793, @yongruilin) [SIG API Machinery and Scheduling] -
ResourceClaimreconcile の concurrency を設定するkube-controller-managerの--concurrent-resourceclaim-syncsflag を追加しました。(#134701, @anson627) [SIG API Machinery, Apps, Node and Testing] -
TLS key exchange mechanism を設定する
--tls-curve-preferencesflag を追加しました。(#137115, @damdo) [SIG API Machinery, Architecture, CLI, Cloud Provider, Node and Testing] -
TLS certificate verification で使用する server name を上書きできるように、
EgressSelectorConfigurationのTLSConfigにtlsServerNameフィールドを追加しました。(#136640, @kennangaibel) [SIG API Machinery, Apps, Auth, Storage and Testing] -
alpha の
DRANodeAllocatableResourcesfeature を追加しました。DRA driver が device resource と node allocatable Kubernetes resource(例: cpu、memory)の対応関係を宣言するための新しいResourceSlice.Spec.Devices[*].NodeAllocatableResourceMappingsフィールドを導入します。(#136725, @pravk03) [SIG API Machinery, Apps, Node, Scheduling and Testing] -
TopologyAwareWorkloadSchedulingfeature gate 配下で、PodGroup scheduling cycle に topology-aware scheduling (TAS) logic を追加しました。これにより、matching topology domain を持つ node に PodGroup を schedule できます。(#137489, @brejman) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing] -
imageMinimumGCAgeに負の duration 値を指定できないよう validation を追加しました。(#135997, @ngopalak-redhat) [SIG API Machinery and Node] -
apiserver admission subsystem で非推奨の
sets.Stringをsets.Set[string]に変更しました。これはNewLifecycle関数の利用者にとって breaking change です。(#134044, @mcallzbl) [SIG API Machinery and Auth] -
scheduling.k8s.io/v1alpha1のPodGroupPolicystruct に対する OpenAPI schema union validation を修正しました。(#136424, @JoelSpeed) [SIG API Machinery and Scheduling] -
DRA
DeviceTaintRules: effect を変更したときに taint のTimeAddedフィールドが自動更新されるようになりました。(#137167, @pohly) [SIG API Machinery, Node and Testing] -
DRA: ResourceClaim と ResourceClaimTemplate を参照する
spec.resourceClaimsフィールドを PodGroup resource に追加しました。PodGroup によって作成される claim は個々の Pod ではなく PodGroup 全体に対して予約され、1 つの ResourceClaim を共有する 256 個超の Pod をサポートします。PodGroup の claim で参照される ResourceClaimTemplate は、その PodGroup 専用かつグループ内すべての Pod で共有される ResourceClaim に複製されます。(#136989, @nojnhuh) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing] -
DRA: Device Binding Conditions (KEP #5007) が beta に昇格し、
v1.36ではデフォルトで有効になりました。(#137795, @ttsuuubasa) [SIG API Machinery, Node, Scheduling and Testing] -
DRA: device taints and tolerations (KEP #5055) が beta に昇格しました。ResourceSlices の DeviceTaints サポートはデフォルトで有効です。
DeviceTaintRulesのサポートは、resource.k8s.io/v1beta2とDeviceTaintRulesfeature gate を有効にすることに依存します。(#137170, @pohly) [SIG API Machinery, Apps, Auth, Cluster Lifecycle, Etcd, Node, Scheduling and Testing] -
fake.NewClientset()が正しい schema で適切に動作するよう修正しました。(#131068, @soltysh) [SIG API Machinery] -
いくつかの log call が parameter を正しく format していなかった問題を修正しました。(#137108, @pohly) [SIG API Machinery, Apps, Auth, Cluster Lifecycle, Network, Node, Scheduling and Testing]
-
⭐
kube-apiserverで、APIService availability check 中に期待する response を返さない誤った server への確立済み connection から復旧できるようにしました。(#137157, @bsalamat) [SIG API Machinery]
📝 API変更というよりBugfixですが、podの再作成などでkube-apiserverがAPIServiceのbackendに正常に到達できなくなったときに、古いconnectionを再利用してしまうという問題があったようです。エラー時はキャッシュされたconnectionを落とすようになったようです。
-
resize request が node の allocatable capacity を超えている場合、または node が resize をサポートしない OS で稼働している場合、Pod resize request は後で Pod status 上で Infeasible とされるのではなく、admission で失敗するようになりました。(#136043, @natasha41575) [SIG API Machinery, Node, Release, Scheduling, Storage and Testing]
-
kube-aggregatorとsample-apiserver向けに、非推奨のNewSimpleClientsetを置き換えるfake.NewClientsetを生成しました。(#136537, @soltysh) [SIG API Machinery] -
InPlacePodLevelResourcesVerticalScalingfeature gate が beta に昇格し、デフォルトで有効になりました。Pod-level resource が設定された Pod では、Pod-level CPU と memory resource を in-place で resize できます。(#137684, @ndixita) [SIG API Machinery, Apps, Autoscaling, Node, Release, Scheduling and Testing] -
UserNamespacesSupportfeature gate が GA に昇格しました。(#136792, @rata) [SIG API Machinery, Apps, CLI, Node, Storage and Testing] -
workload-level scheduling requirement を表現し、
kube-schedulerがそれに基づいて動作できるようにするscheduling.k8s.io/v1alpha2Workload API と PodGroup API を導入しました。scheduling.k8s.io/v1alpha1Workload API は削除されました。(#136976, @tosi3k) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling, Storage and Testing] -
Kube-apiserver:
--audit-policy-fileconfig file の resource rule でgroup: "*"を指定し、すべての API group に match できるようになりました。(#135262, @cmuuss) [SIG API Machinery, Auth and Testing] -
VolumeAttributesClassfeature gate をtrueに lock し、preferred storage version をstorage.k8s.io/v1に更新しました。(#134556, @carlory) [SIG API Machinery, Apps, Etcd, Network, Node, Scheduling, Storage and Testing] -
mutable CSI node allocatable count が GA に昇格しました。
MutableCSINodeAllocatableCountfeature gate は enabled に lock されています。(#136230, @torredil) [SIG API Machinery and Storage] -
DRA extended resource feature が
v1.36で beta に昇格しました。(#135048, @yliaog) [SIG API Machinery, Architecture, Auth, Network, Node, Scheduling and Testing] -
ConstrainedImpersonationfeature が beta に昇格し、デフォルトで有効になりました。(#137609, @enj) [SIG API Machinery and Testing] -
DRAAdminAccessfeature gate が GA に昇格しました。(#137373, @ritazh) [SIG API Machinery, Auth, Node, Scheduling and Testing] -
MutatingAdmissionPolicyが Kubernetesv1.36で GA(v1)に昇格しました。この feature はデフォルトで有効です。(#136039, @lalitc375) [SIG API Machinery, Architecture, Etcd and Testing] -
ProcMountTypefeature が GA に昇格しました。(#137454, @haircommander) [SIG API Machinery, Apps, Auth, CLI, Node, Storage and Testing] -
StorageVersionMigrator migration 後、CustomResourceDefinition stored versions を status から削除するようにしました。(#135297, @michaelasp) [SIG API Machinery, Apps, Auth and Testing]
-
in-tree Portworx volume plugin を削除し、CSI への移行を完了しました。
v1.33から lock されていた GA のCSIMigrationPortworxfeature gate と、alpha のInTreePluginPortworxUnregisterfeature gate を削除し、すべての operation は CSI に redirect されるようになりました。(#135322, @carlory) [SIG API Machinery, Apps, Auth, Node, Scalability, Scheduling, Storage and Testing] -
Kubernetes REST API type in
k8s.io/apiから、一時的に build tag 付きで実装されていたProtoMessage()marker method を削除しました。これらは標準のv1proto message として誤って識別されていました。Kubernetes API type の Protobuf serialization には k8s.io/apimachinery/pkg/runtime/serializer/protobuf を使用してください。(#137084, @liggitt) [SIG API Machinery, Apps, Architecture, Auth, Node, Scheduling and Storage] -
ConstrainedImpersonationfeature が有効な場合、impersonation を使用する slow request をapiserver.latency.k8s.io/impersonationaudit event annotation で追跡できるようになりました。(#137523, @enj) [SIG API Machinery, Auth and Testing] -
DRAConsumableCapacityfeature gate がデフォルトで有効になりました。(#136611, @sunya-ch) [SIG API Machinery, Cluster Lifecycle, Node, Scheduling and Testing] -
kube-schedulerは、group が正常に schedule されたか unschedulable かを示すPodGroupScheduledcondition を PodGroup status に更新するようになりました。(#137611, @helayoty) [SIG API Machinery, Apps, Scheduling and Testing] -
Dynamic Resource Allocation (DRA) が stable 状態であることを反映するよう API comment を更新しました。(#136441, @kannon92) [SIG API Machinery]
-
field が optional か required かについて OpenAPI schema の正確性を高めるため、API server internal API group を更新しました。(#134675, @JoelSpeed) [SIG API Machinery, Apps, Auth, Node and Storage]
-
kubelet、kube-scheduler、cloud controller manager、kube-proxyの/configzendpoint を更新し、APIVersionとKindフィールドを serialize し、internal type ではなく public type を使うようにしました。(#136044, @SergeyKanzhelev) [SIG API Machinery, Cloud Provider, Cluster Lifecycle, Network, Node, Scheduling and Testing]
機能
-
実行中の non-sidecar initContainer に対する in-place Pod resize をサポートしました。(#137352, @natasha41575) [SIG API Machinery, Apps, Autoscaling, Node, Scheduling, Storage and Testing]
-
⭐
kube-controller-managerの終了時に leader election lock を release する動作を制御するControllerManagerReleaseLeaderElectionLockOnCancelfeature gate を追加しました。(#136279, @tchap) [SIG API Machinery and Cloud Provider]
📝 controler-managerでも ReleaseOnCancel で終了時にreleaseするようにして、leaderの切り替えを早くして無駄な停止時間を減らすための変更の一環です。 ReleaseOnCancel については 去年2025年のKubeConで解説しています。詳しくは https://speakerdeck.com/ladicle/wait-can-your-pod-survive-a-restart?slide=18
-
ExtendWebSocketsToKubeletfeature gate(beta、v1.36ではデフォルト true)を追加しました。有効な場合、API server は WebSocket のexec/attach/portforwardrequest を API server 側で変換または tunneling する代わりに、直接kubeletへ proxy します。kubeletは、従来 API server で使われていた handler と同じものを使って WebSocket-to-SPDY stream translation(exec/attach)と WebSocket tunneling(portforward)を処理します。kubeletはNodeDeclaredFeaturesmechanism によってこの feature のサポートを API server に advertise し、API server はサポートを advertise したkubeletにのみ直接 proxy します。Routing decision と WebSocket streaming volume を追跡する 2 つの新しい alpha metric、apiserver_websocket_streaming_requests_total(label: subresource、proxy_type)とkubelet_streaming_websocket_requests_total(label: subresource)も追加されました。(#136256, @seans3) [SIG API Machinery, Autoscaling, Node, Scheduling and Testing] -
Client-go: default informer behavior は、list または relist に含まれるすべての object で store state を更新してから、削除・追加・削除扱いになった個別 item に対して handler の
OnDelete、OnAdd、OnUpdatemethod を呼び出すようになりました。これにより、handler から参照できる store state が server 上の特定の resource version に存在した object set と対応することが保証されます。この動作はAtomicFIFOfeature gate で保護され、v1.36ではデフォルトで有効ですが、必要に応じて一時的に以前の動作へ戻すため無効化できます。(#135462, @michaelasp) [SIG API Machinery]
📝 本来特定のsnapshotが欲しいListでは、個イベント列として処理してしまうと実際にはAPIサーバ上では存在しなかった中間状態が発生してしまう可能性があります。この問題に対応するため、relist/replaceをまとまったAtomic Operationとして一括で処理できるようにしたという機能です。
これはKEP-5647: Stale Controller Mitigation の変更の一部で、このKEPはeventually consistentとはいえ、Bookmarkやread-own-writesによりcontrollerが古いinformer cacheをよんでreconcileするのをなるべく抑えようというKEPです。
- Client-go: informer resync processing を改善し、incoming event と handler update の間の store lock contention を減らしました。これにより handler invocation の観測可能な timing に違いが出る可能性があります。この動作は
AtomicFIFOfeature gate で保護され、v1.36ではデフォルトで有効ですが、必要に応じて一時的に以前の動作へ戻すため無効化できます。(#136008, @michaelasp) [SIG API Machinery]
📝 上と同じKEP-5647の一貫です。
- Client-go: informer は、すでに queue された event の処理中でも新しい watch event を enqueue できるようになりました。これにより、処理が遅い場合の contention によって burst した incoming event 中に watch が drop されることを避けられます。この動作は client-go の
UnlockWhileProcessingfeature gate で制御され、デフォルトで有効です。(#136264, @michaelasp) [SIG API Machinery and Scheduling]
📝 上と同じKEP-5647の一貫です。
burst時の安定性向上のための機能で、RealFIFO の queue processing と queue writer を分離し、consumer が event を処理している間も watch 側の writer が新しい event を enqueue できるようになりました。
- Client-go: informer store は、自身が sync された resourceVersion(add/update/delete event、replace call、bookmark event 経由)を追跡し、この resource version を取得する
LastStoreSyncResourceVersionmethod を提供するようになりました。この method は store がまだ sync されていない場合""を返すことがあり、AtomicFIFOfeature が有効であることに依存します。(#134827, @michaelasp) [SIG API Machinery and Testing]
📝 こちらもKEP-5647の一貫です。
sync 済みの resourceVersion を保持し、LastStoreSyncResourceVersion で取得できるようにした変更です。
- Kube-controller-manager: daemonset controller は、前回 sync した時点から controller 自身による daemonset または pod write をまだ観測していない場合、DaemonSet object の sync を延期するようになりました。これにより、controller の cache が stale な場合に node 向けの重複 pod が誤って作成されることを防ぎます。この理由で sync が延期されると、
daemonset_controller_stale_sync_skips_totalmetric が increment され、daemonset controller に message が log されます。この動作はStaleControllerConsistencyDaemonSetfeature gate を false に設定することで一時的に無効化できます。(#134937, @michaelasp) [SIG API Machinery, Apps, Node, Scheduling and Testing]
📝 こちらもKEP-5647の一貫で、最初に触れた read-own-writes の変更です。
これは、controllerが、自身の書き込んだ変更のresourceVersionを記録しておき、キャッシュから読み込んだリソースのresourceVersionがそれより古かったらcacheが追いついていないものとして、reconcileを遅らせるというものです。
- Kube-controller-manager: job controller は、前回 sync した時点から controller 自身による job または pod write をまだ観測していない場合、Job object の sync を延期するようになりました。これにより、controller の cache が stale な場合に job 向けの重複 pod が誤って作成されることを防ぎます。この理由で sync が延期されると、
job_controller_stale_sync_skips_totalmetric が increment され、job controller に message が log されます。この動作はStaleControllerConsistencyJobfeature gate を false に設定することで一時的に無効化できます。(#137210, @michaelasp) [SIG API Machinery and Apps]
📝 上記と同じ話のjob controller版。
-
WatchCacheInitializationPostStartHookfeature gate をデフォルトで有効にしました。(#135777, @serathius) [SIG API Machinery] -
Kube-apiserver:
UnknownVersionInteroperabilityProxyfeature gate が beta に昇格し、デフォルトで有効になりました。proxy を有効にするには--peer-ca-fileflag が必要です。(#137172, @richabanker) [SIG API Machinery]
📝 Version skew のある control plane で、apiserver が知らない API version の request を、対応できる peer apiserver へ proxy するための機能です。
-
Kube-apiserver:
ExternalServiceAccountTokenSignerfeature gate が GA に昇格しました。(#136118, @HarshalNeelkamal) [SIG API Machinery and Auth] -
Kubelet:
kubelet実行中に--client-ca-fileが更新された場合、更新後の root certificate がkubeletendpoint に接続する TLS client に対して accepted authority として正しく advertise されるようになりました。この動作はReloadKubeletClientCAFilefeature gate で保護され、デフォルトで有効です。(#136762, @HarshalNeelkamal) [SIG API Machinery, Auth, Node and Testing]
バグまたはリグレッション
-
Client-go: informer startup 中に起こり得る可能性の低い deadlock を修正しました。(#136509, @pohly) [SIG API Machinery]
-
CustomResourceDefinitions:
/statussubresource への write について metadata ownership が正しく追跡されるよう、server-side apply field ownership tracking を修正しました。
Custom Resources: custom resource では/statussubresource からの write が消去されるため、server-side apply field ownership が/statussubresource から metadata を更新しないよう修正しました。(#137689, @jpbetz) [SIG API Machinery, Network and Testing] -
大きな CBOR encoded list を decode すると client が error になるバグを修正しました。(#135340, @ricardomaraschini) [SIG API Machinery]
📝 CBOR serializer の decode limit が小さすぎ、大きな list response を扱う controller で cbor: exceeded max number of elements 1024 for CBOR array のような error が出る問題への修正です。PR では staging/src/k8s.io/apimachinery/pkg/runtime/serializer/cbor/internal/modes/decode.go の limit を引き上げています。
-
DeepEqualWithNilDifferentFromEmptyで OR (||) ではなく AND (&&) logic を使うべきところを誤っていたため、空の slice/map が空でないものと等しいと判定されていたバグを修正しました。これにより、list または map からすべての要素を追加・削除することだけが変更内容だった場合に managed fields timestamp が更新されない可能性がありました。(#135636, @mikecook) [SIG API Machinery]
📝 Issueがないわりに影響が大きそうなbugに見えましたが、参照元はSSAの IgnoreManagedFieldsTimestampsTransformer くらいでした。変更が list/map の全追加・全削除だけだった場合に managedFields の timestamp が更新されない可能性があったようです。
-
k8s.io/apiserver/pkg/cel/openapi/resolverのPopulateRefs関数で、concurrent goroutine が shallow-copied schema struct の共有 pointer field を同時に変更できてしまう data race を修正しました。(#136802, @pohly) [SIG API Machinery, Node and Testing] -
system administrator が設定した DRA extended resource quota を user が回避できてしまう抜け道を修正しました。(#135434, @yliaog) [SIG API Machinery, Apps, Node, Scheduling and Testing]
-
高負荷時に CEL admission policy compilation の race condition により
kube-apiserverがconcurrent map read and map writeerror で crash する可能性があった問題を修正しました。(#135759, @Abhigyan-Shekhar) [SIG API Machinery and CLI] -
event broadcaster が cancellation context より先に shutdown した場合に、client-go
StartEventWatcherで goroutine hot-loop が起きる問題を修正しました。(#137398, @Rajneesh180) [SIG API Machinery] -
informer-gen が per-informer transform を正しく override する
SetTransformcall を生成するよう修正しました。(#137473, @jpbetz) [SIG API Machinery and Scheduling]
📝 Sheduler の Pod informer が managed fields を drop するはずだったのに意図どおりになっていなかったようです。(#134238 の review discussion) これにより、 memory 消費が上がる可能性があったようです。 (API object の managed fields は大きくなりやすいため)
-
server-side apply と client-go の
Extract{TypeName}()/Extract{TypeName}From()関数において、空の array/map が誤って absent と扱われ、associative list の atomic element が誤って重複する問題を修正しました。(#135391, @jpbetz) [SIG API Machinery, Architecture, Auth, CLI, Cloud Provider, Cluster Lifecycle, Network, Node, Scheduling and Storage] -
storage version migrator の non-error message が error level で log されないよう、log verbosity を修正しました。(#136046, @Tanner-Gladson) [SIG API Machinery and Apps]
-
etcdfailure e2e test における冗長な SSH command execution を修正しました。(#137001, @kairosci) [SIG API Machinery and Testing] -
unsupported
Tableobject detection をすべての List および Watch operation に広げ、reflector がTableformat で返された resource を誤って処理しないようにしました。(#136937, @p0lyn0mial) [SIG API Machinery and Testing] -
ResourceSlice entry を shared と onNode category に分割することで
DRA schedulingperformance を改善し、大規模 cluster で Filter stage latency を約 50% 削減しました。(#136588, @abel-von) [SIG API Machinery, Apps, Auth, Node and Scheduling] -
Kube-apiserver: request が
500msを超えた場合の audit log 内 request latency annotationapiserver.latency.k8s.io/totalを修正しました。(#135685, @chaochn47) [SIG API Machinery] -
Kube-apiserver: unsafe delete authorization check で Error level ではなく Info level を使うべきところを誤っていた log verbosity level を修正しました。(#136229, @thc1006) [SIG API Machinery]
-
Kube-apiserver: loopback client certificate が期限切れの場合、liveness probe が失敗するようになりました。(#136477, @everettraven) [SIG API Machinery and Testing]
-
Kube-apiserver:
--audit-log-maxsize=0を設定すると audit log rotation が無効になります(default は引き続き100 MB)。増え続ける audit log による disk fill で outage が起きることを避けるため、--audit-log-maxageの default は366 (1 year)、--audit-log-maxbackupの default は100になりました。rotate された log をすべて保持したい場合は、--audit-log-maxage=0と--audit-log-maxbackup=0を明示的に指定して age/count based pruning を無効化できます。(#136478, @kairosci) [SIG API Machinery] -
Kubelet: server certificate file が disk 上で変更され、kubelet が DNS/hostname ではなく IP address で dial される場合の server certificate file reload を修正しました。(#133654, @kwohlfahrt) [SIG API Machinery, Auth, Node and Testing]
-
garbage collector が外部で削除された object を正しく処理し、不要な error log を防ぐようになりました。(#136817, @kairosci) [SIG API Machinery, Apps and Testing]
-
ServiceCIDR main resource への write は、他の Kubernetes API と同様に request 内の status field change を無視するようになりました。以前の動作に戻すには
ServiceCIDRStatusFieldWipingfeature gate を無効化できますが、将来の release では enabled に lock される予定です。(#137715, @jpbetz) [SIG API Machinery, Network and Testing]
その他(Cleanup または Flake)
-
"Starting watch" log line に
audit-idを追加しました。(#136084, @richabanker) [SIG API Machinery] -
WatchListrequest が initial listing phase を完了したときに明示的な logging を追加しました。(#136085, @richabanker) [SIG API Machinery] -
既存の alpha metric
apiserver_rerouted_request_totalに group、version、resource label を追加しました。(#137063, @richabanker) [SIG API Machinery] -
Client-go: Fake client-go(つまり
k8s.io/client-go/testingを使用するもの)は、Watch call でResourceVersionを確認する個別の List+Watch call をサポートするようになりました。これにより、informer cache が sync された直後(List call 完了後)かつ Watch call 完了前に object を直接作成すると、その object が informer に送信されない race condition が解消されます。このサポート追加による目に見える副作用として、List metadata にはResourceVersion(空 set は 1 から始まり、add/update ごとに 1 増加)が含まれ、以前は返されなかった object が Watch で返される場合があります。
なお、この List+Watch は単一 call を使用するListWatchfeature とは別物です。その feature は fake client-go では引き続きサポートされていません。(#136143, @pohly) [SIG API Machinery, Apps, Auth and CLI]
📝 fake client-go の List+Watch emulation を修正し、informer cache の sync 直後に作成された object が Watch に届かない race を解消した変更です。PR 本文では、List が object なしの場合に ResourceVersion を付けず早期 return していたこと、ResourceVersion="" の Watch が既存 object を deliver しなかったことが問題のようです。
-
Client-go: watch の開始時に
resourceVersion0 または empty string ("") から synthetic ADDED event を受信している間に、Reflector が watch restart に使用すべき resource version を誤認する可能性があった問題を修正しました。(#136583, @michaelasp) [SIG API Machinery] -
SeparateCacheWatchRPCfeature gate を非推奨にしました。現在は default value(false)に lock され、上書きできません。この feature gate は将来の release で削除されます。(#135808, @tico88612) [SIG API Machinery] -
RealFIFOの利用によりInOrderInformersが GA に昇格しました。これは、internal implementation でDeltaFIFOが段階的にRealFIFOへ置き換えられていくことを意味します。(#136601, @michaelasp) [SIG API Machinery]
📝 1.35 の時点で GA に合意していたものの反映が漏れていたようです。DeltaFIFO のAPIを直接触っている人はほぼいないと思いますが、その場合は今後cleanupされるのでRealFIFOへの移行が必要です。
-
v1alpha1WebhookAdmissionConfigurationを削除しました。これはapiserver.config.k8s.io/v1を優先する形でv1.17から非推奨でした。(#137379, @aramase) [SIG API Machinery and Testing] -
v1.36でWatchFromStorageWithoutResourceVersionfeature gate を削除しました。(#136066, @serathius) [SIG API Machinery] -
deepcopy-gen から使用されていない
--bounding-dirsflag とBoundingDirsfield を削除しました。(#137348, @Jefftree) [SIG API Machinery] -
maxLengthproperty の graduation を revert しました。(#137274, @lalitc375) [SIG API Machinery]
📝 validation-gen の maxLength validation tag を beta に戻す変更です。以前の実装が OpenAPI specification の maxLength の意味を誤解 (byte数ではなく Unicode code point数をチェックすべきだった)たため、revert されました。
-
設定されている log level によっては、"Failed to update lease optimistically" log message が user に表示されなくなる場合があります。(#137753, @adamkasztenny) [SIG API Machinery]
-
etcd client library を
v3.6.6に更新しました。(#135331, @yashsingh74) [SIG API Machinery, Auth, Cloud Provider, Etcd, Node and Scheduling] -
etcd client library を
v3.6.7に更新しました。(#136407, @ivanvc) [SIG API Machinery, Auth, Cloud Provider, Node and Scheduling] -
etcd images を
v3.6.8に更新しました。(#137107, @joshjms) [SIG API Machinery, Cloud Provider, Cluster Lifecycle, Etcd and Testing]