使用kubectl apply或者create命令創(chuàng)建/更新部署后距淫,其pod需要時(shí)間完成創(chuàng)建/更新绞绒。
如果在CI中不等待所有pod更新完成,下一步流程很有可能使用更新前的環(huán)境榕暇。
正確方法 kubectl rollout status
根據(jù)實(shí)際情況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腳本經(jīng)過輪詢kubectl rollout status
可以很好的解決實(shí)際問題拐揭。
錯(cuò)誤方法 kubectl wait
注意kubectl wait
命令不能適用于更新部署撤蟆。
kubectl wait --for=condition=available --timeout=600s deployment/myapp -n namespace
該命令只能判斷deployment是否available,不能用來判斷rollout堂污,即available狀態(tài)的deployment家肯,很可能老的pod還在terminating,新的pod還沒創(chuàng)建好盟猖。