0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes 1.36: SIG-API Machineryの変更内容

0
Posted at

はじめに

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.FieldsV1Raw フィールドへの直接アクセスは非推奨になりました。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.NameAllowlistEntry.Command にリネームしました。(#137272, @pmengelbert) [SIG API Machinery, Auth, CLI and Testing]

API 変更

  • TopologyAwareWorkloadScheduling feature gate 配下で、PodGroup scheduling の topology-aware scheduling (TAS) 制約を表現する SchedulingConstraints を追加しました。PodGroup scheduling 時に制約を考慮する PlacementGenerate extension point を実装した TopologyPlacement plugin も追加しました。(#137271, @brejman) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling and Testing]

  • WorkloadAwarePreemption feature gate が有効な場合の workload-aware preemption をサポートするため、Workload API と PodGroup API に DisruptionModePriorityClassNamePriority フィールドを追加しました。(#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.pkixPublicKeyspec.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 型サポートを追加しました。DRAListTypeAttributes feature 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 制約(ConsumableCapacity feature 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]
  • 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]

  • ResourceClaim reconcile の concurrency を設定する kube-controller-manager--concurrent-resourceclaim-syncs flag を追加しました。(#134701, @anson627) [SIG API Machinery, Apps, Node and Testing]

  • TLS key exchange mechanism を設定する --tls-curve-preferences flag を追加しました。(#137115, @damdo) [SIG API Machinery, Architecture, CLI, Cloud Provider, Node and Testing]

  • TLS certificate verification で使用する server name を上書きできるように、EgressSelectorConfigurationTLSConfigtlsServerName フィールドを追加しました。(#136640, @kennangaibel) [SIG API Machinery, Apps, Auth, Storage and Testing]

  • alpha の DRANodeAllocatableResources feature を追加しました。DRA driver が device resource と node allocatable Kubernetes resource(例: cpu、memory)の対応関係を宣言するための新しい ResourceSlice.Spec.Devices[*].NodeAllocatableResourceMappings フィールドを導入します。(#136725, @pravk03) [SIG API Machinery, Apps, Node, Scheduling and Testing]

  • TopologyAwareWorkloadScheduling feature 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.Stringsets.Set[string] に変更しました。これは NewLifecycle 関数の利用者にとって breaking change です。(#134044, @mcallzbl) [SIG API Machinery and Auth]

  • scheduling.k8s.io/v1alpha1PodGroupPolicy struct に対する 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/v1beta2DeviceTaintRules feature 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-aggregatorsample-apiserver 向けに、非推奨の NewSimpleClientset を置き換える fake.NewClientset を生成しました。(#136537, @soltysh) [SIG API Machinery]

  • InPlacePodLevelResourcesVerticalScaling feature 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]

  • UserNamespacesSupport feature gate が GA に昇格しました。(#136792, @rata) [SIG API Machinery, Apps, CLI, Node, Storage and Testing]

  • workload-level scheduling requirement を表現し、kube-scheduler がそれに基づいて動作できるようにする scheduling.k8s.io/v1alpha2 Workload API と PodGroup API を導入しました。scheduling.k8s.io/v1alpha1 Workload API は削除されました。(#136976, @tosi3k) [SIG API Machinery, Apps, Auth, CLI, Cloud Provider, Etcd, Node, Scheduling, Storage and Testing]

  • Kube-apiserver: --audit-policy-file config file の resource rule で group: "*" を指定し、すべての API group に match できるようになりました。(#135262, @cmuuss) [SIG API Machinery, Auth and Testing]

  • VolumeAttributesClass feature 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 に昇格しました。MutableCSINodeAllocatableCount feature 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]

  • ConstrainedImpersonation feature が beta に昇格し、デフォルトで有効になりました。(#137609, @enj) [SIG API Machinery and Testing]

  • DRAAdminAccess feature gate が GA に昇格しました。(#137373, @ritazh) [SIG API Machinery, Auth, Node, Scheduling and Testing]

  • MutatingAdmissionPolicy が Kubernetes v1.36 で GA(v1)に昇格しました。この feature はデフォルトで有効です。(#136039, @lalitc375) [SIG API Machinery, Architecture, Etcd and Testing]

  • ProcMountType feature が 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 の CSIMigrationPortworx feature gate と、alpha の InTreePluginPortworxUnregister feature 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 を削除しました。これらは標準の v1 proto 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]

  • ConstrainedImpersonation feature が有効な場合、impersonation を使用する slow request を apiserver.latency.k8s.io/impersonation audit event annotation で追跡できるようになりました。(#137523, @enj) [SIG API Machinery, Auth and Testing]

  • DRAConsumableCapacity feature gate がデフォルトで有効になりました。(#136611, @sunya-ch) [SIG API Machinery, Cluster Lifecycle, Node, Scheduling and Testing]

  • kube-scheduler は、group が正常に schedule されたか unschedulable かを示す PodGroupScheduled condition を 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]

  • kubeletkube-scheduler、cloud controller manager、kube-proxy/configz endpoint を更新し、APIVersionKind フィールドを 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 する動作を制御する ControllerManagerReleaseLeaderElectionLockOnCancel feature 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

  • ExtendWebSocketsToKubelet feature gate(beta、v1.36 ではデフォルト true)を追加しました。有効な場合、API server は WebSocket の exec/attach/portforward request を API server 側で変換または tunneling する代わりに、直接 kubelet へ proxy します。kubelet は、従来 API server で使われていた handler と同じものを使って WebSocket-to-SPDY stream translation(exec/attach)と WebSocket tunneling(portforward)を処理します。kubeletNodeDeclaredFeatures mechanism によってこの 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 の OnDeleteOnAddOnUpdate method を呼び出すようになりました。これにより、handler から参照できる store state が server 上の特定の resource version に存在した object set と対応することが保証されます。この動作は AtomicFIFO feature 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 に違いが出る可能性があります。この動作は AtomicFIFO feature 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 の UnlockWhileProcessing feature 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 を取得する LastStoreSyncResourceVersion method を提供するようになりました。この method は store がまだ sync されていない場合 "" を返すことがあり、AtomicFIFO feature が有効であることに依存します。(#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_total metric が increment され、daemonset controller に message が log されます。この動作は StaleControllerConsistencyDaemonSet feature 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_total metric が increment され、job controller に message が log されます。この動作は StaleControllerConsistencyJob feature gate を false に設定することで一時的に無効化できます。(#137210, @michaelasp) [SIG API Machinery and Apps]

📝 上記と同じ話のjob controller版。

  • WatchCacheInitializationPostStartHook feature gate をデフォルトで有効にしました。(#135777, @serathius) [SIG API Machinery]

  • Kube-apiserver: UnknownVersionInteroperabilityProxy feature gate が beta に昇格し、デフォルトで有効になりました。proxy を有効にするには --peer-ca-file flag が必要です。(#137172, @richabanker) [SIG API Machinery]

📝 Version skew のある control plane で、apiserver が知らない API version の request を、対応できる peer apiserver へ proxy するための機能です。

  • Kube-apiserver: ExternalServiceAccountTokenSigner feature gate が GA に昇格しました。(#136118, @HarshalNeelkamal) [SIG API Machinery and Auth]

  • Kubelet: kubelet 実行中に --client-ca-file が更新された場合、更新後の root certificate が kubelet endpoint に接続する TLS client に対して accepted authority として正しく advertise されるようになりました。この動作は ReloadKubeletClientCAFile feature gate で保護され、デフォルトで有効です。(#136762, @HarshalNeelkamal) [SIG API Machinery, Auth, Node and Testing]

バグまたはリグレッション

  • Client-go: informer startup 中に起こり得る可能性の低い deadlock を修正しました。(#136509, @pohly) [SIG API Machinery]

  • CustomResourceDefinitions: /status subresource への write について metadata ownership が正しく追跡されるよう、server-side apply field ownership tracking を修正しました。
    Custom Resources: custom resource では /status subresource からの write が消去されるため、server-side apply field ownership が /status subresource から 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/resolverPopulateRefs 関数で、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-apiserverconcurrent map read and map write error で 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 する SetTransform call を生成するよう修正しました。(#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]

  • etcd failure e2e test における冗長な SSH command execution を修正しました。(#137001, @kairosci) [SIG API Machinery and Testing]

  • unsupported Table object detection をすべての List および Watch operation に広げ、reflector が Table format で返された resource を誤って処理しないようにしました。(#136937, @p0lyn0mial) [SIG API Machinery and Testing]

  • ResourceSlice entry を shared と onNode category に分割することで DRA scheduling performance を改善し、大規模 cluster で Filter stage latency を約 50% 削減しました。(#136588, @abel-von) [SIG API Machinery, Apps, Auth, Node and Scheduling]

  • Kube-apiserver: request が 500ms を超えた場合の audit log 内 request latency annotation apiserver.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 を無視するようになりました。以前の動作に戻すには ServiceCIDRStatusFieldWiping feature 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]

  • WatchList request が 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 を使用する ListWatch feature とは別物です。その 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 の開始時に resourceVersion 0 または empty string ("") から synthetic ADDED event を受信している間に、Reflector が watch restart に使用すべき resource version を誤認する可能性があった問題を修正しました。(#136583, @michaelasp) [SIG API Machinery]

  • SeparateCacheWatchRPC feature 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への移行が必要です。

  • v1alpha1 WebhookAdmissionConfiguration を削除しました。これは apiserver.config.k8s.io/v1 を優先する形で v1.17 から非推奨でした。(#137379, @aramase) [SIG API Machinery and Testing]

  • v1.36WatchFromStorageWithoutResourceVersion feature gate を削除しました。(#136066, @serathius) [SIG API Machinery]

  • deepcopy-gen から使用されていない --bounding-dirs flag と BoundingDirs field を削除しました。(#137348, @Jefftree) [SIG API Machinery]

  • maxLength property の 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]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?