Skip to content

Update release notes draft to version v1.38.0-alpha.2 - #3120

Open
whtssub wants to merge 1 commit into
kubernetes:masterfrom
whtssub:release-notes-draft-v1.38.0-alpha.2
Open

whtssub wants to merge 1 commit into
kubernetes:masterfrom
whtssub:release-notes-draft-v1.38.0-alpha.2

Conversation

@whtssub

@whtssub whtssub commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

What type of PR is this?
/kind documentation

What this PR does / why we need it:
This PR updates the Release Notes Draft to k/k v1.38.0-alpha.2

Which issue(s) this PR fixes:

Special notes for your reviewer:
This is an automated PR generated from krel The Kubernetes Release Toolbox

Metrics: Across the full v1.38 cycle so far, there are 200 PRs flagged by Krel, of which 174 are now covered by map files and 26 are left untouched. This PR touches 40 release notes map files for the v1.38.0-alpha.2 cycle: 35 new, 4 deleted, 1 edited.

Note: release-notes-draft.md and release-notes-draft.json are generated from the maps in releases/release-1.38/release-notes/maps/ and will regenerate automatically on the next krel run.

Reviewer Note:
Checklist

  • krel release-notes validate is successful
  • .json validation
  • Successfully parsed release notes maps for 174 PRs

cc: @Caesarsage @yashasvimisra2798 @ChieloChi @AnshumanTripathi @abalso0 @sreeram-venkitesh @rayandas @adilGhaffarDev

@kubernetes-prow kubernetes-prow Bot added kind/documentation Categorizes issue or PR as related to documentation. needs-priority cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. area/release-team Issues or PRs related to the release-team subproject sig/release Categorizes an issue or PR as relevant to SIG Release. labels Oct 9, 2026
@kubernetes-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: whtssub
Once this PR has been reviewed and has the lgtm label, please assign rayandas for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@kubernetes-prow kubernetes-prow Bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Oct 9, 2026
@linux-foundation-easycla

linux-foundation-easycla Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

CLA Signed
The committers listed above are authorized under a signed CLA.

@kubernetes-prow kubernetes-prow Bot added cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. and removed cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. labels Oct 9, 2026
@whtssub
whtssub force-pushed the release-notes-draft-v1.38.0-alpha.2 branch from 45c9b70 to fcd402e Compare October 9, 2026 10:11
@kubernetes-prow kubernetes-prow Bot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. and removed cncf-cla: no Indicates the PR's author has not signed the CNCF CLA. labels Oct 9, 2026
@whtssub
whtssub force-pushed the release-notes-draft-v1.38.0-alpha.2 branch from 722ea5d to 7067d2c Compare October 9, 2026 10:57
@whtssub

whtssub commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor Author

Found a bug in krel while regenerating this draft: do_not_publish: true set inside a release-notes map is silently ignored once that map applies any other override to the note which is always, since that field only exists inside a map. In pkg/notes/document/document.go, the suppression check is if !note.IsMapped && note.DoNotPublish, but IsMapped is already true for any note with a map, so the note never gets skipped.

Concretely, these four PRs have do_not_publish: true in their maps but still show up in the rendered draft: #141817, #141663, #141203, #142395

Was this already known?

cc @Caesarsage @sreeram-venkitesh

@Caesarsage

Caesarsage commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Thank you @whtssub

There are still some work that need to be done before it can be ready for review. Check the step 8 on this guide to clean up the maps

https://caesarsage.github.io/v1.38-docs-onboarding/training/release-notes-walkthrough.html

@Caesarsage

Copy link
Copy Markdown
Contributor

Found a bug in krel while regenerating this draft: do_not_publish: true set inside a release-notes map is silently ignored once that map applies any other override to the note which is always, since that field only exists inside a map. In pkg/notes/document/document.go, the suppression check is if !note.IsMapped && note.DoNotPublish, but IsMapped is already true for any note with a map, so the note never gets skipped.

Concretely, these four PRs have do_not_publish: true in their maps but still show up in the rendered draft: #141817, #141663, #141203, #142395

Was this already known?

cc @Caesarsage @sreeram-venkitesh

Yes, it's tracked in kubernetes/release#4456. For now: delete the four maps and get release-note-none on each k/k PR.

@whtssub
whtssub force-pushed the release-notes-draft-v1.38.0-alpha.2 branch from 7067d2c to 8275e8c Compare October 13, 2026 11:57

@Caesarsage Caesarsage left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @whtssub. Left inline style suggestions; please batch-commit them. Also update the description: drop the "Hidden" section, and change the counts to 174 maps, 26 untouched, 40 files touched. The four removed maps still need /release-note-none on their k/k PRs.

Comment on lines +4 to +5
text: |-
DRA: fixed a deadlock when an `ErrorHandler` calls `Update`, or a `kubelet` plugin's `HandleError` calls `PublishResources`, in response to pools that do not match `ReconcilePoolWithName`. Such resources now replace the desired state instead of being rejected; the other pools are reported to the error handler and are not published. Initial resources with other pools no longer cause a panic. Also fixed a deadlock when a `kubelet` plugin's `HandleError` calls `PublishResources` while the plugin stops.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
text: |-
DRA: fixed a deadlock when an `ErrorHandler` calls `Update`, or a `kubelet` plugin's `HandleError` calls `PublishResources`, in response to pools that do not match `ReconcilePoolWithName`. Such resources now replace the desired state instead of being rejected; the other pools are reported to the error handler and are not published. Initial resources with other pools no longer cause a panic. Also fixed a deadlock when a `kubelet` plugin's `HandleError` calls `PublishResources` while the plugin stops.
text: |-
Fixed a DRA deadlock when an `ErrorHandler` calls `Update`, or a `kubelet` plugin's `HandleError` calls `PublishResources`, in response to pools that do not match `ReconcilePoolWithName`. Such resources replace the desired state instead of being rejected; the other pools are reported to the error handler and are not published. Initial resources with other pools no longer cause a panic. Also fixed a deadlock when a `kubelet` plugin's `HandleError` calls `PublishResources` while the plugin stops.

pr_body: ""
releasenote:
text: |-
Fixed `kube-apiserver` and other servers built on `k8s.io/apiserver` so they accept up to 16384 request header values. Without this, the Go 1.27 default limit of 500 header values rejects impersonated or proxied users with about 500 or more groups with HTTP 431. Releases built with Go 1.26 had no separate header-count limit.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fixed `kube-apiserver` and other servers built on `k8s.io/apiserver` so they accept up to 16384 request header values. Without this, the Go 1.27 default limit of 500 header values rejects impersonated or proxied users with about 500 or more groups with HTTP 431. Releases built with Go 1.26 had no separate header-count limit.
Fixed `kube-apiserver` and other servers built on `k8s.io/apiserver` so they accept up to 16384 request header values. Without this, the Go `v1.27` default limit of 500 header values rejects impersonated or proxied users with about 500 or more groups with HTTP 431. Releases built with Go `v1.26` had no separate header-count limit.

pr_body: ""
releasenote:
text: |-
Fixed `kubelet` so that pods with `dnsPolicy` set to Default no longer inherit scoped IPv6 link-local nameservers (for example `fe80::1%3`) from the node resolver configuration unless the pod uses the host network namespace.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fixed `kubelet` so that pods with `dnsPolicy` set to Default no longer inherit scoped IPv6 link-local nameservers (for example `fe80::1%3`) from the node resolver configuration unless the pod uses the host network namespace.
Fixed the `kubelet` so that Pods with `dnsPolicy` set to Default no longer inherit scoped IPv6 link-local nameservers (for example `fe80::1%3`) from the node resolver configuration unless the Pod uses the host network namespace.

pr_body: ""
releasenote:
text: |-
Graduated HPA `observedGeneration` to GA. The `HPAGeneration` feature gate is locked to enabled.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Graduated HPA `observedGeneration` to GA. The `HPAGeneration` feature gate is locked to enabled.
Graduated the HorizontalPodAutoscaler `observedGeneration` field to GA. The `HPAGeneration` feature gate is locked to enabled.

pr_body: ""
releasenote:
text: |-
Added support for quantum crypto keys and certs to `hack/local-up-cluster.sh` for testing.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Added support for quantum crypto keys and certs to `hack/local-up-cluster.sh` for testing.
Added support for post-quantum keys and certificates to `hack/local-up-cluster.sh` for testing.

pr_body: ""
releasenote:
text: |-
Changed validation to reject creating or updating a resource.k8s.io object with a qualified name that contains more than one slash, such as the device attribute key `a/b/c`. Objects that already store such a name remain updatable as long as the field holding it is left unchanged; for a ResourceSlice, as long as `spec.devices` is unchanged, since any change to that atomic list revalidates every device in it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Changed validation to reject creating or updating a resource.k8s.io object with a qualified name that contains more than one slash, such as the device attribute key `a/b/c`. Objects that already store such a name remain updatable as long as the field holding it is left unchanged; for a ResourceSlice, as long as `spec.devices` is unchanged, since any change to that atomic list revalidates every device in it.
Changed validation to reject creating or updating a `resource.k8s.io` object with a qualified name that contains more than one slash, such as the device attribute key `a/b/c`. Objects that already store such a name remain updatable as long as the field holding it is left unchanged; for a ResourceSlice, as long as `spec.devices` is unchanged, since any change to that atomic list revalidates every device in it.

pr_body: ""
releasenote:
text: |-
Updated node local DNS to version `1.27.1`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Updated node local DNS to version `1.27.1`.
Updated NodeLocal DNSCache to `1.27.1`.

Comment on lines +5 to +27
Fixed several bugs in the ID range handling for pods using user namespaces
(`spec.hostUsers: false`).

The `kubelet` no longer fails to start when the `kubelet` user exists but the `getsubids` binary
is not installed. It now falls back to the default ID range, as documented.

Pods are no longer assigned the ID range ending at 4294967295 (2^32-1). The kernel treats that
ID as invalid and refuses to map it, so a pod assigned that range failed to start. The default
range now ends one `idsPerPod` block lower.

ACTION REQUIRED: The `kubelet` now refuses to start if the subordinate ID range configured for the
`kubelet` user in `/etc/subuid` and `/etc/subgid` ends at or past 4294967295, since such a range
either contains the unmappable ID or extends past the end of the 32-bit ID space. Nodes
configured this way, for example `kubelet:65536:4294901760`, must reduce the count by at least
one `idsPerPod` (65536 by default) before upgrading.

ACTION REQUIRED: If a pod on the node was assigned the invalid ID range by an earlier `kubelet`,
that range is still recorded in the pod's directory, and the upgraded `kubelet` refuses to start:

create user namespace manager: record pod mappings for existing pod "<uid>": id 4294901760 is out of range

Delete any pod stuck in `ContainerCreating` with a `FailedCreatePodSandBox` event, or drain the
node, before upgrading the `kubelet`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fixed several bugs in the ID range handling for pods using user namespaces
(`spec.hostUsers: false`).
The `kubelet` no longer fails to start when the `kubelet` user exists but the `getsubids` binary
is not installed. It now falls back to the default ID range, as documented.
Pods are no longer assigned the ID range ending at 4294967295 (2^32-1). The kernel treats that
ID as invalid and refuses to map it, so a pod assigned that range failed to start. The default
range now ends one `idsPerPod` block lower.
ACTION REQUIRED: The `kubelet` now refuses to start if the subordinate ID range configured for the
`kubelet` user in `/etc/subuid` and `/etc/subgid` ends at or past 4294967295, since such a range
either contains the unmappable ID or extends past the end of the 32-bit ID space. Nodes
configured this way, for example `kubelet:65536:4294901760`, must reduce the count by at least
one `idsPerPod` (65536 by default) before upgrading.
ACTION REQUIRED: If a pod on the node was assigned the invalid ID range by an earlier `kubelet`,
that range is still recorded in the pod's directory, and the upgraded `kubelet` refuses to start:
create user namespace manager: record pod mappings for existing pod "<uid>": id 4294901760 is out of range
Delete any pod stuck in `ContainerCreating` with a `FailedCreatePodSandBox` event, or drain the
node, before upgrading the `kubelet`.
ACTION REQUIRED: Fixed several bugs in the ID range handling for Pods using user namespaces (`spec.hostUsers: false`). Before upgrading the `kubelet`:
- If the subordinate ID range for the `kubelet` user in `/etc/subuid` and `/etc/subgid` ends at or past 4294967295, for example `kubelet:65536:4294901760`, reduce the count by at least one `idsPerPod` (65536 by default). Such a range contains an ID the kernel can't map, and the `kubelet` refuses to start with it.
- Delete any Pod stuck in `ContainerCreating` with a `FailedCreatePodSandBox` event, or drain the node. An earlier `kubelet` may have assigned such a Pod the invalid range, and the upgraded `kubelet` refuses to start with `create user namespace manager: record pod mappings for existing pod "<uid>": id 4294901760 is out of range`.
The `kubelet` also no longer fails to start when the `kubelet` user exists but the `getsubids` binary is not installed; it falls back to the default ID range, as documented. Pods are no longer assigned the ID range ending at 4294967295 (2^32-1), which the kernel refuses to map, so the default range ends one `idsPerPod` block lower.

pr_body: ""
releasenote:
text: |-
Fixed the HorizontalPodAutoscaler utilization and usage calculations wrapping to a wrong or negative current value when pod metric or request totals exceeded `int64` or the utilization percentage exceeded `int32`; the reported percentage now saturates at the `int32` limit.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fixed the HorizontalPodAutoscaler utilization and usage calculations wrapping to a wrong or negative current value when pod metric or request totals exceeded `int64` or the utilization percentage exceeded `int32`; the reported percentage now saturates at the `int32` limit.
Fixed the HorizontalPodAutoscaler utilization and usage calculations wrapping to a wrong or negative current value when pod metric or request totals exceeded `int64` or the utilization percentage exceeded `int32`; the reported percentage saturates at the `int32` limit.

pr_body: ""
releasenote:
text: |-
Fixed DRA consumable capacity requests failing when the request used a fully-qualified capacity name. Requests now work with both the unqualified name, as published by drivers (typically without the driver name prefix), and the fully-qualified name. A related, less likely problem also occurred when a DRA driver changed how it published capacity after some capacity had already been allocated.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Fixed DRA consumable capacity requests failing when the request used a fully-qualified capacity name. Requests now work with both the unqualified name, as published by drivers (typically without the driver name prefix), and the fully-qualified name. A related, less likely problem also occurred when a DRA driver changed how it published capacity after some capacity had already been allocated.
Fixed DRA consumable capacity requests failing when the request used a fully-qualified capacity name. Requests work with both the unqualified name, as published by drivers (typically without the driver name prefix), and the fully-qualified name. A related, less likely problem also occurred when a DRA driver changed how it published capacity after some capacity had already been allocated.

Signed-off-by: whtssub <subhasmitaswain232@gmail.com>
@whtssub
whtssub force-pushed the release-notes-draft-v1.38.0-alpha.2 branch from 8275e8c to f669d63 Compare October 13, 2026 13:27
@Caesarsage

Caesarsage commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

/lgtm

Follow-up before alpha.3: /release-note-none on #141817, #141663, #141203 and #142395.

@kubernetes-prow kubernetes-prow Bot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Oct 13, 2026
@yashasvimisra2798

Copy link
Copy Markdown
Contributor

/lgtm

@thc1006

thc1006 commented Oct 13, 2026 •

Copy link
Copy Markdown
Member

#141203 is now marked release-note-none.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/release-team Issues or PRs related to the release-team subproject cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/documentation Categorizes issue or PR as related to documentation. lgtm "Looks good to me", indicates that a PR is ready to be merged. needs-priority sig/release Categorizes an issue or PR as relevant to SIG Release. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants