Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
ae9cb84
Mark API server errors as transient in csi raw block driver
eltrufas Aug 18, 2025
148362c
mark device manager as haelthy before it started for the first time
SergeyKanzhelev Nov 5, 2025
8cd7fd6
Update CHANGELOG/CHANGELOG-1.33.md for v1.33.6
k8s-release-robot Nov 11, 2025
d6a3548
fix: ResolverTypeProvider data race
miltosdoul Jun 2, 2025
8db5719
Merge pull request #135065 from eltrufas/automated-cherry-pick-of-#13…
k8s-ci-robot Nov 20, 2025
96673db
fix panic for the crd with status subresource but lose openAPIV3Schem…
fusida Sep 10, 2025
51020b5
Fallback to live ns lookup on admission if lister cannot find namespace
liggitt Nov 19, 2025
f55ba2c
[Manual bugfix]: unhide the etcd-join phase for v1.33
borovetsav Nov 27, 2025
46e99b7
Bump dependencies, images and versions used to Go 1.24.10 and distrol…
cpanato Nov 29, 2025
d5c5444
Merge pull request #135507 from cpanato/update-go133
k8s-ci-robot Dec 1, 2025
6c178f8
Merge pull request #135443 from lalitc375/automated-cherry-pick-of-#1…
k8s-ci-robot Dec 1, 2025
f04a447
Merge pull request #135328 from lalitc375/automated-cherry-pick-of-#1…
k8s-ci-robot Dec 2, 2025
4815a28
fix docker IP address detection for rsync
BenTheElder Dec 3, 2025
860d9cd
Merge pull request #135577 from BenTheElder/fix-rsync-1.33
k8s-ci-robot Dec 4, 2025
b4438fc
Merge pull request #135362 from fusida/automated-cherry-pick-of-#1337…
k8s-ci-robot Dec 4, 2025
15f3d2d
Merge pull request #135481 from borovetsav/fix-kubeadm-control-plane-…
k8s-ci-robot Dec 4, 2025
b6928af
Merge pull request #135208 from SergeyKanzhelev/automated-cherry-pick…
k8s-ci-robot Dec 4, 2025
45feeb6
Bump dependencies, images and versions used to Go 1.24.11 and distrol…
cpanato Dec 5, 2025
7131a9f
Merge pull request #135613 from cpanato/update-rel-133
k8s-ci-robot Dec 5, 2025
a7245cd
Release commit for Kubernetes v1.33.7
k8s-release-robot Dec 9, 2025
5504867
Merge tag 'v1.33.7' into bump-1.33.7
kevinrizza Dec 18, 2025
5ec3c9c
UPSTREAM: <drop>: hack/update-vendor.sh, make update and update image
kevinrizza Dec 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .go-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.24.9
1.24.11
269 changes: 202 additions & 67 deletions CHANGELOG/CHANGELOG-1.33.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build/build-image/cross/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v1.33.0-go1.24.9-bullseye.0
v1.33.0-go1.24.11-bullseye.0
6 changes: 3 additions & 3 deletions build/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ readonly KUBE_RSYNC_PORT="${KUBE_RSYNC_PORT:-}"
readonly KUBE_CONTAINER_RSYNC_PORT=8730

# These are the default versions (image tags) for their respective base images.
readonly __default_distroless_iptables_version=v0.7.11
readonly __default_go_runner_version=v2.4.0-go1.24.9-bookworm.0
readonly __default_distroless_iptables_version=v0.7.13
readonly __default_go_runner_version=v2.4.0-go1.24.11-bookworm.0
readonly __default_setcap_version=bookworm-v1.0.6

# These are the base images for the Docker-wrapped binaries.
Expand Down Expand Up @@ -621,7 +621,7 @@ function kube::build::start_rsyncd_container() {
fi

local container_ip
container_ip=$("${DOCKER[@]}" inspect --format '{{ .NetworkSettings.IPAddress }}' "${KUBE_RSYNC_CONTAINER_NAME}")
container_ip=$("${DOCKER[@]}" inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}},{{end}}' "${KUBE_RSYNC_CONTAINER_NAME}" | cut -d',' -f1)

# Sometimes we can reach rsync through localhost and a NAT'd port. Other
# times (when we are running in another docker container on the Jenkins
Expand Down
8 changes: 4 additions & 4 deletions build/dependencies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ dependencies:

# Golang
- name: "golang: upstream version"
version: 1.24.9
version: 1.24.11
refPaths:
- path: .go-version
- path: build/build-image/cross/VERSION
Expand All @@ -135,7 +135,7 @@ dependencies:
match: minimum_go_version=go([0-9]+\.[0-9]+)

- name: "registry.k8s.io/kube-cross: dependents"
version: v1.33.0-go1.24.9-bullseye.0
version: v1.33.0-go1.24.11-bullseye.0
refPaths:
- path: build/build-image/cross/VERSION

Expand Down Expand Up @@ -173,15 +173,15 @@ dependencies:
match: registry\.k8s\.io\/build-image\/debian-base:[a-zA-Z]+\-v((([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?)

- name: "registry.k8s.io/distroless-iptables: dependents"
version: v0.7.11
version: v0.7.13
refPaths:
- path: build/common.sh
match: __default_distroless_iptables_version=
- path: test/utils/image/manifest.go
match: configs\[DistrolessIptables\] = Config{list\.BuildImageRegistry, "distroless-iptables", "v([0-9]+)\.([0-9]+)\.([0-9]+)"}

- name: "registry.k8s.io/go-runner: dependents"
version: v2.4.0-go1.24.9-bookworm.0
version: v2.4.0-go1.24.11-bookworm.0
refPaths:
- path: build/common.sh
match: __default_go_runner_version=
Expand Down
3 changes: 0 additions & 3 deletions cmd/kubeadm/app/cmd/phases/join/controlplanejoin.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,6 @@ func NewEtcdJoinPhase() workflow.Phase {
Example: etcdJoinExample,
InheritFlags: getControlPlaneJoinPhaseFlags("etcd"),
ArgsValidator: cobra.NoArgs,
// TODO: unhide this phase once ControlPlaneKubeletLocalMode goes GA:
// https://github.com/kubernetes/enhancements/issues/4471
Hidden: true,
// Only run this phase as if `ControlPlaneKubeletLocalMode` is activated.
RunIf: func(c workflow.RunData) (bool, error) {
return checkFeatureState(c, features.ControlPlaneKubeletLocalMode, true)
Expand Down
2 changes: 1 addition & 1 deletion openshift-hack/images/hyperkube/Dockerfile.rhel
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ COPY --from=builder /tmp/build/* /usr/bin/
LABEL io.k8s.display-name="OpenShift Kubernetes Server Commands" \
io.k8s.description="OpenShift is a platform for developing, building, and deploying containerized applications." \
io.openshift.tags="openshift,hyperkube" \
io.openshift.build.versions="kubernetes=1.33.6"
io.openshift.build.versions="kubernetes=1.33.7"
21 changes: 11 additions & 10 deletions pkg/kubelet/cm/devicemanager/plugin/v1beta1/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ type server struct {
chandler ClientHandler
clients map[string]Client

// isStarted indicates whether the service has started successfully.
isStarted bool
// lastError records the last runtime error. A server is considered healthy till an actual error occurs.
lastError error
}

// NewServer returns an initialized device plugin registration server.
Expand Down Expand Up @@ -117,7 +117,7 @@ func (s *server) Start() error {
defer s.wg.Done()
s.setHealthy()
if err = s.grpc.Serve(ln); err != nil {
s.setUnhealthy()
s.setUnhealthy(err)
klog.ErrorS(err, "Error while serving device plugin registration grpc server")
}
}()
Expand Down Expand Up @@ -208,18 +208,19 @@ func (s *server) Name() string {
}

func (s *server) Check(_ *http.Request) error {
if s.isStarted {
return nil
}
return fmt.Errorf("device plugin registration gRPC server failed and no device plugins can register")
return s.lastError
}

// setHealthy sets the health status of the gRPC server.
func (s *server) setHealthy() {
s.isStarted = true
s.lastError = nil
}

// setUnhealthy sets the health status of the gRPC server to unhealthy.
func (s *server) setUnhealthy() {
s.isStarted = false
func (s *server) setUnhealthy(err error) {
if err == nil {
s.lastError = fmt.Errorf("device registration error: device plugin registration gRPC server failed and no device plugins can register")
return
}
s.lastError = fmt.Errorf("device registration error: device plugin registration gRPC server failed and no device plugins can register: %w", err)
}
15 changes: 7 additions & 8 deletions pkg/volume/csi/csi_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ package csi
import (
"context"
"errors"
"fmt"
"os"
"path/filepath"

Expand Down Expand Up @@ -171,8 +170,8 @@ func (m *csiBlockMapper) stageVolumeForBlock(
if csiSource.NodeStageSecretRef != nil {
nodeStageSecrets, err = getCredentialsFromSecret(m.k8s, csiSource.NodeStageSecretRef)
if err != nil {
return "", fmt.Errorf("failed to get NodeStageSecretRef %s/%s: %v",
csiSource.NodeStageSecretRef.Namespace, csiSource.NodeStageSecretRef.Name, err)
return "", volumetypes.NewTransientOperationFailure(log("failed to get NodeStageSecretRef %s/%s: %v",
csiSource.NodeStageSecretRef.Namespace, csiSource.NodeStageSecretRef.Name, err))
}
}

Expand Down Expand Up @@ -223,11 +222,11 @@ func (m *csiBlockMapper) publishVolumeForBlock(
volAttribs := csiSource.VolumeAttributes
podInfoEnabled, err := m.plugin.podInfoEnabled(string(m.driverName))
if err != nil {
return "", errors.New(log("blockMapper.publishVolumeForBlock failed to assemble volume attributes: %v", err))
return "", volumetypes.NewTransientOperationFailure(log("blockMapper.publishVolumeForBlock failed to assemble volume attributes: %v", err))
}
volumeLifecycleMode, err := m.plugin.getVolumeLifecycleMode(m.spec)
if err != nil {
return "", errors.New(log("blockMapper.publishVolumeForBlock failed to get VolumeLifecycleMode: %v", err))
return "", volumetypes.NewTransientOperationFailure(log("blockMapper.publishVolumeForBlock failed to get VolumeLifecycleMode: %v", err))
}
if podInfoEnabled {
volAttribs = mergeMap(volAttribs, getPodInfoAttrs(m.pod, volumeLifecycleMode))
Expand All @@ -237,7 +236,7 @@ func (m *csiBlockMapper) publishVolumeForBlock(
if csiSource.NodePublishSecretRef != nil {
nodePublishSecrets, err = getCredentialsFromSecret(m.k8s, csiSource.NodePublishSecretRef)
if err != nil {
return "", errors.New(log("blockMapper.publishVolumeForBlock failed to get NodePublishSecretRef %s/%s: %v",
return "", volumetypes.NewTransientOperationFailure(log("blockMapper.publishVolumeForBlock failed to get NodePublishSecretRef %s/%s: %v",
csiSource.NodePublishSecretRef.Namespace, csiSource.NodePublishSecretRef.Name, err))
}
}
Expand Down Expand Up @@ -304,7 +303,7 @@ func (m *csiBlockMapper) SetUpDevice() (string, error) {
attachID := getAttachmentName(csiSource.VolumeHandle, csiSource.Driver, nodeName)
attachment, err = m.k8s.StorageV1().VolumeAttachments().Get(context.TODO(), attachID, meta.GetOptions{})
if err != nil {
return "", errors.New(log("blockMapper.SetupDevice failed to get volume attachment [id=%v]: %v", attachID, err))
return "", volumetypes.NewTransientOperationFailure(log("blockMapper.SetupDevice failed to get volume attachment [id=%v]: %v", attachID, err))
}
}

Expand Down Expand Up @@ -366,7 +365,7 @@ func (m *csiBlockMapper) MapPodDevice() (string, error) {
attachID := getAttachmentName(csiSource.VolumeHandle, csiSource.Driver, nodeName)
attachment, err = m.k8s.StorageV1().VolumeAttachments().Get(context.TODO(), attachID, meta.GetOptions{})
if err != nil {
return "", errors.New(log("blockMapper.MapPodDevice failed to get volume attachment [id=%v]: %v", attachID, err))
return "", volumetypes.NewTransientOperationFailure(log("blockMapper.MapPodDevice failed to get volume attachment [id=%v]: %v", attachID, err))
}
}

Expand Down
41 changes: 41 additions & 0 deletions pkg/volume/csi/csi_block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package csi

import (
"context"
"errors"
"fmt"
"os"
"path/filepath"
Expand Down Expand Up @@ -491,6 +492,46 @@ func TestBlockMapperMapPodDeviceNoClientError(t *testing.T) {
}
}

func TestBlockMapperMapPodDeviceGetStageSecretsError(t *testing.T) {
transientError := volumetypes.NewTransientOperationFailure("")
plug, tmpDir := newTestPlugin(t, nil)
defer func() {
if err := os.RemoveAll(tmpDir); err != nil {
t.Error(err)
}
}()

csiMapper, _, pv, err := prepareBlockMapperTest(plug, "test-pv", t)
if err != nil {
t.Fatalf("Failed to make a new Mapper: %v", err)
}

// set a stage secret for the pv
pv.Spec.PersistentVolumeSource.CSI.NodePublishSecretRef = &api.SecretReference{
Name: "foo",
Namespace: "default",
}
pvName := pv.GetName()
nodeName := string(plug.host.GetNodeName())

csiMapper.csiClient = setupClient(t, true)

attachID := getAttachmentName(csiMapper.volumeID, string(csiMapper.driverName), nodeName)
attachment := makeTestAttachment(attachID, nodeName, pvName)
attachment.Status.Attached = true
if _, err = csiMapper.k8s.StorageV1().VolumeAttachments().Create(context.Background(), attachment, metav1.CreateOptions{}); err != nil {
t.Fatalf("failed to setup VolumeAttachment: %v", err)
}
t.Log("created attachment ", attachID)

_, err = csiMapper.MapPodDevice()
if err == nil {
t.Errorf("test should fail, but no error occurred")
} else if !errors.As(err, &transientError) {
t.Errorf("expected a transient error but got %v", err)
}
}

func TestBlockMapperTearDownDevice(t *testing.T) {
plug, tmpDir := newTestPlugin(t, nil)
defer os.RemoveAll(tmpDir)
Expand Down
Loading