kubectl wait
コマンドを使用すると、1つ以上のリソースが特定の状態になるまで待つことができます。実験的なコマンドのようです。
Experimental: Wait for a specific condition on one or many resources.
たとえば、
timeout
オプションはデフォルトで 30s)をしたいとき、以下のコマンドを実行します。
kubectl wait -A --for=condition=available deployment --all --timeout=300s
manifests/jupyter-notebook at main · ymmmtym/manifests
この jupyter-notebook を作成する上記の manifest で試してみます。
deployment/jupyter-notebook
が available になるまで、300s 待つコマンドが以下になります。
kubectl wait --for=condition=available deployment/jupyter-notebook --timeout=300s
これを実行すると、プロンプトが返ってこなくなります。 この間、別のターミナルを立ち上げて、jupyter-notebook の manifest を apply してみましょう。
以下のように、available になることを確認します。
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
jupyter-notebook 1/1 1 1 63s
先ほどの、kubectl wait
を実行したターミナルに移動してみましょう。
$ kubectl wait --for=condition=available deployment/jupyter-notebook --timeout=300s
deployment.apps/jupyter-notebook condition met
$
deployment.apps/jupyter-notebook condition met
が出力され、プロンプトが返ってきていることが分かります。
簡単な例ですが、上手く使ってリソース間の依存関係の解決などに役立ちそうですね。
現時点では、後から発生するリソース(特定の Job 完了後に、Deployment が作成される等)には対応できないようなので、注意が必要です。