From 2509640bafcc23dd40b905cbe93a12bb7d3095d4 Mon Sep 17 00:00:00 2001 From: Dalton Hubble Date: Sun, 28 Aug 2022 09:49:28 -0700 Subject: [PATCH] Configure Graceful Node Shutdown and lengthen max inhibitor delay * Configure Kubelet Graceful Node Shutdown to detect system shutdown events and stop running containers gracefully when possible * Allow up to 30s for critical pods to gracefully shutdown * Allow up to 15s for regular pods to gracefully shutdown * Node will be marked as NotReady promptly, instead of having to wait for health checks * Kubelet uses systemd inhibitor locks to delay shutdown for a limited number of seconds * Raise the default max inhibitor time from 5s to 45s Verify systemd inhibitor locks are present: ``` sudo systemd-inhibit --list WHO UID USER PID COMM WHAT WHY MODE kubelet 0 root 4581 kubelet shutdown Kubelet needs time to handle node shutdown delay ``` Tail journal logs and then shutdown a node via systemctl reboot or via the cloud console to watch container shutdown Rel: * https://kubernetes.io/blog/2021/04/21/graceful-node-shutdown-beta/ * https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/ * https://github.com/kubernetes/kubernetes/issues/107043 * https://github.com/coreos/fedora-coreos-tracker/issues/821 * https://www.freedesktop.org/software/systemd/man/systemd-inhibit.html * https://github.com/kubernetes/kubernetes/blob/release-1.24/pkg/kubelet/nodeshutdown/nodeshutdown_manager_linux.go * https://github.com/godbus/dbus/blob/master/conn.go --- butane/controller.yaml | 7 +++++++ workers/butane/worker.yaml | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/butane/controller.yaml b/butane/controller.yaml index 98bd476..509cc92 100644 --- a/butane/controller.yaml +++ b/butane/controller.yaml @@ -148,6 +148,8 @@ storage: featureGates: LocalStorageCapacityIsolationFSQuotaMonitoring: false rotateCertificates: true + shutdownGracePeriod: 45s + shutdownGracePeriodCriticalPods: 30s staticPodPath: /etc/kubernetes/manifests readOnlyPort: 0 resolvConf: /run/systemd/resolve/resolv.conf @@ -188,6 +190,11 @@ storage: echo "Retry applying manifests" sleep 5 done + - path: /etc/systemd/logind.conf.d/inhibitors.conf + contents: + inline: | + [Login] + InhibitDelayMaxSec=45s - path: /etc/sysctl.d/max-user-watches.conf mode: 0644 contents: diff --git a/workers/butane/worker.yaml b/workers/butane/worker.yaml index 0d69a3d..1427565 100644 --- a/workers/butane/worker.yaml +++ b/workers/butane/worker.yaml @@ -116,10 +116,17 @@ storage: featureGates: LocalStorageCapacityIsolationFSQuotaMonitoring: false rotateCertificates: true + shutdownGracePeriod: 45s + shutdownGracePeriodCriticalPods: 30s staticPodPath: /etc/kubernetes/manifests readOnlyPort: 0 resolvConf: /run/systemd/resolve/resolv.conf volumePluginDir: /var/lib/kubelet/volumeplugins + - path: /etc/systemd/logind.conf.d/inhibitors.conf + contents: + inline: | + [Login] + InhibitDelayMaxSec=45s - path: /etc/sysctl.d/max-user-watches.conf mode: 0644 contents: