Lub tswv yim zoo rau Kubernetes Deployment yog dov-hloov tshiab, qhov twg qee tus naj npawb ntawm cov pods tau pib nrog cov qauv tshiab ntawm cov duab. Yog tias lawv tau tsim yam tsis muaj teeb meem, cov pods nrog cov qauv qub ntawm cov duab raug txiav tawm, thiab cov pods tshiab yog tsim nyob rau tib lub sijhawm.
GitOps
Peb siv GitOps hauv qhov piv txwv no vim peb:
siv Git raws li ib qho ntawm qhov tseeb
peb siv Git Kev Ua Haujlwm rau kev tsim thiab xa tawm (tsis muaj cov lus txib uas tsis yog git tag / sib koom ua ke)
Piv Txwv:
Cia peb ua qhov kev coj ua zoo - kom muaj ib qho chaw cia rau daim ntawv thov code thiab ib qho rau kev tsim kho vaj tse.
Daim ntawv thov repository
Qhov no yog qhov yooj yim heev Python + Flask API uas rov qab teb raws li JSON. Peb yuav tsim lub pob ntawm GitlabCI thiab thawb cov txiaj ntsig mus rau Gitlab Registry. Hauv kev sau npe peb muaj ob qhov kev tso tawm sib txawv:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Qhov sib txawv ntawm lawv tsuas yog qhov hloov pauv hauv JSON cov ntaub ntawv rov qab. Peb siv daim ntawv thov no kom pom tau yooj yim li sai tau uas peb tab tom tham nrog.
Infrastructure repository
Hauv no turnip peb yuav xa tawm ntawm GitlabCI rau Kubernetes, .gitlab-ci.yml zoo li no:
Txhawm rau pib qhov kev xa tawm thawj zaug, koj tuaj yeem pib GitlabCI pipeline manually ntawm tus tswv ceg. Tom qab ntawd kubectl yuav tsum tso cov hauv qab no:
Peb pom app xa mus nrog 10 replicas thiab app-canary nrog 0. Kuj tseem muaj LoadBalancer uas peb tuaj yeem nkag tau los ntawm curl ntawm tus IP sab nraud:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Peb pom tias peb daim ntawv thov xeem tsuas yog rov qab "v1".
Peb thawb cov kev hloov pauv no mus rau qhov chaw cia khoom los ntawm qhov kev xa tawm yuav pib (ntawm GitlabCI) thiab pom qhov tshwm sim:
Peb Cov Kev Pabcuam yuav taw qhia rau ob qho kev xa tawm, txij li ob qho tib si muaj tus xaiv app. Vim Kubernetes 'default randomization, peb yuav tsum pom cov lus teb sib txawv rau ~ 10% ntawm kev thov:
Lub xeev tam sim no ntawm peb daim ntawv thov (GitOps, coj los ntawm Git raws li Ib Qhov Tseeb Ntawm Qhov Tseeb) yog qhov muaj ob qhov kev xa tawm nrog cov khoom siv ua haujlwm, ib qho rau txhua qhov version.
~ 10% ntawm cov neeg siv paub txog qhov tshiab thiab tsis txhob txwm sim nws. Tam sim no yog lub sijhawm los kuaj xyuas qhov tsis raug hauv cov cav thiab saib xyuas cov ntaub ntawv kom pom cov teeb meem.
Kauj ruam 2: Tso tawm tus tshiab version rau txhua tus neeg siv
Peb txiav txim siab tias txhua yam mus zoo thiab tam sim no peb yuav tsum tau dov tawm cov tshiab version rau txhua tus neeg siv. Ua li no peb tsuas hloov kho deploy.yaml txhim kho ib tug tshiab version ntawm daim duab thiab tus naj npawb ntawm replicas sib npaug rau 10. Nyob rau hauv deploy-canary.yaml peb teem tus naj npawb ntawm replicas rov qab rau 0. Tom qab xa mus, cov txiaj ntsig yuav ua raws li hauv qab no:
Summing txog
Rau kuv, khiav kev xa tawm manually txoj kev no yuav pab kom nkag siab yooj yim npaum li cas nws tuaj yeem teeb tsa siv k8s. Txij li thaum Kubernetes tso cai rau koj hloov kho txhua yam ntawm API, cov kauj ruam no tuaj yeem ua haujlwm los ntawm cov ntawv sau.
Lwm yam uas yuav tsum tau muab coj los siv yog qhov ntsuas nkag nkag (LoadBalancer lossis ntawm Ingress) los ntawm qhov uas tsuas yog cov ntawv tshiab tuaj yeem nkag mus. Nws tuaj yeem siv rau phau ntawv browsing.
Hauv cov ntawv yav tom ntej, peb yuav txheeb xyuas lwm cov kev daws teeb meem uas siv feem ntau ntawm peb tau ua.