Nota. transl.: Hic articulus est pars materiae projectae in dominico publico edito learnk8ssocietates instituebat ac singulos administratores Kubernetes laborabat. In ea, Daniele Polencic, procurator project, instructiones visualium communicat quibus gradibus sumendi in causa problematum generalium cum applicationibus in botrum K8s currentibus.
TL;DR: hic est schemate quod adiuvabit te debug instruere in Kubernetes:
Flowchart de inveniendis et defixionibus mendis in Botr. Originale (Anglice) is available at PDF ΠΈ ut picturam.
Cum applicatio ad Kubernetes disponitur, tria sunt de more partium quae definire debes:
instruere - Recipe hoc genus ad exemplaria conficienda applicationis, quae siliquae dicuntur;
obsequium - Internum onus librator qui mercaturam inter siliquas distribuit;
Ingress β descriptionem quam negotiatio ab externo mundo ad ipsum perveniet.
Hic est velox summary graphice:
1) Applicationes in Kubernetes negotiationes ab extra mundum recipiunt per duas stratas oneris librarios: internum et externum.
2) Librarius internus servitii appellatur, externus ingressus appellatur.
3) Instruere siliquas et monitores (non sunt manually creata).
Dicamus vis simplex applicationis la . explicandi salve Orbis Terrarum. Configuratio YAML eius erit hoc simile:
service/<service name> β nomen muneris; apud nos est my-service;
3000 portus est qui in computatorio aperiendus est;
80 - portum specificum in agro port servitutis.
Si nexus instituitur, tunc uncinis recti sunt.
Si nexus deficiat, quaestio cum pittaciis vel portubus non congruunt.
Necessitudo inter ipsum et Ingress
Proximum est ut accessum praebeat applicationi ad erigendum Ingress. Ingressus debet scire quomodo servitium inveniat, deinde siliquas inveniat et negotiatio eis dirigat. Ingressus invenit servitutem debitam nominatim et portum apertum.
In descriptione Ingress et servitii duo parametri inserere debent:
servicePort in Ingress est inserere parametri port in Service;
serviceName In Ingres est inserere agri name in servicium.
Sequens tabula summat hospites portus:
I) Ut iam nostis, Service audit quemdam port:
II) Ingress habet modulum nomine servicePort:
III) hic modulus (servicePort) Semper congruit port in servitii definitione:
4) Si portus 80 in Service specificatur, necesse est servicePort etiam = 80;
Quotiens nunc rogationem mittis ut 3000 in computatrum tuum portum mittas, transmittantur ad portum 80 folliculi cum Ingress moderatoris. Per ad http://localhost:3000, paginam per applicationem generatam videre debes.
Summa portuum
Meminerimus iterum quibus portus et pittacia inserere debent;
Lector in definitione servitii debet pittacium vasculi inserere;
targetPort in definitione Service est inserere containerPort vas intus vasculum;
port in definitione servitii aliquid esse potest. Diversa officia eodem portu uti possunt quia diversas IP inscriptiones habent;
servicePort Ingressus est inserere port in definitione servitii;
Ministerium nomen agri inserere debet serviceName in Ingress.
Infeliciter, non satis est scire quomodo conformationem quandam YAML configurationis.
Quid accidit cum rebus peccatur?
Vasculum non incipiet aut fragore potest.
3 Gradus ad Diagnose Applicationem Problematum in Kubernetes
Priusquam incipias debugging tuam instruere, debes habere bonam intelligentiam quomodo opera Kubernetes.
Quaelibet applicatio, quae in K8s habet, tria habet, certo ordine deprimi debent, ab imo incipientes.
Primum opus fac ut siliquae laborant, deinde...
Reprehendo si ministerium commeatus siliquis mercaturis, deinde...
Reprehendo si Ingress configuratur recte.
Visual repraesentatio:
1) Incipere debes problemata ab ipso fundo. Primum reprehendo quod siliquae habent status Ready ΠΈ Running:
II) si siliquae paratae sunt (Ready) , explorare debetis utrum servitium distribuat negotiationis inter siliquas:
3) Denique nexum inter ministerium et Ingressum resolvere debes:
1. Diagnostica siliquae
Pleraque quaestio ad vasculum refertur. Fac siliquae quae enumerantur Ready ΠΈ Running. Potes hoc uti mandato:
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
In imperio output supra, ultimum vasculum as . ponitur Running ΠΈ Readyhoc autem non contingit in aliis duobus.
Quomodo intellegi quid erravit?
Siliquae diagnoscendi praecepta utilia sunt quattuor:
kubectl logs <ΠΈΠΌΡ pod'Π°> permittit tibi ligna de vasculis extrahere in vasculo;
kubectl describe pod <ΠΈΠΌΡ pod'Π°> sino te rerum gestarum cum vasculo inspicere;
kubectl get pod <ΠΈΠΌΡ pod'Π°> sino te ut YAML configurationem vasculi in Kubernetis conditum obtinere;
kubectl exec -ti <ΠΈΠΌΡ pod'Π°> bash sino vos mittere an interactive imperium testa in uno vasculi vasculi
Quod quid vis?
Sed contra est quod non est mandatum universale. Horum coniunctio utendum est.
Typical pod problems
Sunt duo genera errorum podagra: startup errores et errores runtime.
Satus errores:
ImagePullBackoff
ImageInspectError
ErrImagePull
ErrImageNeverPull
RegistryUnavailable
InvalidImageName
Errores runtime;
CrashLoopBackOff
RunContainerError
KillContainerError
VerifyNonRootError
RunInitContainerError
CreatePodSandboxError
ConfigPodSandboxError
KillPodSandboxError
SetupNetworkError
TeardownNetworkError
Quidam errores aliis sunt communiores. Hic sunt aliquot errores frequentissimi, et quomodo defigantur.
ImagePullBackOff
Hic error incidit cum Kubernetes imaginem unius vasculi vasculi obtinere non potest. Hic sunt tres rationes frequentissimae huius rei;
Nomen imaginis falsum est, verbi gratia, errasti in ea, vel imago non est;
Tag non exsistente pro imagine definitum est;
Imago reposita est in registro privato et Kubernetes ei accessere licentiam non habet.
Duae primae rationes facile sunt ad tollendum - modo nomen imaginis et tag corrigendum. In his, documentorum opus est pro registro clauso in Secreta intrare, et nexus cum siliquis addere. In documentis Kubernetes est exemplum quomodo id fieri possit.
Crash loop Back Off
Kubenetes errat CrashLoopBackOffsi continens incipere non potest. Quod plerumque fit cum;
Conare ad ligna e continente ad cognoscendam causam deficiendi. Si difficile ad tigna accedere quia nimis cito continens restarts, sequenti imperio uti potes;
kubectl logs <pod-name> --previous
Errorem ostendit nuntii a priori incarnationis continentis.
RunContainerError
Hic error incidit cum continens non committitur. Respondet tempori antequam applicationis emittitur. Solet ex falsa occasus, exempli gratia:
conanti conscendere volumen non-exsistentem sicut ConfigMap vel Secreta;
conatum conscendere legere solum volumen legere-scribere.
Turma bene apta est ad tales errores dividendos kubectl describe pod <pod-name>.
Siliquae sunt in pendenti
Vasculum semel creatum in re publica manet Pending.
Quid hoc est?
Hic rationes possibilis sunt (sponsorium suppono denique laborat);
Botrus non habet satis facultates, ut processus virtutis et memoriae, ad currendum vasculum.
Obiectum congruis spatiis installatur ResourceQuota et creando vasculum efficiet spatium spatii ultra numerum.
Pod tenetur nibh PersistentVolumeClaim.
In hoc casu commendatur uti mandato kubectl describe deprime sectionem Events:
kubectl describe pod <pod name>
In casu de erroribus ad ResourceQuotasCommendatur videre ligna botri utens imperio
kubectl get events --sort-by=.metadata.creationTimestamp
Siliquae non sunt Promptus
Si vasculum ponitur Runningsed non est in civitate Ready, Significat promptum suum reprehendo (Probe promptum) excidit.
Cum hoc incidit, vasculum ad usum non coniungit neque ad eum negotiatio fluit. Praeparatio probationis defectum per problemata in applicatione causatur. In hoc casu, ut errorem invenias, sectionem resolvere debes Events in imperio output kubectl describe.
2. Diagnostics Service
Si siliquae quae enumerantur Running ΠΈ Readysed nihil adhuc ex applicatione responsum, ut occasus servitutis coerceas.
Officia responsales sunt ad siliquas negotiationes excitandas secundum eorum pittacia. Primum ergo opus faciendum est, quot siliquae operantur, inspicias. Ad hoc faciendum, terminos in servitio reprehendo;
kubectl describe service <service-name> | grep Endpoints
Finis est par valorum formae <IP-Π°Π΄ΡΠ΅Ρ:ΠΏΠΎΡΡ>et saltem unum tale par in output adesse debet (id est, unum saltem vasculum cum servitio.
Si sectionem Endpoins vacua sunt duo optiones possibilis;
nullae siliquae cum pittacio recto sunt (monitus: perscriptio si spatia spatiorum recte selecta sunt);
Error est in pittacia ministerio electrix.
Si index punctorum videris sed adhuc applicationem accedere non potest, verisimile reus est cimex in targetPort in servitio descriptio.
Quomodo inhibenda est officia functionis servitii?
Neglegens genus officii, imperio uti potes kubectl port-forward coniungere cum eo;
ministerium feliciter negotiationis inter siliquas distribuit.
Tamen non potes pervenire ad app.
Hoc significat Ingress moderatorem verisimile non esse recte configuratum. Cum Ingressor moderatoris tertia pars in botro componentia est, variae rationes debugging secundum suum genus sunt.
Sed antequam adhibeas instrumenta specialia ad configurandum Ingress, potes aliquid simplicissimum facere. Ingressus usus serviceName ΠΈ servicePort coniungere ad servitium. Opus est ut reprimas si recte configurantur. Hoc facere potes utens imperio;
kubectl describe ingress <ingress-name>
Si columna Backend vacua est, probabilis est altae configurationis erroris. Si posteriora sunt in loco, sed applicatio adhuc non est adeunda, quaestio potest referri ad:
Accessibilitas occasus e publico Interreti ingressus est;
botrum accessibility occasus publici interreti.
Potes cognoscere difficultates cum infrastructura coniungendo directe ad podagras Ingress. Ad hoc faciendum, primum vasculum moderatoris Ingress (fortasse in alio spatio nominali invenias);
Nunc omnes petitiones ad portum 3000 in computatrale redigendas ad 80 vasculi portum.
Nunc operatur?
Si sic, quaestio infrastructura est. Omnino explorare necesse est quomodo negotiatio ad botrum funditur.
Si non, quaestio est apud Ingress controller.
Si Ingress moderatorem laborare non potes, eam debug habebis.
Multae varietates Ingress moderatoris. In festis sunt Nginx, HAProxy, Traefik, etc. (Pro magis notitia de solutionibus existentium, vide nostra recensionem β proxime. transl.) Te referre ad ducem fermentum in documentis moderatoris pertinet. Quod Ingress Nginx est maxime popularis Ingress moderatoris, aliquas apices in articulo ad solvendas difficultates ad ipsum pertinentes includimus.
Debugging in Ingress Nginx controller
Ingress-nginx project habet officialem plugin for kubectl. Team kubectl ingress-nginx adhiberi potest:
Nota quod in quibusdam casibus recte nominare potes opus est ad Ingressorem moderatoris utendi vexillum --namespace <name>.
summary
Troubleshooting Kubernetes provocare potest si nescias ubi committitur. Quaestionem ab imo sursum semper accedere debes: siliquis incipias, et deinde ad ministerium et ingredere. Artes debugging in hoc articulo descriptos applicari possunt ad alia, ut: