您好,登錄后才能下訂單哦!
網(wǎng)上很多文檔都說(shuō)deployment 配置readiness就可以實(shí)現(xiàn)無(wú)損rolling update,事實(shí)真的是這樣嗎?
最近我們?cè)谏a(chǎn)環(huán)境發(fā)現(xiàn)一個(gè)現(xiàn)象,當(dāng)deployment 定義的 replicas 實(shí)例數(shù)只有1個(gè)的時(shí)候,執(zhí)行rollingupdate 會(huì)有坑
按照官方文檔的說(shuō)明,deployment 執(zhí)行rollingupdate ?在啟動(dòng)時(shí)會(huì)先拉起新版本pod再干掉舊版本的pod,逐步將所有pod 升級(jí)成新版本
但實(shí)際測(cè)試過(guò)程中發(fā)現(xiàn),執(zhí)行rollingupdate 時(shí),舊replicas 中的pod 立馬會(huì)被干掉一個(gè),如所示:
rollingupdate 前:
root@ubuntu:~?#?kubectl?get?rs NAME?????????????????????????????????????????DESIRED???CURRENT???READY?????AGE webtest-static-test-com-56678f6856???1?????????1?????????1?????????50m
rollingupdate 中:
root@ubuntu:~?#?kubectl?get?rs NAME?????????????????????????????????????????DESIRED???CURRENT???READY?????AGE webtest-static-test-com-56678f6856???0?????????0?????????0?????????50m webtest-static-test-com-7d785c987?????1?????????1?????????0?????????25m
執(zhí)行rollingupdate 時(shí),deployment 會(huì)創(chuàng)建一個(gè)新的rs,隨即將舊rs 中的pod 干掉
可以看到這里不管新舊pod READY 的字段都是0,這里會(huì)有問(wèn)題,執(zhí)行rollingupdate 如果新版本服務(wù)啟動(dòng)比較慢(例如tomcat),那這段時(shí)間服務(wù)都不可用
rollingupdate 后:
root@ubuntu:~?#?kubectl?get?rs NAME?????????????????????????????????????????DESIRED???CURRENT???READY?????AGE webtest-static-test-com-56678f6856???1?????????1?????????1?????????50m webtest-static-test-com-7d785c987?????0?????????0?????????0?????????25m
從另外一個(gè)終端每隔1s 發(fā)起一次curl 請(qǐng)求,可以看到升級(jí)期間服務(wù)中斷:
root@ubuntu:?~?#?for?i?in?{0..99};do?curl?http://webtest-static.test.com/index.html?;echo;sleep?1;done This?is?server01?-?Version?-?2 This?is?server01?-?Version?-?2 <html> <head><title>503?Service?Temporarily?Unavailable</title></head> <body> <center><h2>503?Service?Temporarily?Unavailable</h2></center> <hr><center>nginx/1.15.8</center> </body> </html> <html> <head><title>503?Service?Temporarily?Unavailable</title></head> <body> <center><h2>503?Service?Temporarily?Unavailable</h2></center> <hr><center>nginx/1.15.8</center> </body> </html> ...?...? This?is?server01?-?Version?-?3 This?is?server01?-?Version?-?3
當(dāng)實(shí)例數(shù)(replicas 數(shù)) > 1 時(shí),rollingupdate 過(guò)程中服務(wù)不會(huì)中斷
附:deployment yaml
apiVersion:?extensions/v1beta1 kind:?Deployment metadata: ??name:?webtest-static-test-com spec: ??strategy: ????type:?RollingUpdate ????rollingUpdate: ??????maxSurge:?1 ??????maxUnavailable:?1 ??replicas:?1 ??template: ????metadata: ??????labels: ????????app:?webtest-static-test-com ????????domain:?webtest-static.test.com ????????version:?v1 ????spec: ??????imagePullSecrets: ??????-?name:?registry.cn-hangzhou.aliyuncs.com ??????containers: ??????-?name:?webtest-static-sysop-duowan-com ????????image:?registry.cn-hangzhou.aliyuncs.com/test/webtest_static:2.6 ????????command:?["/bin/bash","/data/scripts/run.sh"] ????????-?name:?DLC-WEBTEST--WEBTEST1 ??????????value:?"true" ????????ports: ????????-?containerPort:?80 ????????readinessProbe: ??????????exec: ????????????command: ????????????-?curl ????????????-?http://webtest-static.test.com/index.html ????????????-?-x ????????????-?"127.0.0.1:80" ??????????initialDelaySeconds:?20 ??????????periodSeconds:?5 ??????????successThreshold:?1 --- apiVersion:?v1 kind:?Service metadata: ??name:?webtest1-svc ??labels: ????app:?webtest-static-test-com ????test:?test1 spec: ??ports: ??-?port:?80 ????targetPort:?80 ????protocol:?TCP ????name:?http ??selector: ????app:?webtest-static-test-com
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。