使用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还没创建好。