Merge pull request #128779 from alexey-gavrilov-flant/fix/kubectl-drain

kubectl: drain daemonSetFilter with other APIVersion

Kubernetes-commit: 6ed5b60f71930d51bfcf8bfa6f3506b099811318
This commit is contained in:
Kubernetes Publisher 2025-06-26 20:50:28 -07:00
commit a8c44498b7
3 changed files with 12 additions and 4 deletions

4
go.mod
View File

@ -29,7 +29,7 @@ require (
go.yaml.in/yaml/v2 v2.4.2
golang.org/x/sys v0.31.0
gopkg.in/evanphx/json-patch.v4 v4.12.0
k8s.io/api v0.0.0-20250625172519-b820fad6b1cc
k8s.io/api v0.0.0-20250626212533-a8e4c192362f
k8s.io/apimachinery v0.0.0-20250625172236-d6651abdfec8
k8s.io/cli-runtime v0.0.0-20250625180656-b24f6b404b39
k8s.io/client-go v0.0.0-20250625172911-958288110116
@ -94,3 +94,5 @@ require (
gopkg.in/yaml.v3 v3.0.1 // indirect
sigs.k8s.io/kustomize/api v0.19.0 // indirect
)
replace k8s.io/code-generator => k8s.io/code-generator v0.0.0-20250626013117-789f480fac50

4
go.sum
View File

@ -201,8 +201,8 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/api v0.0.0-20250625172519-b820fad6b1cc h1:sWQaPAV1Sz67sayzJXCBxPybdF77ISLHq5VoMYFBii8=
k8s.io/api v0.0.0-20250625172519-b820fad6b1cc/go.mod h1:LeP8EGRerQcaOFKs8aGWs2rBBrJi5ByIeqfuMPuxCPk=
k8s.io/api v0.0.0-20250626212533-a8e4c192362f h1:2YOP2vawF3nJH5bLqFqE7/FSCEvLx3DlRwzw8U9plho=
k8s.io/api v0.0.0-20250626212533-a8e4c192362f/go.mod h1:LeP8EGRerQcaOFKs8aGWs2rBBrJi5ByIeqfuMPuxCPk=
k8s.io/apimachinery v0.0.0-20250625172236-d6651abdfec8 h1:MsspBt/pf3hqgJCgzv8XGYLMuKtRIKq77uZ13QyJ/eU=
k8s.io/apimachinery v0.0.0-20250625172236-d6651abdfec8/go.mod h1:8gnN3W0XUgFL9P1KdRepAJFA98YuYViPoaUkwNZ1q70=
k8s.io/cli-runtime v0.0.0-20250625180656-b24f6b404b39 h1:xQ6t4JZwm8Jl63K9b39Rf2t3BBqvLNJAUZheO8juxMw=

View File

@ -171,6 +171,12 @@ func hasLocalStorage(pod corev1.Pod) bool {
return false
}
func isControllerRefDaemonSet(workloadRef *metav1.OwnerReference) bool {
// find if workloadRef is daemonSet
daemonSetAPIVersion, daemonSetKind := appsv1.SchemeGroupVersion.WithKind("DaemonSet").ToAPIVersionAndKind()
return workloadRef.Kind == daemonSetKind && workloadRef.APIVersion == daemonSetAPIVersion
}
func (d *Helper) daemonSetFilter(pod corev1.Pod) PodDeleteStatus {
// Note that we return false in cases where the pod is DaemonSet managed,
// regardless of flags.
@ -179,7 +185,7 @@ func (d *Helper) daemonSetFilter(pod corev1.Pod) PodDeleteStatus {
// management resource - including DaemonSet - is not found).
// Such pods will be deleted if --force is used.
controllerRef := metav1.GetControllerOf(&pod)
if controllerRef == nil || controllerRef.Kind != appsv1.SchemeGroupVersion.WithKind("DaemonSet").Kind {
if controllerRef == nil || !isControllerRefDaemonSet(controllerRef) {
return MakePodDeleteStatusOkay()
}
// Any finished pod can be removed.