Kubernetes等待部署完成 kubectl wait rollout

字数 212阅读 232

使用kubectl apply或者create命令创建/更新部署后,其pod需要时间完成创建/更新。
如果在CI中不等待所有pod更新完成,下一步流程很有可能使用更新前的环境。

正确方法 kubectl rollout status

根据实际情况kubectl rollout status命令,能够正确的获取rollout status。

ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl rollout status deployment/myapp -n namespace"
until $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 60 ]; do
  $ROLLOUT_STATUS_CMD
  ATTEMPTS=$((attempts + 1))
  sleep 10
done

以上shell脚本经过轮询kubectl rollout status可以很好的解决实际问题。

错误方法 kubectl wait

注意kubectl wait命令不能适用于更新部署。

kubectl wait --for=condition=available --timeout=600s deployment/myapp -n namespace

该命令只能判断deployment是否available,不能用来判断rollout,即available状态的deployment,很可能老的pod还在terminating,新的pod还没创建好。

references