Service - mpifandanja entana anatiny izay mizara ny fifamoivoizana amin'ny pods;
Ingress - famaritana ny fomba hahatongavan'ny fifamoivoizana avy any ivelany mankany amin'ny serivisy.
Ity misy famintinana ara-tsary haingana:
1) Ao amin'ny Kubernetes, ny fampiharana dia mahazo fifamoivoizana avy any ivelany amin'ny alàlan'ny fifandanjana entana roa sosona: anatiny sy ivelany.
2) Ny mpifandanja anatiny dia antsoina hoe Service, ny ivelany dia antsoina hoe Ingress.
3) Ny fametrahana dia mamorona pods ary manara-maso azy ireo (tsy natao tanana izy ireo).
Aleo atao hoe te-hametraka fampiharana tsotra a la ianao Bonjour Monde. Ny fandrindrana YAML ho azy dia ho toy izao:
Ny famaritana dia somary lava ary mora ny sahiran-tsaina momba ny fifandraisan'ny singa tsirairay.
Ohatra:
Rahoviana ianao no tokony hampiasa port 80 ary rahoviana ianao no tokony hampiasa 8080?
Tokony hamorona seranan-tsambo vaovao ho an'ny serivisy tsirairay ve aho mba tsy hifandona?
Zava-dehibe ve ny anarana etikety? Tokony hitovy ve izy ireo na aiza na aiza?
Alohan'ny hifantohana amin'ny debugging, andeha hotadidintsika ny fifandraisan'ireo singa telo ireo. Andeha isika hanomboka amin'ny Deployment sy Service.
Fifandraisana eo amin'ny fandefasana sy serivisy
Ho gaga ianao, saingy tsy mifandray amin'ny fomba rehetra ny Deployments and Services. Raha ny tokony ho izy, dia manondro mivantana amin'ny Pods ny serivisy, miala amin'ny Deployment.
Noho izany, mahaliana anay ny fomba ifandraisan'ny Pods sy Services. Zavatra telo tokony hotsaroana:
Selector (selector) ho an'ny Serivisy dia tsy maintsy mifanaraka amin'ny mari-pamantarana Pod iray farafahakeliny.
targetPort tsy maintsy mifanandrify containerPort fitoeran-javatra ao anaty Pod.
port Service dia mety ho na inona na inona. Ny serivisy samihafa dia afaka mampiasa seranana iray ihany satria manana adiresy IP samihafa izy ireo.
Следующая схема представляет все вышеперечисленное в графической форме:
1) Alaivo sary an-tsaina fa ny serivisy dia mitarika fifamoivoizana mankany amin'ny pod iray:
2) Rehefa mamorona pod ianao dia tsy maintsy mamaritra containerPort ho an'ny container tsirairay ao anaty pods:
3) Rehefa mamorona serivisy ianao dia tsy maintsy mamaritra port и targetPort. Fa iza no ampiasaina hifandraisana amin'ny kaontenera?
4) Via targetPort. Tsy maintsy mifanaraka containerPort.
5) Aleo atao hoe port 3000 no misokatra ao anaty container. Avy eo ny sandany targetPort tokony ho mitovy.
Ao amin'ny rakitra YAML, etikety sy ports / targetPort tsy maintsy mifanandrify:
Ahoana ny momba ny etikety track: canary eo an-tampon'ny fizarana Deployment? Tokony hifanaraka ve izany?
Ity mari-pamantarana ity dia manokana amin'ny fametrahana ary tsy ampiasain'ny serivisy hanodina ny fifamoivoizana. Amin'ny teny hafa dia azo esorina na omena sanda hafa izany.
Azonao atao ny manamarina ny etikety pod miaraka amin'ity baiko manaraka ity:
kubectl get pods --show-labels
Na, raha an'ny fampiharana maromaro ny pods:
kubectl get pods --selector any-name=my-app --show-labels
izay any-name=my-app dia etikety any-name: my-app.
Mbola misy olana ve?
Afaka mifandray amin'ny pod ianao! Mba hanaovana izany dia mila mampiasa ny baiko ianao port-forward amin'ny kubectl. Izany dia ahafahanao mifandray amin'ny serivisy ary manamarina ny fifandraisana.
3000 no seranan-tsambo mila sokafana amin'ny solosaina;
80 - seranan-tsambo voalaza ao amin'ny saha port fanompoana.
Raha toa ka napetraka ny fifandraisana, dia marina ny toe-javatra.
Raha tsy mahomby ny fifandraisana dia misy olana amin'ny labels na tsy mifanaraka ny seranana.
Fifandraisana eo amin'ny serivisy sy ny Ingress
Ny dingana manaraka amin'ny fanomezana fidirana amin'ny fampiharana dia mifandraika amin'ny fametrahana Ingress. Mila mahafantatra ny fomba fitadiavana serivisy i Ingress, avy eo mitady pods ary mivantana ny fifamoivoizana mankany aminy. Ingress dia mahita ny serivisy ilaina amin'ny anarana sy ny seranana misokatra.
Ao amin'ny famaritana ny Ingress sy ny serivisy dia tsy maintsy mifanandrify ny masontsivana roa:
servicePort ao amin'ny Ingress dia tsy maintsy mifanaraka amin'ny parameter port amin'ny fanompoana;
serviceName ao amin'ny Ingress dia tsy maintsy mifanaraka amin'ny saha name amin'ny serivisy.
Ity diagram manaraka ity dia mamintina ny fifandraisana amin'ny seranana:
1) Araka ny efa fantatrao, Service dia mihaino ny sasany port:
2) Ny Ingress dia manana paramètre antsoina hoe servicePort:
3) Ity parameter ity (servicePort) dia tsy maintsy mifanaraka foana port amin'ny famaritana serivisy:
4) Raha voalaza ao amin'ny Service ny port 80, dia ilaina izany servicePort mitovy amin'ny 80 ihany koa:
Amin'ny fampiharana dia mila mitandrina ireto andalana manaraka ireto ianao:
Isaky ny mandefa fangatahana amin'ny port 3000 amin'ny solosainao ianao dia halefa any amin'ny port 80 amin'ny pod miaraka amin'ny mpanara-maso Ingress. Amin'ny fandehanana any http://localhost:3000, tokony ho hitanao ny pejy novokarin'ny fampiharana.
Famintinana ny seranan-tsambo
Ndeha hotadidintsika indray hoe iza amin'ireo seranana sy etikety tsy maintsy mifanandrify:
Tsy maintsy mifanandrify amin'ny etik'ilay pod ny mpifidy amin'ny famaritana Serivisy;
targetPort ao amin'ny famaritana Service dia tsy maintsy mifanaraka containerPort fitoeran-javatra ao anaty vilany;
port amin'ny famaritana Service dia mety ho na inona na inona. Afaka mampiasa seranan-tsambo iray ihany ny serivisy samihafa satria samy manana ny adiresy IP izy ireo;
servicePort Tsy maintsy mifanaraka ny ingress port amin'ny famaritana ny serivisy;
Ny anaran'ny serivisy dia tsy maintsy mifanaraka amin'ny saha serviceName ao amin'ny Ingress.
Mampalahelo fa tsy ampy ny mahafantatra ny fomba handrafetana tsara ny YAML configuration.
Inona no mitranga rehefa misy zavatra tsy mety?
Mety tsy manomboka ny pod na mety hianjera.
Dingana 3 hamantarana ny olan'ny fampiharana ao amin'ny Kubernetes
Alohan'ny hanombohanao debug ny fametrahanao dia mila mahafantatra tsara ny fomba fiasan'i Kubernetes ianao.
Koa satria ny fampiharana tsirairay alaina ao amin'ny K8s dia manana singa telo, dia tokony hapetraka amin'ny filaharana iray izy ireo, manomboka amin'ny farany ambany.
Voalohany dia mila mahazo antoka ianao fa miasa ny pods, avy eo ...
Jereo raha mamatsy fifamoivoizana amin'ny pods ny serivisy, ary avy eo...
Jereo raha toa ka voarindra tsara ny Ingress.
fanehoana hita maso:
1) Tokony hanomboka hitady olana hatrany amin'ny farany ambany ianao. Hamarino aloha fa misy sata ny pods Ready и Running:
2) Raha vonona ny pods (Ready), tokony ho fantatrao raha mizara fifamoivoizana eo anelanelan'ny pods ny serivisy:
3) Farany, mila mandinika ny fifandraisana misy eo amin'ny serivisy sy ny Ingress ianao:
1. Diagnostika ny pods
Amin'ny ankamaroan'ny toe-javatra, ny olana dia mifandray amin'ny pod. Ataovy azo antoka fa voatanisa ho toy ny ny pods Ready и Running. Azonao atao ny manamarina izany amin'ny alàlan'ny baiko:
kubectl get pods
NAME READY STATUS RESTARTS AGE
app1 0/1 ImagePullBackOff 0 47h
app2 0/1 Error 0 47h
app3-76f9fcd46b-xbv4k 1/1 Running 1 47h
Ao amin'ny famoahana baiko etsy ambony, ny pod farany dia voatanisa ho Running и Ready, na izany aza, tsy izany no mitranga amin'ireo roa hafa.
Ahoana no ahafantarana izay tsy nety?
Misy baiko efatra ilaina amin'ny fizahana ny pods:
Ny zava-misy dia tsy misy baiko iraisam-pirenena. Ny fitambaran'ireo dia tokony hampiasaina.
Olana mahazatra pod
Misy karazany roa ny lesoka pod: lesoka fanombohana sy lesoka amin'ny fotoana fandehanana.
Fahadisoana fanombohana:
ImagePullBackoff
ImageInspectError
ErrImagePull
ErrImageNeverPull
RegistryUnavailable
InvalidImageName
Error amin'ny fotoana fandehanana:
CrashLoopBackOff
RunContainerError
KillContainerError
VerifyNonRootError
RunInitContainerError
CreatePodSandboxError
ConfigPodSandboxError
KillPodSandboxError
SetupNetworkError
TeardownNetworkError
Ny fahadisoana sasany dia mahazatra kokoa noho ny hafa. Ireto ny sasany amin'ireo fahadisoana mahazatra indrindra sy ny fomba hamahana azy ireo.
ImagePullBackOff
Mipoitra ity hadisoana ity rehefa tsy afaka mahazo sary ho an'ny iray amin'ireo fitoeran'ny pod i Kubernetes. Ireto misy antony telo mahazatra indrindra mahatonga izany:
Ny anaran'ny sary dia diso - ohatra, nanao fahadisoana ianao, na tsy misy ilay sary;
Misy marika tsy misy nofaritana ho an'ny sary;
Ny sary dia voatahiry ao amin'ny rejisitra manokana ary tsy manana alalana hidirana azy i Kubernetes.
Ny antony roa voalohany dia mora esorina - ahitsio fotsiny ny anaran'ny sary sy ny marika. Amin'ny tranga farany, mila mampiditra ny fahazoan-dàlana ho an'ny rejisitra mihidy ao amin'ny Secret ianao ary ampio rohy ao anaty pods. Ao amin'ny antontan-taratasy Kubernetes misy ohatra ahoana no hanaovana izany.
Crash Loop Mihemotra
Kubenetes manipy fahadisoana CrashLoopBackOff, raha tsy afaka manomboka ny fitoeran-javatra. Matetika no mitranga izany rehefa:
Misy bibikely ao amin'ny fampiharana izay manakana azy tsy hivoaka;
manandrana mametraka boky tsy misy toy ny ConfigMap na Secrets;
Andramo ny mametraka boky vakiana fotsiny ho vakiana-manoratra.
Ny ekipa dia mety tsara amin'ny famakafakana ny fahadisoana toy izany kubectl describe pod <pod-name>.
Ao amin'ny fanjakana miandry ny pods
Rehefa noforonina dia mijanona ao amin'ny fanjakana ny pod Pending.
Nahoana no mitranga izany?
Ireto ny antony mety hitranga (heveriko fa mandeha tsara ny fandaharam-potoana):
Ny cluster dia tsy manana loharano ampy, toy ny hery fanodinana sy fitadidiana, hampandehanana ny pod.
Ny zavatra dia napetraka ao amin'ny namespace mety ResourceQuota ary ny famoronana pod dia hahatonga ny namespace hihoatra ny quota.
Pod dia mifamatotra amin'ny miandry PersistentVolumeClaim.
Amin'ity tranga ity, dia soso-kevitra ny hampiasa ny baiko kubectl describe ary jereo ny fizarana Events:
kubectl describe pod <pod name>
Raha misy hadisoana mifandraika amin'ny ResourceQuotas, soso-kevitra ny hijery ny logs cluster mampiasa ny baiko
kubectl get events --sort-by=.metadata.creationTimestamp
Pods dia tsy vonona
Raha voatanisa ny pod Running, fa tsy ao anaty fanjakana Ready, midika hoe manamarina ny fahavononany (fanadihadiana fahavononana) tsy mahomby.
Rehefa mitranga izany dia tsy mifandray amin'ny serivisy ny pod ary tsy misy fifamoivoizana mankany aminy. Ny tsy fahombiazan'ny fitsapana fahavononana dia vokatry ny olana amin'ny fampiharana. Amin'ity tranga ity, mba hahitana ny fahadisoana, dia mila mandinika ny fizarana Events amin'ny famoahana baiko kubectl describe.
2. Service diagnostics
Если pod’ы значатся как Running и Ready, fa mbola tsy misy valiny avy amin'ny fampiharana, tokony hojerenao ny firafitry ny serivisy.
Ny serivisy dia tompon'andraikitra amin'ny fampandehanana ny fifamoivoizana mankany amin'ny pods arakaraka ny etik'izy ireo. Noho izany, ny zavatra voalohany tokony hataonao dia ny manamarina hoe firy ny pods miasa amin'ny serivisy. Mba hanaovana izany, azonao atao ny manamarina ireo teboka farany amin'ny serivisy:
kubectl describe service <service-name> | grep Endpoints
Endpoint dia sanda roa amin'ny endrika <IP-адрес:порт>, ary fara-faharatsiny dia tsy maintsy misy mpivady toy izany ao amin'ny vokatra (izany hoe, farafaharatsiny iray pod no miasa amin'ny serivisy).
Raha fizarana Endpoins banga, safidy roa no azo atao:
tsy misy pods miaraka amin'ny etikety marina (soso-kevitra: jereo raha voafantina tsara ny namespace);
Misy lesoka ao amin'ny etikety serivisy ao amin'ny mpifidy.
Raha mahita lisitr'ireo teboka ianao nefa mbola tsy afaka miditra amin'ny fampiharana, dia ny bibikely ao amin'ny targetPort ao amin'ny famaritana serivisy.
Ahoana ny fijerena ny fiasan'ny serivisy?
Na inona na inona karazana serivisy dia azonao ampiasaina ny baiko kubectl port-forward hifandray aminy:
ny serivisy dia mizara tsara ny fifamoivoizana amin'ny pods.
Na izany aza, mbola tsy afaka mankany amin'ny fampiharana ianao.
Midika izany fa ny mpanara-maso Ingress dia mety tsy voarindra tsara. Satria ny Ingress controller dia singa fahatelo ao amin'ny cluster, dia misy fomba debugging samihafa arakaraka ny karazana azy.
Saingy alohan'ny hampiasanao fitaovana manokana hanamboarana ny Ingress dia afaka manao zavatra tena tsotra ianao. Mampiasa ny ingress serviceName и servicePort hifandray amin'ny serivisy. Mila manamarina ianao raha toa ka voarindra tsara izy ireo. Azonao atao izany amin'ny alàlan'ny baiko:
kubectl describe ingress <ingress-name>
Raha tsanganana Backend banga, be dia be ny mety hisian'ny fahadisoana config. Raha toa ka eo amin'ny toerany ny backends, saingy mbola tsy azo idirana ny fampiharana, dia mety ho mifandray amin'ny:
Ampidiro ny firafitry ny fidirana amin'ny Internet ho an'ny daholobe;
firafitry ny fidirana amin'ny cluster avy amin'ny Internet ho an'ny daholobe.
Azonao atao ny mamantatra ny olana amin'ny fotodrafitrasa amin'ny fifandraisana mivantana amin'ny pod Ingress. Mba hanaovana izany, tadiavo aloha ny pod Ingress Controller (mety ho any amin'ny sehatra hafa izy io):
Ankehitriny ny fangatahana rehetra amin'ny seranan-tsambo 3000 amin'ny solosaina dia halefa any amin'ny seranan-tsambo 80 amin'ny pod.
Mandeha ve izao?
Raha eny, ny fotodrafitrasa no olana. Ilaina ny mahafantatra tsara ny fomba fandehanan'ny fifamoivoizana mankany amin'ny cluster.
Raha tsy izany, ny olana dia ny Ingress controller.
Raha tsy azonao atao ny miasa amin'ny fanaraha-maso Ingress dia tsy maintsy amboarinao izany.
Misy karazany maro ny Ingress controllers. Ny malaza indrindra dia Nginx, HAProxy, Traefik, sns. (raha mila fanazavana fanampiny momba ny vahaolana efa misy, jereo ny fanadihadihana - eo ho eo. transl.) Tokony hijery ny torolalana famahana olana ianao ao amin'ny antontan-taratasy fanaraha-maso mifandraika amin'izany. Satria ny Ingress Nginx no mpandrindra Ingress malaza indrindra, nampidirinay tao amin'ny lahatsoratra ny toro-hevitra sasany hamahana ny olana mifandraika amin'izany.
Debugging ny Ingress Nginx controller
Ny tetikasa Ingress-nginx dia manana ofisialy plugin ho an'ny kubectl. Ekipa kubectl ingress-nginx dia azo ampiasaina amin'ny:
famakafakana ny logs, backends, certificates, sns.;
fifandraisana amin'ny Ingress;
mianatra ny configuration ankehitriny.
Ireto baiko telo manaraka ireto dia hanampy anao amin'izany:
Mariho fa amin'ny toe-javatra sasany dia mety ilainao ny mamaritra ny anaran'ny anaran'ny mpandrindra Ingress amin'ny fampiasana ny saina --namespace <name>.
famintinana
Ny famahana olana dia mety ho sarotra ny Kubernetes raha tsy fantatrao hoe aiza no hanombohana. Tokony hanatona ny olana amin'ny fomba ambany ianao: manomboka amin'ny pods, ary avy eo miroso amin'ny serivisy sy Ingress. Ny teknikan'ny debugging voalaza ato amin'ity lahatsoratra ity dia azo ampiharina amin'ny zavatra hafa, toy ny: