As I prepare for the Certified Kubernetes Application Developer exam, I’m looking for every possible way to shave time off the tasks at hand. One of the things that’s annoyed me when trying to move quickly from task to task is the delay in waiting for resources to be killed off.
One of the things you need to take into consideration is that Kubernetes resources have a default grace period (30 seconds).
Let’s take a look at the time it takes (your numbers will vary) to kill your average pod. We’ll use the time
command to capture the numbers. In this example, I’ve created a simple pod running nginx. I’m also efficient and I have kubectl
aliased to k
.
$ time k delete po nginx pod "nginx" deleted real 0m13.416s user 0m0.080s sys 0m0.008s
Now let’s run the same command using the --now
flag to tell kubectl
that we want to set the grace period to 1.
$ time k delete po nginx --now pod "nginx" deleted real 0m2.012s user 0m0.080s sys 0m0.000s
In this example (and several other tests), I was able to reduce the time by 10 or more seconds each run. Now, if you’re really in a hurry, and don’t care about waiting at all, you can take it one step further. Be forewarned (and the command will warn you as well) that Kubernetes won’t confirm that the pod was terminated and may remain running. We can set the grace period to 0 and force the deletion.
$ time k delete po nginx --grace-period=0 --force=true warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely. pod "nginx" force deleted real 0m0.094s user 0m0.064s sys 0m0.020s