Akiyesi. itumọ.: Nkan yii jẹ apakan ti awọn ohun elo akanṣe ti a tẹjade ni agbegbe gbogbo eniyan learnk8s, awọn ile-iṣẹ ikẹkọ ati awọn alakoso kọọkan lati ṣiṣẹ pẹlu Kubernetes. Ninu rẹ, Daniele Polencic, oluṣakoso iṣẹ akanṣe, pin awọn itọnisọna wiwo lori kini awọn igbesẹ lati ṣe ni ọran ti awọn iṣoro gbogbogbo pẹlu awọn ohun elo ti n ṣiṣẹ lori iṣupọ K8s.
TL; DR: eyi ni aworan atọka ti yoo ran ọ lọwọ lati ṣatunṣe imuṣiṣẹ ni Kubernetes:
Aworan sisan fun wiwa ati atunse awọn aṣiṣe ninu iṣupọ kan. Atilẹba (ni ede Gẹẹsi) wa ni PDF и bi aworan.
Nigbati o ba nlo ohun elo kan si Kubernetes, awọn paati mẹta lo wa ti o nilo lati ṣalaye:
imuṣiṣẹ - Eyi jẹ iru ohunelo fun ṣiṣẹda awọn ẹda ti ohun elo kan, ti a pe ni awọn adarọ-ese;
Service - iwọntunwọnsi fifuye inu ti o pin ijabọ laarin awọn podu;
Ingress - apejuwe ti bii ijabọ yoo gba lati ita ita si Iṣẹ naa.
Eyi ni akopọ ayaworan iyara kan:
1) Ni Kubernetes, awọn ohun elo gba ijabọ lati ita ita nipasẹ awọn ipele meji ti awọn iṣiro fifuye: inu ati ita.
2) Oniwọntunwọnsi inu ni a pe ni Iṣẹ, ti ita ni a pe ni Ingress.
3) Imuṣiṣẹ n ṣẹda awọn adarọ-ese ati ṣe abojuto wọn (wọn ko ṣẹda pẹlu ọwọ).
Jẹ ká sọ pé o fẹ lati ran awọn kan awọn ohun elo a la Kaabo World. Iṣeto YAML fun rẹ yoo dabi eyi:
service/<service name> - orukọ iṣẹ; ninu ọran tiwa o jẹ my-service;
3000 ni ibudo ti o nilo lati ṣii lori kọnputa;
80 - ibudo pato ninu awọn aaye port iṣẹ.
Ti asopọ ba ti fi idi rẹ mulẹ, lẹhinna awọn eto jẹ deede.
Ti asopọ ba kuna, iṣoro wa pẹlu awọn aami tabi awọn ibudo ko baramu.
Ibasepo laarin Service ati Ingress
Igbesẹ t’okan ni ipese iraye si ohun elo jẹ ibatan si iṣeto Ingress. Ingress nilo lati mọ bi o ṣe le wa iṣẹ kan, lẹhinna wa awọn adarọ-ese ati taara ijabọ si wọn. Ingress wa iṣẹ ti o nilo nipasẹ orukọ ati ibudo ṣiṣi.
Ninu apejuwe ti Ingress ati Iṣẹ awọn paramita meji gbọdọ baramu:
servicePort ni Ingress gbọdọ baramu paramita port ni Iṣẹ;
serviceName ni Ingress gbọdọ baramu awọn aaye name ni Service.
Aworan atẹle yii ṣe akopọ awọn asopọ ibudo:
1) Bi o ti mọ tẹlẹ, Iṣẹ tẹtisi kan pato port:
2) Ingress ni o ni a paramita ti a npe ni servicePort:
3) paramita yii (servicePort) gbọdọ nigbagbogbo baramu port ninu itumọ Iṣẹ:
4) Ti ibudo 80 ba jẹ pato ninu Iṣẹ, lẹhinna o jẹ dandan pe servicePort tun dọgba si 80:
Ni iṣe, o nilo lati san ifojusi si awọn ila wọnyi:
Bayi ni gbogbo igba ti o ba fi ibeere ranṣẹ si ibudo 3000 lori kọnputa rẹ, yoo firanṣẹ si ibudo 80 ti podu pẹlu oludari Ingress. Nipa lilọ si http://localhost:3000, o yẹ ki o wo oju-iwe ti ipilẹṣẹ nipasẹ ohun elo naa.
Akopọ ti awọn ibudo
Jẹ ki a ranti lekan si awọn ebute oko oju omi ati awọn aami gbọdọ baramu:
Oluyan ninu asọye Iṣẹ gbọdọ baramu aami podu;
targetPort ni itumo Service gbọdọ baramu containerPort apoti ti o wa ninu apo;
port ni itumo Service le jẹ ohunkohun. Awọn iṣẹ oriṣiriṣi le lo ibudo kanna nitori pe wọn ni awọn adiresi IP oriṣiriṣi;
servicePort Ingress gbọdọ baramu port ni itumọ ti Iṣẹ;
Orukọ iṣẹ gbọdọ baramu aaye naa serviceName ni Ingress.
Laanu, ko to lati mọ bi o ṣe le ṣe eto iṣeto YAML daradara.
Kini yoo ṣẹlẹ nigbati awọn nkan ba lọ aṣiṣe?
Podu le ma bẹrẹ tabi o le jamba.
Awọn igbesẹ 3 lati ṣe iwadii Awọn iṣoro Ohun elo ni Kubernetes
Ṣaaju ki o to bẹrẹ ṣiṣatunṣe imuṣiṣẹ rẹ, o nilo lati ni oye ti o dara bi Kubernetes ṣe n ṣiṣẹ.
Niwọn igba ti ohun elo kọọkan ti o gbasilẹ ni K8s ni awọn paati mẹta, wọn yẹ ki o yokokoro ni aṣẹ kan, bẹrẹ lati isalẹ pupọ.
Ni akọkọ o nilo lati rii daju pe awọn podu n ṣiṣẹ, lẹhinna ...
Ṣayẹwo boya iṣẹ naa n pese ijabọ si awọn adarọ-ese, ati lẹhinna…
Ṣayẹwo boya Ingress ti wa ni tunto ti tọ.
Aṣoju wiwo:
1) O yẹ ki o bẹrẹ wiwa awọn iṣoro lati isalẹ pupọ. Akọkọ ṣayẹwo pe awọn podu ni awọn ipo Ready и Running:
2) Ti awọn podu ba ṣetan (Ready), o yẹ ki o wa boya iṣẹ naa n pin kaakiri laarin awọn adarọ-ese:
3) Nikẹhin, o nilo lati ṣe itupalẹ asopọ laarin iṣẹ ati Ingress:
1. Aisan ti pods
Ni ọpọlọpọ igba, iṣoro naa ni ibatan si podu. Rii daju pe awọn podu ti wa ni akojọ bi Ready и Running. O le ṣayẹwo eyi nipa lilo aṣẹ:
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
Ninu iṣẹjade aṣẹ loke, adarọ-ese ti o kẹhin jẹ atokọ bi Running и Ready, sibẹsibẹ, eyi kii ṣe ọran fun awọn meji miiran.
Bawo ni lati loye ohun ti ko tọ?
Awọn ofin iwulo mẹrin wa fun ṣiṣe iwadii awọn adarọ-ese:
kubectl logs <имя pod'а> gba ọ laaye lati yọ awọn akọọlẹ jade lati awọn apoti ninu podu;
kubectl describe pod <имя pod'а> gba ọ laaye lati wo atokọ ti awọn iṣẹlẹ ti o ni nkan ṣe pẹlu podu;
kubectl get pod <имя pod'а> gba ọ laaye lati gba iṣeto YAML ti adarọ-ese ti o fipamọ sinu Kubernetes;
kubectl exec -ti <имя pod'а> bash gba ọ laaye lati ṣe ifilọlẹ ikarahun aṣẹ ibaraenisepo ninu ọkan ninu awọn apoti podu
Eyi wo ni o yẹ ki o yan?
Otitọ ni pe ko si aṣẹ agbaye. Apapo awọn wọnyi yẹ ki o lo.
Awọn iṣoro podu aṣoju
Awọn oriṣi akọkọ meji ti awọn aṣiṣe podu: awọn aṣiṣe ibẹrẹ ati awọn aṣiṣe asiko-akoko.
Awọn aṣiṣe ibẹrẹ:
ImagePullBackoff
ImageInspectError
ErrImagePull
ErrImageNeverPull
RegistryUnavailable
InvalidImageName
Awọn aṣiṣe akoko ṣiṣe:
CrashLoopBackOff
RunContainerError
KillContainerError
VerifyNonRootError
RunInitContainerError
CreatePodSandboxError
ConfigPodSandboxError
KillPodSandboxError
SetupNetworkError
TeardownNetworkError
Diẹ ninu awọn aṣiṣe jẹ wọpọ ju awọn miiran lọ. Eyi ni diẹ ninu awọn aṣiṣe ti o wọpọ julọ ati bii o ṣe le ṣatunṣe wọn.
ImagePullBackOff
Aṣiṣe yii han nigbati Kubernetes ko le gba aworan kan fun ọkan ninu awọn apoti podu. Eyi ni awọn idi mẹta ti o wọpọ julọ fun eyi:
Orukọ aworan naa ko tọ - fun apẹẹrẹ, o ṣe aṣiṣe ninu rẹ, tabi aworan ko si;
Aami ti ko si tẹlẹ ni pato fun aworan naa;
Aworan naa wa ni ipamọ sinu iforukọsilẹ ikọkọ ati pe Kubernetes ko ni igbanilaaye lati wọle si.
Awọn idi meji akọkọ jẹ rọrun lati yọkuro - o kan ṣe atunṣe orukọ aworan ati tag. Ninu ọran ti igbehin, o nilo lati tẹ awọn iwe-ẹri fun iforukọsilẹ pipade ni Aṣiri ati ṣafikun awọn ọna asopọ si rẹ ni awọn adarọ-ese. Ninu iwe Kubernetes apẹẹrẹ kan wa bawo ni eyi ṣe le ṣe.
Yipo jamba Pada
Kubenetes jabọ aṣiṣe CrashLoopBackOff, ti apoti ko ba le bẹrẹ. Eyi maa n ṣẹlẹ nigbati:
Kokoro kan wa ninu ohun elo ti o ṣe idiwọ fun ifilọlẹ;
O gbọdọ gbiyanju lati lọ si awọn akọọlẹ lati inu apoti lati wa idi ti ikuna rẹ. Ti o ba ṣoro lati wọle si awọn akọọlẹ nitori apoti naa tun bẹrẹ ni yarayara, o le lo aṣẹ atẹle:
kubectl logs <pod-name> --previous
O ṣe afihan awọn ifiranṣẹ aṣiṣe lati inu isọdi iṣaaju ti eiyan naa.
RunContainer Error
Yi aṣiṣe waye nigbati awọn eiyan kuna lati bẹrẹ. O ni ibamu si akoko ṣaaju ifilọlẹ ohun elo naa. O maa n ṣẹlẹ nipasẹ awọn eto ti ko tọ, fun apẹẹrẹ:
igbiyanju lati gbe iwọn didun ti ko si tẹlẹ gẹgẹbi ConfigMap tabi Awọn Aṣiri;
igbiyanju lati gbe iwọn didun kika-nikan bi kika-kikọ.
Ẹgbẹ naa dara daradara fun itupalẹ iru awọn aṣiṣe kubectl describe pod <pod-name>.
Pods wa ni isunmọtosi ni ipinle
Ni kete ti a ṣẹda, podu naa wa ni ipinlẹ naa Pending.
Kini idi ti eyi fi ṣẹlẹ?
Eyi ni awọn idi ti o ṣeeṣe (Mo ro pe oluṣeto n ṣiṣẹ daradara):
Iṣupọ naa ko ni awọn orisun ti o to, gẹgẹbi agbara sisẹ ati iranti, lati ṣiṣẹ podu naa.
Ohun naa ti fi sii ni aaye orukọ ti o yẹ ResourceQuota ati ṣiṣẹda adarọ-ese yoo jẹ ki aaye orukọ lọ kọja ipin.
Pod ti wa ni owun si isunmọtosi PersistentVolumeClaim.
Ni idi eyi, o niyanju lati lo aṣẹ naa kubectl describe ati ki o ṣayẹwo awọn apakan Events:
kubectl describe pod <pod name>
Ni irú ti awọn aṣiṣe jẹmọ si ResourceQuotas, a ṣe iṣeduro lati wo awọn akọọlẹ iṣupọ nipa lilo aṣẹ naa
kubectl get events --sort-by=.metadata.creationTimestamp
Pods ko Ṣetan
Ti o ba ti podu ti wa ni akojọ si bi Running, ṣugbọn kii ṣe ni ipo kan Ready, tumo si ṣiṣe ayẹwo imurasilẹ rẹ (iwadii imurasilẹ) kuna.
Nigbati eyi ba ṣẹlẹ, adarọ-ese ko ni sopọ si iṣẹ naa ko si si ṣiṣanwọle si rẹ. Ikuna idanwo imurasilẹ jẹ idi nipasẹ awọn iṣoro ninu ohun elo naa. Ni idi eyi, lati wa aṣiṣe, o nilo lati ṣe itupalẹ apakan naa Events ninu awọn pipaṣẹ o wu kubectl describe.
2. Awọn ayẹwo iṣẹ
Ti o ba ti podu ti wa ni akojọ si bi Running и Ready, ṣugbọn ko si esi lati inu ohun elo naa, o yẹ ki o ṣayẹwo awọn eto iṣẹ naa.
Awọn iṣẹ jẹ iduro fun ipa-ọna ipa-ọna si awọn adarọ-ese da lori awọn aami wọn. Nitorinaa, ohun akọkọ ti o nilo lati ṣe ni ṣayẹwo iye awọn adarọ-ese ti n ṣiṣẹ pẹlu iṣẹ naa. Lati ṣe eyi, o le ṣayẹwo awọn aaye ipari ninu iṣẹ naa:
kubectl describe service <service-name> | grep Endpoints
Endpoint jẹ bata ti awọn iye ti fọọmu naa <IP-адрес:порт>, ati pe o kere ju iru bata kan gbọdọ wa ninu iṣelọpọ (iyẹn, o kere ju podu kan ṣiṣẹ pẹlu iṣẹ naa).
Ti apakan Endpoins ofo, awọn aṣayan meji ṣee ṣe:
ko si awọn adarọ-ese pẹlu aami to pe (itọkasi: ṣayẹwo ti o ba yan aaye orukọ daradara);
Aṣiṣe wa ninu awọn aami iṣẹ ni oluyan.
Ti o ba rii atokọ ti awọn aaye ipari ṣugbọn ko le wọle si ohun elo naa, lẹhinna o ṣeeṣe pe o jẹbi jẹ aṣiṣe ninu targetPort ni apejuwe iṣẹ.
Bii o ṣe le ṣayẹwo iṣẹ ṣiṣe ti iṣẹ naa?
Laibikita iru iṣẹ naa, o le lo aṣẹ naa kubectl port-forward lati sopọ si rẹ:
Eyi tumọ si pe oludari Ingress jẹ eyiti o ṣeese ko ni tunto ni deede. Niwọn igba ti oludari Ingress jẹ paati ẹnikẹta ninu iṣupọ, awọn ọna n ṣatunṣe aṣiṣe oriṣiriṣi wa ti o da lori iru rẹ.
Ṣugbọn ṣaaju ki o to lo awọn irinṣẹ pataki lati tunto Ingress, o le ṣe nkan ti o rọrun pupọ. Ingress nlo serviceName и servicePort lati sopọ si iṣẹ naa. O nilo lati ṣayẹwo ti wọn ba tunto ni deede. O le ṣe eyi nipa lilo aṣẹ:
kubectl describe ingress <ingress-name>
Ti o ba ti ọwọn Backend sofo, iṣeeṣe giga kan ti aṣiṣe iṣeto ni. Ti awọn ẹhin ẹhin ba wa ni aye, ṣugbọn ohun elo ko tun wa, lẹhinna iṣoro naa le ni ibatan si:
Awọn eto iraye si ingress lati Intanẹẹti gbogbo eniyan;
awọn eto iraye si iṣupọ lati Intanẹẹti gbogbo eniyan.
O le ṣe idanimọ awọn iṣoro pẹlu awọn amayederun nipa sisopọ taara si adarọ ese Ingress. Lati ṣe eyi, kọkọ wa Podu Adarí Ingress (o le wa ni aaye orukọ ti o yatọ):
Bayi gbogbo awọn ibeere si ibudo 3000 lori kọnputa yoo darí si ibudo 80 ti podu naa.
Ṣe o ṣiṣẹ ni bayi?
Ti o ba jẹ bẹẹni, lẹhinna iṣoro naa wa pẹlu awọn amayederun. O jẹ dandan lati wa ni pato bi a ṣe n gbe ijabọ si iṣupọ naa.
Ti kii ba ṣe bẹ, lẹhinna iṣoro naa wa pẹlu oludari Ingress.
Ti o ko ba le gba oludari Ingress lati ṣiṣẹ, iwọ yoo ni lati ṣatunṣe rẹ.
Nibẹ ni o wa ọpọlọpọ awọn orisirisi ti Ingress olutona. Awọn olokiki julọ ni Nginx, HAProxy, Traefik, ati bẹbẹ lọ. (fun alaye diẹ sii nipa awọn solusan ti o wa tẹlẹ, wo wa awotẹlẹ - isunmọ. itumọ.) O yẹ ki o tọka si itọsọna laasigbotitusita ninu iwe iṣakoso ti o yẹ. Nitori awọn Ibẹrẹ Nginx jẹ oludari Ingress olokiki julọ, a ti ṣafikun diẹ ninu awọn imọran ninu nkan lati yanju awọn iṣoro ti o jọmọ rẹ.
N ṣatunṣe aṣiṣe Ingress Nginx oludari
Ise agbese Ingress-nginx ni oṣiṣẹ kan itanna fun kubectl. Egbe kubectl ingress-nginx le ṣee lo fun:
igbekale ti àkọọlẹ, backends, awọn iwe-ẹri, ati be be lo .;
Ṣe akiyesi pe ni awọn igba miiran o le nilo lati pato aaye orukọ ti o pe fun oluṣakoso Ingress nipa lilo asia --namespace <name>.
Akopọ
Laasigbotitusita Kubernetes le jẹ nija ti o ko ba mọ ibiti o bẹrẹ. O yẹ ki o sunmọ iṣoro naa nigbagbogbo ni ọna isalẹ: bẹrẹ pẹlu awọn adarọ-ese, ati lẹhinna lọ si iṣẹ ati Ingress. Awọn imọ-ẹrọ ti n ṣatunṣe aṣiṣe ti a ṣalaye ninu nkan yii le ṣee lo si awọn nkan miiran, gẹgẹbi: