kubectl wait --forconditioncomplete --timeout30s
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
In Kubernetes, the kubectl wait command is a powerful tool that enables users to pause execution until a particular condition is satisfied or a timeout period elapses. It is particularly useful for scripting and automation as it can ensure that certain prerequisites are in place before proceeding with subsequent commands. A common use case is waiting for a Job or Pod to reach a "completed" state, ensuring that they have finished execution before moving on.
Understanding kubectl wait --for=condition=complete
What is kubectl wait?
kubectl wait is a command that checks the status of a Kubernetes resource and waits for it to meet a specified condition. This command is beneficial for scripting automation tasks that require certain resources to be in a definite state before executing further operations or triggering other workflows.
Key Options
--for: This specifies the condition that the resource needs to satisfy. Commonly used conditions arecompleteanddelete.--timeout: Defines the maximum duration to wait for the condition to be met. This is particularly useful to prevent indefinite halts in your automation scripts in case the desired condition never occurs.
Detailed Explanation: kubectl wait --for=condition=complete
When combined with --for=condition=complete, kubectl wait specifically targets the completion of a resource. The resources which commonly use this condition are Jobs and Pods. A Job or a Pod is considered "complete" when it successfully finishes execution according to the completion criteria defined in its specification.
For instance:
In this example, kubectl will wait up to 30 seconds for the Job named my-job to complete. If the job does not reach the "complete" state within the specified timeout, the command will exit with a non-zero status, indicating a failure to meet the condition within the time limit.
Example: Using kubectl wait in a Script
Consider a scenario where you have a script that creates a Job and needs to ensure it completes before further actions are taken. Below is an example of how this might look:
In this script, after creating a Job from job-definition.yaml, it waits for up to 30 seconds for the job to complete. Depending on whether the job completes in time, it proceeds or exits with an error message.
Additional Considerations
- Namespace Specification: If your Job is in a different namespace, you must specify it using
-nor--namespace. - Error Handling: Proper handling of the command's exit status is crucial in ensuring that any subsequent steps do not proceed unless the condition is met.
- Use with Other Conditions: While
completeis a common condition for Jobs and Pods, other conditions, such asreadyfor Deployments ordeletefor any resource, can be specified according to the nature of the automation task.
Summary Table
| Aspect | Description |
| Command | kubectl wait --for=condition=complete job/my-job --timeout=30s |
| Resource Type | Jobs, Pods (commonly used with complete condition) |
| Key Option | --for: Specifies the condition to wait for |
| Timeout Field | --timeout: Specifies the duration to wait for the condition
before exiting with failure |
| Success Criterion | Command exits with status 0 if the condition is met within the timeout period |
| Failure Criterion | Exits with a non-zero status if the condition is not met within the specified timeout |
| Scripting Use | Automate workflows by ensuring prerequisite conditions are met before proceeding |
Utilizing kubectl wait correctly can bring robustness to your Kubernetes automation scripts, ensuring that resources reach their desired states before any further operations are initiated.
Related reading
- kubectl YAML config file equivalent of kubectl run ... -i --tty ...
- Kubelet - failed to CreatePodSandbox for coredns; failed to set bridge addr could not add ip addr to cni0 permission denied
- kubelet does not have ClusterDNS IP configured in Microk8s
- kubelet saying node master01 not found
- kubelet won't start after kuberntes/manifest update
- Kubenetes Is it possible to hit multiple pods with a single request in Kubernetes cluster
- Kubernetes-Helm Charts pointing to a local docker image
- Kubernetes-services load balancing

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.