Sziasztok,
meg tudna valaki magyarazni, mi alapjan futnak le a kubernetes job-ok?
Van egy konyvtaram python szkriptekkel.
Hogyan lehet barmelyik inditasakor kubernetes job-ot letrehozni es lefuttatni az eredmenyt pedig egy logfile-ba irni
(mountolt pvc - ami tartalma pod delete eseten megmarad.)
Koszonom a segitseget.
Ardi
- 464 megtekintés
Hozzászólások
A Job objektum létrehozáskor fut le. A CronJob objektum pedig a cron speckó szerinti időpontokban Job objektumokat hoz létre.
Job objektumot a K8s API-n keresztül lehet létrehozni, pl.:
- kubectl paranccsal CLI-ből
- direktben a REST API meghívásával (curl, Ansible-ben kubernetes.core.k8s module, Goban kubernetes/client-go, Pythonban kubernetes module)
- ha van valami dashboardod (pl. kubernetes dashboard), akkor ott kattintva
- A hozzászóláshoz be kell jelentkezni
hmm, a felsoroltakbol az elso 2 ok.
En inkabb vmi olyasmire gondoltam, hogy python script inditasakor (mondjuk webes feluletes gomb inditasa s barmilyen mas szkript mint parameter megadasa) letrehozodik a Job objektum es vegrehajtodik az uj szkript.
Valami ilyesmire gondoltam:
https://stefanopassador.medium.com/launch-kubernetes-job-on-demand-with…
Nincs erre valami egyszerubb megoldas?
ardi
- A hozzászóláshoz be kell jelentkezni
Ahhoz, hogy K8s-en parancsot hajts vegre (pl. uj Job letrehozasa) szukseged van a hozza valo kubeconfig-ra (meg jogosultsagra ugye).
Namarmost en nem tennek semmilyen kubeconfigot egy webes alkalmazasba, hogy tudjon ezt-azt triggerelni.
- A hozzászóláshoz be kell jelentkezni
Nincs erre valami egyszerubb megoldas?
Hát úgy érted, hogy a feladat tudna-e kisebb lenni? Nyilván nem. Be lehet csomagolni az egészet egy libbe, és akkor el van hide-olva előled a komplexitás. Mellesleg, egy nagyon fontos elemet nem érint a megvalósítás: megvárni a Job lefutását és a kimenetét leszedni. Illetve kezelni a hibákat (mondjuk valamiért a Job nem indul el), és értelmesen visszajelezni.
- A hozzászóláshoz be kell jelentkezni
Hmm, kezdem kapisgalni ...
...meg gondolkodom egy picit.
Es koszonet a hozzaszolasokert.
ardi
- A hozzászóláshoz be kell jelentkezni
Hat en csinalnek egy flask API-t a k9s-en belul ami figyeli a kereseket. Amikor legut egy python scripted a vegen lesz egy request erre az API-ra. A pod-ban levo API server a megfelelo RBAC jogosultsagokkal rendelkezve aztan k9s API hivassal letrehoz egy job-ot. A log meg megy fluentdbe, logstashbe, filebeat-be akarmibe. De amugy meg ott lesz a node-on a containerlogban.
- A hozzászóláshoz be kell jelentkezni
Én is ezt csinálnám, de azt az API-t akkor valahogyan védeni kell. A job létrehozás meg feltételezi, hogy van jogosultságod piszkálni a rendszert.
Egy elmeháborodott script futtató script így is kinézhet:
- Létrehoz egy ConfigMapet, benne az összes scripttel.
- Létrehoz egy Jobot, ami mountolja a ConfigMap-et, egy mezei python image-et használ és a benne lévő parancs az, hogy futtassa a scriptet.
- Lekérdezi a Job Podját, pl. kubectl describe job vagy kubectl get po | grep
- Ha véletlenül még fut a job, akkor kubectl logs <pod> --follow
Aztán keresek egy gépet, ami nincs lezárva, és a tulajdonosának a nevében rakom fel a közös repóba a scriptet, mert le akarom tagadni 😀
- A hozzászóláshoz be kell jelentkezni
Helloka:
Van egy konyvtaram python szkriptekkel.
Hogyan lehet barmelyik inditasakor kubernetes job-ot letrehozni es lefuttatni az eredmenyt pedig egy logfile-ba irni
(mountolt pvc - ami tartalma pod delete eseten megmarad.)
Ardi
- A hozzászóláshoz be kell jelentkezni
Ja varj akkor a python scriptek a pod-on belul vannak?
Mert akkor csak megfelelo jogosultsag kell a service user meg az rbac a pod-odnak es kesz is vagyunk.
- A hozzászóláshoz be kell jelentkezni
igen - ugy nez ki, hogy egy konyvtarban van az osszes python szkript.
ard
- A hozzászóláshoz be kell jelentkezni
Olvastam, a kérdés az, hogy mi a feladat, mert ez már egy megoldás második lépése.
- A hozzászóláshoz be kell jelentkezni
igen, elegge fura dolog, hogy futatsz egy scriptet azert hogy aztan elinduljon egy job aminek kell az eredmenye es nem a scriptednek. Elegge fura. Forditva szokott ez lenni, inditunk egy jobot ami egy scriptet futtat, aminek kell az eredmenye :D
- A hozzászóláshoz be kell jelentkezni
Szerintem a gap talán ott van, hogy ez a mondat, hogy szkriptjeim vannak egy könyvtárban, k8s-ben értelmezhetetlen. k8s-ben container imagejeid, podjaid, persistent volume claimjeid, meg configmapjaid vannak.
Tehát először kell egy konténert építened ami tud python-t futtatni (vannak függőségek? -- be kell őket építeni), aztán valahogy a szkripteket bele kell varázsolni vagy a konténer image-be (build time) vagy a job által triggrelt pod-ba (configmap / PVC volume mount, run time).
A kimenetet lekérdezni az api-n keresztül tudod (amíg fut a pod) vagy valamilyen megoldással el kell mentened... fluent-bit/fluentd/valami sidecar, vagy a PVC-re lemented.
Az a gondolat, hogy a szkript önmagát k8s jobként lefutassa ... az nem tudom mire jó, nem látom a use case-t és macerás is, keveredik a control plane a runtime-mal, veszélyes kavarás.
Van a python-nak egyébként jó k8s lib-je azzal könnyen tudsz jobokat csinálni.
- A hozzászóláshoz be kell jelentkezni
- Helm chart hooks
- Időzítve
- Valamilyen esemény hatására kis segítséggel (Argo events)
egyébként mi a feladat, körülírnád?
- A hozzászóláshoz be kell jelentkezni