Ngaphezu kwalokho, ngexesha elandelayo, i-WorkshopUkubuyekeza Isicelo sakho se-Pull ku-Kubernetes nge-GKE ne-GitHub Actions, Ngitholile inkinga elifanayo ngezikhathi ezimbili: inkonzo A kufanele inkonzo B, kodwa inkonzo A uqala ngokushesha kunoma inkonzo B, futhi inqubo ibonakale. Kule post, ngitholile inkulumo lwezinkinga zayo futhi indlela ngitholile ngezinye izixhobo efanayo.
Ukukhangisa Kubernetes
Ngingathanda kahle kubonakala kubaluleke Kubernetes. I-self-healing nature ye-Kubernetes platform kuyinto omunye izinzuzo zayo ezinkulu. Thola ukubuyekeza ama-pods ezimbili: isicelo se-Python kanye ne-PostgreSQL database.
I-application ifakwe ngokushesha kakhulu futhi usebenza ngokushesha ukuqhuma ukuxhuma ku-database. Ngesikhathi eside, i-database ikakhulukazi ngokushesha nge-database eyakhiwe; ukuxhuma kwangapheli. I-pod ikakhulukaziFailed
umoya
Ngemva kwexesha elide, Kubernetes ibhalisele isimo se-pod ye-application. Ngenxa yokungasebenzi, i-pod uqala i-pod entsha. Kulesi sikhathi, izimo ezimbili zingatholakala: i-pod ye-database ayikho, futhi i-pod iyahambe ku-quadrat one, noma iyahambisana, futhi isicelo ekugcineni uxhumene.
Ukuze kusebenze inqubo, Kubernetes inikezaUkubuyekezwaWaze:
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 30
periodSeconds: 10
Ngokusebenzisa isondlo angaphambili, Kubernetes ibheka imizuzu embalwa angu-10 ngaphambi kokufunda isimo se-pod. Uma isizukulwana, ibheka imizuzu embalwa angu-10. Ukushisa futhi ukuguqulwa 30 izikhathi ngaphambi kokuphumelela ngokuqinisekileyo.
Ungayifumana i-HTTP/health
endpoint phezulu. Kubernetes inikeza amabili exclusiveUkubuyiselwaIzinzuzo zokusebenza:httpGet
nomaexec
. Olandelayo iyatholakala izicelo web, lapho esilandelayo iyatholakala izicelo ezininzi. Lokhu kubalulekile ukuba siphinde uhlobo le-containers i-pod futhi indlela yokubuyekeza isakhiwo se-pod, uma kungenzeka. Ngingu-Expert ye-PostgreSQL, ngakho-ke ngithole isicelo yokubuyekeza isakhiwo.I-Bitnami Helm Chartizibuyekezo ezilandelayo uma isicelo:
startupProbe:
exec:
command:
- /bin/sh
- -c
- -e
- exec pg_isready -U $PG_USER -h $PG_HOST -p $PG_PORT
Qaphela ukuthi okufanayo kuyinto ukunciphisa, njengokungabikho ngokushesha igama lombhalo lombhalo futhi isitifiketi SSL.
I-start-up probe iveza izinto ngokushesha kuqhathaniswa ne-default situation uma ukuguqulwa ngokufanelekileyo. Unokufaka i-default yokuqala elide, bese i-increments engaphansi. Nokho, i-containers engaphezu kwamanani, kunzima ukuguqulwa, njengoba kufuneka abe nomdla we-expert e-containers eyisisekelo.
Kuyinto enhle ukuhlola izindlela ezintsha.
Ukubuyekezwa4x
I-Alternatives iyindlela ezihlangene ku-expecting. Ngaphezu kwalokho,WazeI-script for this. I-idea iyona elula:
ikhaya./wait-for kuyinto script eyenzelwe ukuhlangabezana nezinsizakalo ezifana ne-docker containers. Kuyinto sh kanye ne-alpine ehlanganisiwe.
ikhaya
./wait-for kuyinto script eyenzelwe ukuhlangabezana nezinsizakalo ezifana ne-docker containers. Kuyinto sh kanye ne-alpine ehlanganisiwe.
Ngiyazi indlela yokufunda i-HTTP API:
sh -c './wait-for http://my.api/health -- echo "The api is up! Let's use it"'
Yenza umsebenzi eyenziwe, kodwa lapho, kufanele ukopi script futhi manually check for updates. Ngithole, futhi le nkqubo manje inikeza isikhwama okuzenzakalelayo.
Ukubuyekezwa4xumdlalo efanayo, kodwa iyatholakala njenge-containers versioned futhi inikeza inkonzo ezininzi ezihlangene: HTTP, DNS, databases, kanye nezivakashi zebhizinisi. Lokhu kubalulekile kwami.
Yonke ithuluzi ungasebenzisa, ungasebenzisa ngaphakathiIndawo yokufakelwaWaze:
ikhayaI-Pod ingaba ama-containers eziningana ezisebenza nezinhlelo zokusebenza ngaphakathi, kodwa ingaba futhi i-init containers eyodwa noma eziningana, ezisebenza ngaphambi kokufaka ama-containers zokusebenza.
ikhayaI-Init containers iyiphi i-containers ezivamile, ngaphandle:
ikhaya
I-Init containers iyatholakala kuze kube lokugqibela. I-Init container iyatholakala ngokushesha ngaphambi kokuqala.
ikhaya
I-Pod ingaba ama-containers eziningana ezisebenza nezinhlelo zokusebenza ngaphakathi, kodwa ingaba futhi i-init containers eyodwa noma eziningana, ezisebenza ngaphambi kokufaka ama-containers zokusebenza.
I-Init containers iyiphi i-containers ezivamile, ngaphandle:
- I-Init containers iyatholakala kuze kube lokugqibela. I-Init container iyatholakala ngokushesha ngaphambi kokuqala.
Ukubonisa umzekeloPod
Kuyinto kulingana PostgreSQLDeployment
Waze:
apiVersion: v1
kind: Pod
metadata:
labels:
type: app
app: recommandations
spec:
containers:
- name: recommandations
image: recommandations:latest
envFrom:
- configMapRef:
name: postgres-config
I-application iyona-Python futhi ivula ngokushesha kakhulu. It isixazulule ukuxhuma ku-PostgreSQL database. Ngaphandle kwalokho, i-database ayikho ekugqibeleni ukuqala, ngakho-ke ukuxhuma akufanele, futhi i-Kubernetes uqala i-pod.
Thina ukuguqulwa ngeinitContainer
Ukubuyekezwa kwe-containers
apiVersion: v1
kind: Pod
metadata:
labels:
type: app
app: recommandations
spec:
initContainers:
- name: wait-for-postgres
image: atkrad/wait4x:3.1
command:
- wait4x
- postgresql
- postgres://$(DATABASE_URL)?sslmode=disable
envFrom:
- configMapRef:
name: postgres-config
containers:
- name: recommandations
image: recommandations:latest
envFrom:
- configMapRef:
name: postgres-config
Ngokusho kwangaphambili, iinitContainer
Ngemuva kwalokho, i-database iyahambisana ne-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti.recommandations
kubernetes. Kubernetes akufanele ukuguqulwaPod
Njengoba ku-setup edlule! Kufaka i-logs engaphansi kanye ne-alerts engaphansi.
Uma ukubuyekeza kwenziwa obligatory
Ukubuyekezwa okuphakeme, kodwa ungakwazi ukwenza ngaphandle kwalokho. Kwezinye izimo, ukuhambisa kubaluleke. Ngitholile ngempumelelo eminyakeni okuphakeme emaphakeme. Isikhathi esilandelayo:
- ikhaya
- I-pipeline isetshenziselwa i-manifesto ku-Kubernetes ikhaya
- Ngo-step elilandelayo, it is run the test ikhaya
- Njengoba isizinda kuqala ngaphambi kokufunda isicelo, isizinda. ikhaya
Thina siphinde ukuze backend iyatholakala ngaphambi kokuphendula. Thina usebenzisawait4x
Ukubuyekeza ukubaPod
ukuze ufumane imibuzo ngaphambi kokushicilela izifundo:
- name: Wait until the application has started
uses: addnab/docker-run-action@v3 #1
with:
image: atkrad/wait4x:latest
run: wait4x http ${{ env.BASE_URL }}/health --expect-status-code 200 #2
- ikhaya
- I-GitHub Action inikeza ukuqhuba i-containers. Ngingathanda ukulanda i-Go binary. ikhaya
- Ukubuyekeza kuze kube /health endpoint ukuguqulwa 200 isivumelwano ikhodi. ikhaya
Ukuphakama
Kubernetes i-start-up probes iyindlela enhle yokuvimbela ukuqala okungenani lapho ufake izinsizakalo ezisebenzayo. I-alternative is a external waiting tool configured in ainitContainer
Ngathiwait4x
is a tool that can be used in other contexts. It is now part of my toolbelt.
To go further:
- ikhaya
- Ukubuyekezwa4x ikhaya
- Ngakho-ke ungenza ezinye izindawo Kubernetes? ikhaya
Okokuqala ku-A Java Geek ku-April 20th, 2025
I-Java Geek