kubectl wait コマンドを使用すると、1つ以上のリソースが特定の状態になるまで待つことができます。実験的なコマンドのようです。

Kubectl Reference Docs

Experimental: Wait for a specific condition on one or many resources.

目次

コマンド例

たとえば、

  • すべての namespace の
  • deployment が available になるまで
  • 300 秒待つ (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 が作成される等)には対応できないようなので、注意が必要です。