2 min read | by Jordi Prats
Sometimes we need to wait for some condition to be met before continuing applying resources on the cluster (or accessing them in som way). We can use kubectl wait to block an script until some criteria is met.
We are going to use a Deployment as an example, but this can be used in any object that publishes conditions using the status field:
$ kubectl get deploy test-app -o yaml apiVersion: apps/v1 kind: Deployment (...) status: availableReplicas: 1 conditions: - lastTransitionTime: "2023-01-08T20:53:54Z" lastUpdateTime: "2023-01-08T20:53:54Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2023-01-08T19:22:25Z" lastUpdateTime: "2023-01-08T20:53:54Z" message: ReplicaSet "test-app-598df49646" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing
We can make it go to false by triggering a redeploy using kubectl rollout restart:
$ kubectl rollout restart deploy test-app
Now we can use kubectl wait for the Available condition to get back to true using the following command:
$ kubectl wait deploy/test-app --for=condition=Available --timeout=300s deployment.apps/test-app condition met
We can use any condition that gets published, for example, for strimzi's Kafka, the condition is Ready:
$ kubectl get kafka demo-cluster -o yaml apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka (...) status: clusterId: Zid7QZ2VYiPSRonYgNu55Q conditions: - lastTransitionTime: "2023-01-08T19:23:45.770737Z" status: "True" type: Ready
So the command that would wait for the cluster to become available would be:
$ kubectl wait kafka/demo-cluster --for=condition=Ready --timeout=300s kafka.kafka.strimzi.io/demo-cluster condition met
Posted on 09/01/2023