Merge pull request #105571 from yuzhiquan/remove-ignore-error-flag
Remove ignore error flag for drain, and set this feature as default Kubernetes-commit: 766a7e2e00ea42d17acb7a4cc66b8d9f579bce60
This commit is contained in:
commit
cad601decb
8
go.mod
8
go.mod
|
@ -32,9 +32,9 @@ require (
|
||||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e
|
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6
|
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6
|
||||||
k8s.io/apimachinery v0.0.0-20211111072039-19377c9f105d
|
k8s.io/apimachinery v0.0.0-20211116191949-10158cf6d3ff
|
||||||
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57
|
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57
|
||||||
k8s.io/client-go v0.0.0-20211115170500-2f764f976bf2
|
k8s.io/client-go v0.0.0-20211116192514-28b1932f622b
|
||||||
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88
|
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88
|
||||||
k8s.io/component-helpers v0.0.0-20211112155227-f6f6db02ccda
|
k8s.io/component-helpers v0.0.0-20211112155227-f6f6db02ccda
|
||||||
k8s.io/klog/v2 v2.30.0
|
k8s.io/klog/v2 v2.30.0
|
||||||
|
@ -48,9 +48,9 @@ require (
|
||||||
|
|
||||||
replace (
|
replace (
|
||||||
k8s.io/api => k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6
|
k8s.io/api => k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6
|
||||||
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20211111072039-19377c9f105d
|
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20211116191949-10158cf6d3ff
|
||||||
k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57
|
k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57
|
||||||
k8s.io/client-go => k8s.io/client-go v0.0.0-20211115170500-2f764f976bf2
|
k8s.io/client-go => k8s.io/client-go v0.0.0-20211116192514-28b1932f622b
|
||||||
k8s.io/code-generator => k8s.io/code-generator v0.0.0-20211111071655-7b5df4132daf
|
k8s.io/code-generator => k8s.io/code-generator v0.0.0-20211111071655-7b5df4132daf
|
||||||
k8s.io/component-base => k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88
|
k8s.io/component-base => k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88
|
||||||
k8s.io/component-helpers => k8s.io/component-helpers v0.0.0-20211112155227-f6f6db02ccda
|
k8s.io/component-helpers => k8s.io/component-helpers v0.0.0-20211112155227-f6f6db02ccda
|
||||||
|
|
8
go.sum
8
go.sum
|
@ -911,12 +911,12 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6 h1:/Rn6GeqmvNXzLe9ucZcuEsmdfh1n//ewpE6URUfcFaw=
|
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6 h1:/Rn6GeqmvNXzLe9ucZcuEsmdfh1n//ewpE6URUfcFaw=
|
||||||
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6/go.mod h1:E/YSMnKP4hG73T35MZ3pw2P2Hy9cFo7KBeUkEPevRjk=
|
k8s.io/api v0.0.0-20211115232129-3b96cd16e7e6/go.mod h1:E/YSMnKP4hG73T35MZ3pw2P2Hy9cFo7KBeUkEPevRjk=
|
||||||
k8s.io/apimachinery v0.0.0-20211111072039-19377c9f105d h1:rhNn3FjXMzfNpZLAQSrkW0YQoBEKl+d69o5F2Qw6ONs=
|
k8s.io/apimachinery v0.0.0-20211116191949-10158cf6d3ff h1:48ZHXvUs3bTxiEDlE97wNDgMMCRLmVdqV+/W2d7Hvpg=
|
||||||
k8s.io/apimachinery v0.0.0-20211111072039-19377c9f105d/go.mod h1:/fTTuFZJpMy6M4dc6F6QbWWj88D/Yd/ZdqJMvTIcbkE=
|
k8s.io/apimachinery v0.0.0-20211116191949-10158cf6d3ff/go.mod h1:/fTTuFZJpMy6M4dc6F6QbWWj88D/Yd/ZdqJMvTIcbkE=
|
||||||
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57 h1:FfOBlRUNisClngHiIBDEyTW5N2yEbKy1/KsNSgwYZSk=
|
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57 h1:FfOBlRUNisClngHiIBDEyTW5N2yEbKy1/KsNSgwYZSk=
|
||||||
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57/go.mod h1:aityjoTxZbPYy/7mU1LOCtwGFSCt2chNtENDPWtlOP8=
|
k8s.io/cli-runtime v0.0.0-20211113000837-3353a80fdd57/go.mod h1:aityjoTxZbPYy/7mU1LOCtwGFSCt2chNtENDPWtlOP8=
|
||||||
k8s.io/client-go v0.0.0-20211115170500-2f764f976bf2 h1:3I3Pp6AsvGX+Tkb8s8+9ayIf6LGntO2FlgbSPhyL+IU=
|
k8s.io/client-go v0.0.0-20211116192514-28b1932f622b h1:NqlLLodrwLap7Z6YVK45ynIgAUkRsS6mb3rjfTR34IE=
|
||||||
k8s.io/client-go v0.0.0-20211115170500-2f764f976bf2/go.mod h1:vbhSM158IevUkKoqIxagoDYdB9XfHacEyDtKBlug+3g=
|
k8s.io/client-go v0.0.0-20211116192514-28b1932f622b/go.mod h1:wXDqK4ut3vuSXCpI06QbVyMBvCgMy70Osa77HAmfMEM=
|
||||||
k8s.io/code-generator v0.0.0-20211111071655-7b5df4132daf/go.mod h1:elIIhU8sF9q1YQFV7vZBy0EXwIqmRQ1K0HjPRxMHdEQ=
|
k8s.io/code-generator v0.0.0-20211111071655-7b5df4132daf/go.mod h1:elIIhU8sF9q1YQFV7vZBy0EXwIqmRQ1K0HjPRxMHdEQ=
|
||||||
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88 h1:Vx0Rn2Mw8GS2IlGhN5SMRhU9WIm4jnCkruJwGZLYYGE=
|
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88 h1:Vx0Rn2Mw8GS2IlGhN5SMRhU9WIm4jnCkruJwGZLYYGE=
|
||||||
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88/go.mod h1:1FNCGI8+JFGNYTnOJidyT0C6gBaT3hZp0P5Nv/9NKr8=
|
k8s.io/component-base v0.0.0-20211115192801-2ba78dffde88/go.mod h1:1FNCGI8+JFGNYTnOJidyT0C6gBaT3hZp0P5Nv/9NKr8=
|
||||||
|
|
|
@ -192,7 +192,6 @@ func NewCmdDrain(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobr
|
||||||
}
|
}
|
||||||
cmd.Flags().BoolVar(&o.drainer.Force, "force", o.drainer.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.")
|
cmd.Flags().BoolVar(&o.drainer.Force, "force", o.drainer.Force, "Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.IgnoreAllDaemonSets, "ignore-daemonsets", o.drainer.IgnoreAllDaemonSets, "Ignore DaemonSet-managed pods.")
|
cmd.Flags().BoolVar(&o.drainer.IgnoreAllDaemonSets, "ignore-daemonsets", o.drainer.IgnoreAllDaemonSets, "Ignore DaemonSet-managed pods.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.IgnoreErrors, "ignore-errors", o.drainer.IgnoreErrors, "Ignore errors occurred between drain nodes in group.")
|
|
||||||
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-local-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-local-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
||||||
cmd.Flags().MarkDeprecated("delete-local-data", "This option is deprecated and will be deleted. Use --delete-emptydir-data.")
|
cmd.Flags().MarkDeprecated("delete-local-data", "This option is deprecated and will be deleted. Use --delete-emptydir-data.")
|
||||||
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-emptydir-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
cmd.Flags().BoolVar(&o.drainer.DeleteEmptyDirData, "delete-emptydir-data", o.drainer.DeleteEmptyDirData, "Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).")
|
||||||
|
@ -298,8 +297,9 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
drainedNodes := sets.NewString()
|
drainedNodes := sets.NewString()
|
||||||
var fatal error
|
var fatal []error
|
||||||
|
|
||||||
|
remainingNodes := []string{}
|
||||||
for _, info := range o.nodeInfos {
|
for _, info := range o.nodeInfos {
|
||||||
if err := o.deleteOrEvictPodsSimple(info); err == nil {
|
if err := o.deleteOrEvictPodsSimple(info); err == nil {
|
||||||
drainedNodes.Insert(info.Name)
|
drainedNodes.Insert(info.Name)
|
||||||
|
@ -311,34 +311,25 @@ func (o *DrainCmdOptions) RunDrain() error {
|
||||||
|
|
||||||
printObj(info.Object, o.Out)
|
printObj(info.Object, o.Out)
|
||||||
} else {
|
} else {
|
||||||
if o.drainer.IgnoreErrors && len(o.nodeInfos) > 1 {
|
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q due to error:%s, continuing command...\n", info.Name, err)
|
||||||
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q due to error:%s, continuing command...\n", info.Name, err)
|
|
||||||
continue
|
if !drainedNodes.Has(info.Name) {
|
||||||
}
|
fatal = append(fatal, err)
|
||||||
fmt.Fprintf(o.ErrOut, "DEPRECATED WARNING: Aborting the drain command in a list of nodes will be deprecated in v1.23.\n"+
|
remainingNodes = append(remainingNodes, info.Name)
|
||||||
"The new behavior will make the drain command go through all nodes even if one or more nodes failed during the drain.\n"+
|
|
||||||
"For now, users can try such experience via: --ignore-errors\n")
|
|
||||||
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q, aborting command...\n\n", info.Name)
|
|
||||||
remainingNodes := []string{}
|
|
||||||
fatal = err
|
|
||||||
for _, remainingInfo := range o.nodeInfos {
|
|
||||||
if drainedNodes.Has(remainingInfo.Name) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
remainingNodes = append(remainingNodes, remainingInfo.Name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(remainingNodes) > 0 {
|
continue
|
||||||
fmt.Fprintf(o.ErrOut, "There are pending nodes to be drained:\n")
|
|
||||||
for _, nodeName := range remainingNodes {
|
|
||||||
fmt.Fprintf(o.ErrOut, " %s\n", nodeName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return fatal
|
if len(remainingNodes) > 0 {
|
||||||
|
fmt.Fprintf(o.ErrOut, "There are pending nodes to be drained:\n")
|
||||||
|
for _, nodeName := range remainingNodes {
|
||||||
|
fmt.Fprintf(o.ErrOut, " %s\n", nodeName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return utilerrors.NewAggregate(fatal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *DrainCmdOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error {
|
func (o *DrainCmdOptions) deleteOrEvictPodsSimple(nodeInfo *resource.Info) error {
|
||||||
|
|
|
@ -59,7 +59,6 @@ type Helper struct {
|
||||||
GracePeriodSeconds int
|
GracePeriodSeconds int
|
||||||
|
|
||||||
IgnoreAllDaemonSets bool
|
IgnoreAllDaemonSets bool
|
||||||
IgnoreErrors bool
|
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
DeleteEmptyDirData bool
|
DeleteEmptyDirData bool
|
||||||
Selector string
|
Selector string
|
||||||
|
|
Loading…
Reference in New Issue