在CI/CD的时候,我们有时候需要等待部署完成,pod已经正常运行后,再进入容器执行一些命令,例如laravel环境下,我们需要等pod起来后,再执行migrate。
正确的方式应该是判断status,而不是使用kubectl wait
kubectl wait --for=condition=available --timeout=600s deployment/myapp -n namespace
因为这样只能判断deployment是否OK,并不能判断容器是否OK,正确的应该是以下脚本方式
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