Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable Graceful Node Shutdown for Kubernetes >= 1.21.0 #7746

Merged
merged 2 commits into from
Jun 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ kube_proxy_nodeport_addresses: >-
## Encrypting Secret Data at Rest (experimental)
kube_encrypt_secret_data: false

# Graceful Node Shutdown (Kubernetes >= 1.21.0), see https://kubernetes.io/blog/2021/04/21/graceful-node-shutdown-beta/
# kubelet_shutdown_grace_period: 60s
# kubelet_shutdown_grace_period_critical_pods: 20s

# DNS configuration.
# Kubernetes cluster name, also will be used as DNS domain
cluster_name: cluster.local
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,7 @@ tlsCipherSuites:
{% if kubelet_event_record_qps %}
eventRecordQPS: {{ kubelet_event_record_qps }}
{% endif %}
{% if kube_version is version('v1.21.0', '>=') %}
shutdownGracePeriod: {{ kubelet_shutdown_grace_period }}
shutdownGracePeriodCriticalPods: {{ kubelet_shutdown_grace_period_critical_pods }}
{% endif %}
7 changes: 7 additions & 0 deletions roles/kubernetes/preinstall/tasks/0020-verify-settings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,13 @@
- not ignore_assert_errors
- inventory_hostname in groups['kube_node']

- name: Stop when ShutdownGracePeriod less than ShutdownGracePeriodCriticalPods
assert:
that: kubelet_shutdown_grace_period > kubelet_shutdown_grace_period_critical_pods
msg: "ShutdownGracePeriod ({{ kubelet_shutdown_grace_period }}) needs to be greater than ShutdownGracePeriodCriticalPods ({{ kubelet_shutdown_grace_period_critical_pods }}) in order to give normal pods time to be evacuated, please see https://kubernetes.io/blog/2021/04/21/graceful-node-shutdown-beta/ for details"
when:
- kube_version is version('v1.21.0', '>=')

# This assertion will fail on the safe side: One can indeed schedule more pods
# on a node than the CIDR-range has space for when additional pods use the host
# network namespace. It is impossible to ascertain the number of such pods at
Expand Down
7 changes: 7 additions & 0 deletions roles/kubespray-defaults/defaults/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,13 @@ kube_api_aggregator_routing: false
# Profiling
kube_profiling: false

# Graceful Node Shutdown
# This requires kubernetes >= 1.21.0
kubelet_shutdown_grace_period: 60s
# kubelet_shutdown_grace_period_critical_pods should be less than kubelet_shutdown_grace_period
# to give normal pods time to be gracefully evacuated
kubelet_shutdown_grace_period_critical_pods: 20s

# Container for runtime
container_manager: docker

Expand Down