From 3c5eb968d3de0d2ae45761197dbb5ec35dc18c59 Mon Sep 17 00:00:00 2001 From: Andres Morey Date: Tue, 3 Aug 2021 16:45:38 +0300 Subject: [PATCH] Add `reboot-delay` command line argument Currently, kured issues the system reboot command immediately after kubectl drain finishes. This is a problem for processes that need extra time to finish but aren't running on pods and therefore aren't controlled by kubectl drain (e.g. de-registering nodes from external load balancers). This patch solves the problem by introducing a `reboot-delay` command line argument that can be used to add a delay after kubectl drain finishes but before the reboot command is issued. --- cmd/kured/main.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmd/kured/main.go b/cmd/kured/main.go index 9964434..d7759f6 100644 --- a/cmd/kured/main.go +++ b/cmd/kured/main.go @@ -41,6 +41,7 @@ var ( // Command line flags forceReboot bool drainTimeout time.Duration + rebootDelay time.Duration period time.Duration drainGracePeriod int skipWaitForDeleteTimeoutSeconds int @@ -106,6 +107,8 @@ func main() { "when seconds is greater than zero, skip waiting for the pods whose deletion timestamp is older than N seconds while draining a node (default: 0)") rootCmd.PersistentFlags().DurationVar(&drainTimeout, "drain-timeout", 0, "timeout after which the drain is aborted (default: 0, infinite time)") + rootCmd.PersistentFlags().DurationVar(&rebootDelay, "reboot-delay", 0, + "delay reboot for this duration (default: 0, disabled)") rootCmd.PersistentFlags().DurationVar(&period, "period", time.Minute*60, "sentinel check period") rootCmd.PersistentFlags().StringVar(&dsNamespace, "ds-namespace", "kube-system", @@ -581,6 +584,12 @@ func rebootAsRequired(nodeID string, rebootCommand []string, sentinelCommand []s } drain(client, node) + + if rebootDelay > 0 { + log.Infof("Delaying reboot for %v", rebootDelay) + time.Sleep(rebootDelay) + } + invokeReboot(nodeID, rebootCommand) for { log.Infof("Waiting for reboot")