Skip to content

Instantly share code, notes, and snippets.

@jmound
Last active August 7, 2023 10:33
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save jmound/ff6fa539385d1a057c82fa9fa739492e to your computer and use it in GitHub Desktop.
Save jmound/ff6fa539385d1a057c82fa9fa739492e to your computer and use it in GitHub Desktop.
Bash function to refresh all pods in all deployments by namespace
# based on the "patch deployment" strategy in this comment:
# https://github.com/kubernetes/kubernetes/issues/13488#issuecomment-372532659
# requires jq
# $1 is a valid namespace
function refresh-all-pods() {
echo
DEPLOYMENT_LIST=$(kubectl -n $1 get deployment -o json|jq -r .items[].metadata.name)
echo "Refreshing pods in all Deployments"
for deployment_name in $DEPLOYMENT_LIST ; do
TERMINATION_GRACE_PERIOD_SECONDS=$(kubectl -n $1 get deployment "$deployment_name" -o json|jq .spec.template.spec.terminationGracePeriodSeconds)
if [ "$TERMINATION_GRACE_PERIOD_SECONDS" -eq 30 ]; then
TERMINATION_GRACE_PERIOD_SECONDS='31'
else
TERMINATION_GRACE_PERIOD_SECONDS='30'
fi
patch_string="{\"spec\":{\"template\":{\"spec\":{\"terminationGracePeriodSeconds\":$TERMINATION_GRACE_PERIOD_SECONDS}}}}"
kubectl -n $1 patch deployment $deployment_name -p $patch_string
done
echo
}
refresh-all-pods $NAMESPACE
@eduardobaitello
Copy link

FWIW, Kubernetes 1.15 has now a built-in CLI command to accomplish that :)

CHANGELOG-1.15:

Created a new kubectl rollout restart command that does a rolling restart of a deployment. (#76062)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment