Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

Piezīme. tulk.: Šis raksts ir daļa no publiskajā domēnā publicētajiem projekta materiāliem mācīties8s, apmācīt uzņēmumus un individuālos administratorus darbam ar Kubernetes. Tajā Daniele Polencic, projektu vadītāja, dalās ar vizuāliem norādījumiem par to, kādas darbības jāveic, ja rodas vispārējas problēmas ar lietojumprogrammām, kas darbojas K8s klasterī.

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

TL;DR: Å”eit ir diagramma, kas palÄ«dzēs atkļūdot izvietoÅ”anu Kubernetes:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

Blokshēma kļūdu atraÅ”anai un laboÅ”anai klasterÄ«. OriÄ£ināls (angļu valodā) ir pieejams vietnē PDF Šø kā attēls.

Izvietojot lietojumprogrammu Kubernetes, parasti ir jādefinē trīs komponenti:

  • IzvietoÅ”anas - Ŕī ir sava veida recepte, lai izveidotu lietojumprogrammas kopijas, ko sauc par pākstÄ«m;
  • Serviss ā€” iekŔējais slodzes balansētājs, kas sadala trafiku starp podiem;
  • IekļūŔana ā€” apraksts par to, kā satiksme no ārpasaules nonāks Pakalpojumā.

Šeit ir ātrs grafisks kopsavilkums:

1) Programmā Kubernetes lietojumprogrammas saņem trafiku no ārpasaules, izmantojot divus slodzes balansētāju slāņus: iekŔējo un ārējo.

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

2) IekŔējo balansētāju sauc par Service, ārējo sauc par Ingress.

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

3) IzvietoŔana rada podi un uzrauga tos (tie netiek izveidoti manuāli).

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

Pieņemsim, ka vēlaties izvietot vienkārÅ”u lietojumprogrammu a la Sveiki World. Tā YAML konfigurācija izskatÄ«sies Ŕādi:

apiVersion: apps/v1
kind: Deployment # <<<
metadata:
  name: my-deployment
  labels:
    track: canary
spec:
  selector:
    matchLabels:
      any-name: my-app
  template:
    metadata:
      labels:
        any-name: my-app
    spec:
      containers:
      - name: cont1
        image: learnk8s/app:1.0.0
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service # <<<
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress # <<<
metadata:
  name: my-ingress
spec:
  rules:
  - http:
    paths:
    - backend:
        serviceName: app
        servicePort: 80
      path: /

Definīcija ir diezgan gara, un ir viegli sajaukt, kā komponenti ir saistīti viens ar otru.

Piemēram:

  • Kad jāizmanto ports 80 un kad jāizmanto 8080?
  • Vai katram pakalpojumam jāizveido jauns ports, lai tie nebÅ«tu pretrunā?
  • Vai etiÄ·eÅ”u nosaukumiem ir nozÄ«me? Vai tiem visur jābÅ«t vienādiem?

Pirms pievērsties atkļūdoÅ”anai, atcerēsimies, kā Å”ie trÄ«s komponenti ir saistÄ«ti viens ar otru. Sāksim ar izvietoÅ”anu un apkalpoÅ”anu.

Saistība starp izvietoŔanu un pakalpojumu

Jūs būsiet pārsteigts, taču izvietoŔana un pakalpojums nekādā veidā nav saistīti. Tā vietā pakalpojums norāda tieŔi uz Pods, apejot izvietoŔanu.

Tādējādi mēs esam ieinteresēti, kā podi un pakalpojumi ir saistīti viens ar otru. Trīs lietas, kas jāatceras:

  1. Atlasītājs (selector) pakalpojumam ir jāatbilst vismaz vienai Pod etiķetei.
  2. targetPort ir jāsakrīt containerPort konteiners podā.
  3. port Pakalpojums var būt jebkas. Dažādi pakalpojumi var izmantot vienu un to paŔu portu, jo tiem ir atŔķirīgas IP adreses.

SekojoŔā diagramma attēlo visu iepriekÅ” minēto grafiskā formā:

1) Iedomājieties, ka pakalpojums novirza trafiku uz noteiktu podziņu:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

2) Veidojot podiņu, jānorāda containerPort katram konteineram pākstīs:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

3) Veidojot pakalpojumu, jānorāda port Šø targetPort. Bet kuru izmanto, lai izveidotu savienojumu ar konteineru?

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

4) caur targetPort. Tam jāsakrīt containerPort.

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

5) Pieņemsim, ka konteinerā ir atvērts ports 3000. Tad vērtība targetPort jābūt vienādam.

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

YAML failā etiķetes un ports / targetPort ir jāsakrīt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    track: canary
spec:
  selector:
    matchLabels:
      any-name: my-app
  template:
    metadata:
     labels:  # <<<
        any-name: my-app  # <<<
   spec:
      containers:
      - name: cont1
        image: learnk8s/app:1.0.0
        ports:
       - containerPort: 8080  # <<<
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - port: 80
   targetPort: 8080  # <<<
 selector:  # <<<
    any-name: my-app  # <<<

Kas par etiÄ·eti track: canary sadaļas IzvietoÅ”ana augÅ”pusē? Vai tam jāsakrÄ«t?

Å is apzÄ«mējums ir specifisks izvietoÅ”anai, un pakalpojums to neizmanto satiksmes marÅ”rutÄ“Å”anai. Citiem vārdiem sakot, to var noņemt vai pieŔķirt citu vērtÄ«bu.

Kas par atlasītāju matchLabels?

Tam vienmēr jāatbilst Pod etiÄ·etēm, jo to izmanto izvietoÅ”ana, lai izsekotu podi.

Pieņemsim, ka esat veicis pareizos labojumus. Kā tos pārbaudīt?

Varat pārbaudīt apavu etiķeti ar Ŕādu komandu:

kubectl get pods --show-labels

Vai arī, ja podi pieder vairākām lietojumprogrammām:

kubectl get pods --selector any-name=my-app --show-labels

Kur any-name=my-app ir etiÄ·ete any-name: my-app.

Vai ir palikuŔas kādas grūtības?

Var pieslēgties podam! Lai to izdarītu, jums ir jāizmanto komanda port-forward in kubectl. Tas ļauj izveidot savienojumu ar pakalpojumu un pārbaudīt savienojumu.

kubectl port-forward service/<service name> 3000:80

Š—Š“ŠµŃŃŒ:

  • service/<service name> ā€” pakalpojuma nosaukums; mÅ«su gadÄ«jumā tā ir my-service;
  • 3000 ir ports, kas ir jāatver datorā;
  • 80 - laukā norādÄ«tais ports port serviss.

Ja savienojums tika izveidots, iestatījumi ir pareizi.

Ja savienojums neizdodas, ir problēma ar etiķetēm vai porti nesakrīt.

Attiecības starp Service un Ingress

Nākamais solis, lai nodroÅ”inātu piekļuvi lietojumprogrammai, ir Ingress iestatÄ«Å”ana. Ingress ir jāzina, kā atrast pakalpojumu, pēc tam atrast podi un novirzÄ«t trafiku uz tiem. Ingress atrod vajadzÄ«go pakalpojumu pēc nosaukuma un atvērtā porta.

Ingress un Service aprakstā ir jāsakrīt diviem parametriem:

  1. servicePort in Ingress ir jāatbilst parametram port Pakalpojumā;
  2. serviceName Ingress ir jāatbilst laukam name Pakalpojumā.

Šajā diagrammā ir apkopoti portu savienojumi:

1) Kā jūs jau zināt, Serviss ieklausās noteiktā port:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

2) Ingress ir parametrs, ko sauc servicePort:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

3) Šis parametrs (servicePort) vienmēr jāsakrīt port pakalpojuma definīcijā:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

4) Ja Service ir norādīts ports 80, tad tas ir nepiecieŔams servicePort arī bija vienāds ar 80:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

Praksē jums jāpievērÅ” uzmanÄ«ba Ŕādām rindām:

apiVersion: v1
kind: Service
metadata:
 name: my-service  # <<<
spec:
  ports:
 - port: 80  # <<<
   targetPort: 8080
  selector:
    any-name: my-app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
    paths:
    - backend:
       serviceName: my-service  # <<<
       servicePort: 80  # <<<
     path: /

Kā pārbaudīt, vai Ingress darbojas?

Jūs varat izmantot metodi ar kubectl port-forward, bet pakalpojuma vietā ir nepiecieŔams izveidot savienojumu ar Ingress kontrolleri.

Vispirms ar Ingress kontrolleri jānoskaidro poda nosaukums:

kubectl get pods --all-namespaces
NAMESPACE   NAME                              READY STATUS
kube-system coredns-5644d7b6d9-jn7cq          1/1   Running
kube-system etcd-minikube                     1/1   Running
kube-system kube-apiserver-minikube           1/1   Running
kube-system kube-controller-manager-minikube  1/1   Running
kube-system kube-proxy-zvf2h                  1/1   Running
kube-system kube-scheduler-minikube           1/1   Running
kube-system nginx-ingress-controller-6fc5bcc  1/1   Running

Atrodiet Ingress pod (tas var būt citā nosaukumvietā) un palaidiet komandu describelai uzzinātu portu numurus:

kubectl describe pod nginx-ingress-controller-6fc5bcc 
--namespace kube-system 
 | grep Ports
Ports:         80/TCP, 443/TCP, 18080/TCP

Visbeidzot, izveidojiet savienojumu ar podziņu:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

Tagad katru reizi, kad nosÅ«tāt pieprasÄ«jumu uz datora 3000. portu, tas tiks pārsÅ«tÄ«ts uz podziņas 80. portu ar Ingress kontrolleri. Dodoties uz http://localhost:3000, jums vajadzētu redzēt lietojumprogrammas Ä£enerēto lapu.

Ostu kopsavilkums

Vēlreiz atcerēsimies, kuriem portiem un etiķetēm ir jāatbilst:

  1. Pakalpojuma definīcijas atlasītājam ir jāatbilst aplikuma etiķetei;
  2. targetPort definÄ«cijā Pakalpojumam ir jāatbilst containerPort konteiners pāksts iekÅ”pusē;
  3. port definīcijā Pakalpojums var būt jebkas. Dažādi pakalpojumi var izmantot vienu un to paŔu portu, jo tiem ir atŔķirīgas IP adreses;
  4. servicePort IekļūŔanai ir jāsakrīt port pakalpojuma definīcijā;
  5. Pakalpojuma nosaukumam ir jāatbilst laukam serviceName in Ingress.

Diemžēl nepietiek tikai zināt, kā pareizi strukturēt YAML konfigurāciju.

Kas notiek, kad lietas noiet greizi?

Pāksts var nedarboties vai avarēt.

3 soļi, lai diagnosticētu lietojumprogrammas problēmas pakalpojumā Kubernetes

Pirms sākat izvietoŔanas atkļūdoŔanu, jums ir labi jāizprot, kā darbojas Kubernetes.

Tā kā katrai K8s lejupielādētajai lietojumprogrammai ir trÄ«s komponenti, tie ir jāatkļūdo noteiktā secÄ«bā, sākot no paÅ”as apakÅ”as.

  1. Vispirms jāpārliecinās, vai pākstis darbojas, tad...
  2. Pārbaudiet, vai pakalpojums nodroÅ”ina trafiku uz podiem, un pēc tam...
  3. Pārbaudiet, vai Ingress ir pareizi konfigurēts.

Vizuāls attēlojums:

1) Jums vajadzētu sākt meklēt problēmas no paÅ”as apakÅ”as. Vispirms pārbaudiet, vai pākstÄ«m ir statusi Ready Šø Running:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

2) Ja pākstis ir gatavas (Ready), jums vajadzētu noskaidrot, vai pakalpojums sadala trafiku starp aplikācijām:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

3) Visbeidzot, jums jāanalizē saikne starp pakalpojumu un Ingress:

Vizuāls ceļvedis Kubernetes problēmu novērÅ”anai

1. PākŔu diagnostika

Vairumā gadÄ«jumu problēma ir saistÄ«ta ar pāksti. Pārliecinieties, vai pākstis ir norādÄ«tas kā Ready Šø Running. To var pārbaudÄ«t, izmantojot komandu:

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

IepriekÅ” esoÅ”ajā komandas izvadē pēdējais pods ir norādÄ«ts kā Running Šø Readytomēr tas neattiecas uz pārējiem diviem.

Kā saprast, kas nogāja greizi?

Ir četras noderīgas komandas, lai diagnosticētu pākstis:

  1. kubectl logs <ŠøŠ¼Ń pod'Š°> ļauj izvilkt baļķus no konteineriem podā;
  2. kubectl describe pod <ŠøŠ¼Ń pod'Š°> ļauj skatÄ«t ar podziņu saistÄ«to notikumu sarakstu;
  3. kubectl get pod <ŠøŠ¼Ń pod'Š°> ļauj iegÅ«t Kubernetes saglabātā podziņa YAML konfigurāciju;
  4. kubectl exec -ti <ŠøŠ¼Ń pod'Š°> bash ļauj palaist interaktÄ«vu komandu apvalku vienā no pod konteineriem

Kuru izvēlēties?

Fakts ir tāds, ka nav universālas komandas. Jāizmanto to kombinācija.

Tipiskas podziņas problēmas

Ir divi galvenie aplikācijas kļūdu veidi: startÄ“Å”anas kļūdas un izpildlaika kļūdas.

StartÄ“Å”anas kļūdas:

  • ImagePullBackoff
  • ImageInspectError
  • ErrImagePull
  • ErrImageNeverPull
  • RegistryUnavailable
  • InvalidImageName

Izpildlaika kļūdas:

  • CrashLoopBackOff
  • RunContainerError
  • KillContainerError
  • VerifyNonRootError
  • RunInitContainerError
  • CreatePodSandboxError
  • ConfigPodSandboxError
  • KillPodSandboxError
  • SetupNetworkError
  • TeardownNetworkError

Dažas kļūdas ir biežākas nekā citas. Å eit ir dažas no visbiežāk sastopamajām kļūdām un to novērÅ”anas metodes.

ImagePullBackOff

Šī kļūda rodas, ja Kubernetes nevar iegūt attēlu vienam no pod konteineriem. Šeit ir trīs visbiežāk sastopamie iemesli:

  1. Attēla nosaukums ir nepareizs ā€“ piemēram, jÅ«s tajā esat kļūdÄ«jies vai attēls neeksistē;
  2. Attēlam tika norādÄ«ts neesoÅ”s tags;
  3. Attēls tiek glabāts privātā reģistrā, un Kubernetes nav atļaujas tam piekļūt.

Pirmos divus iemeslus ir viegli novērst ā€” vienkārÅ”i izlabojiet attēla nosaukumu un atzÄ«mi. Pēdējā gadÄ«jumā jums ir jāievada slēgtā reÄ£istra akreditācijas dati sadaļā Secret un jāpievieno saites uz to podiņos. Kubernetes dokumentācijā ir piemērs kā to var izdarÄ«t.

Crash Loop Back Off

Kubenetes iemet kļūdu CrashLoopBackOff, ja konteineru nevar palaist. Tas parasti notiek, ja:

  1. Lietojumprogrammā ir kļūda, kas neļauj to palaist;
  2. Konteiners nepareizi konfigurēts;
  3. Pārāk daudz reižu dzīvīguma tests ir izgāzies.

Lai noskaidrotu tā neveiksmes iemeslu, jums jāmēģina nokļūt pie žurnāliem no konteinera. Ja ir grÅ«ti piekļūt žurnāliem, jo ā€‹ā€‹konteiners tiek restartēts pārāk ātri, varat izmantot Ŕādu komandu:

kubectl logs <pod-name> --previous

Tas parāda kļūdu ziņojumus no iepriekŔējā konteinera iemiesojuma.

RunContainerError

Å Ä« kļūda rodas, ja konteineru neizdodas palaist. Tas atbilst brÄ«dim pirms lietojumprogrammas palaiÅ”anas. To parasti izraisa nepareizi iestatÄ«jumi, piemēram:

  • mēģinājums pievienot neesoÅ”u sējumu, piemēram, ConfigMap vai Secrets;
  • mēģinājums montēt tikai lasāmu sējumu kā lasāmu un rakstāmu.

Komanda ir labi piemērota Ŕādu kļūdu analÄ«zei kubectl describe pod <pod-name>.

Pāksti atrodas gaidīŔanas stāvoklī

Pēc izveides pāksts paliek stāvoklī Pending.

Kāpēc tas notiek?

Šeit ir iespējamie iemesli (es pieņemu, ka plānotājs darbojas labi):

  1. Klasterim nav pietiekami daudz resursu, piemēram, apstrādes jaudas un atmiņas, lai palaistu podziņu.
  2. Objekts ir instalēts attiecīgajā nosaukumu telpā ResourceQuota un izveidojot aplikumu, nosaukumvieta pārsniegs kvotu.
  3. Aplikācija ir saistīta ar statusu Gaida PersistentVolumeClaim.

Šajā gadījumā ieteicams izmantot komandu kubectl describe un pārbaudiet sadaļu Events:

kubectl describe pod <pod name>

Kļūdu gadījumā, kas saistītas ar ResourceQuotas, ieteicams skatīt klasteru žurnālus, izmantojot komandu

kubectl get events --sort-by=.metadata.creationTimestamp

Pākstis nav gatavas

Ja pods ir norādīts kā Running, bet nav stāvoklī Ready, nozīmē pārbaudīt tā gatavību (gatavības zonde) neizdodas.

Ja tas notiek, pods nepievienojas pakalpojumam un uz to neplūst satiksme. Gatavības pārbaudes kļūmi izraisa problēmas lietojumprogrammā. Šajā gadījumā, lai atrastu kļūdu, jums ir jāanalizē sadaļa Events komandas izvadē kubectl describe.

2. Servisa diagnostika

Ja pākstis ir norādÄ«tas kā Running Šø Ready, taču no lietojumprogrammas joprojām nav atbildes, jums jāpārbauda pakalpojuma iestatÄ«jumi.

Pakalpojumi ir atbildÄ«gi par trafika novirzÄ«Å”anu uz podiem atkarÄ«bā no to etiÄ·etēm. Tāpēc pirmā lieta, kas jums jādara, ir pārbaudÄ«t, cik daudz podi darbojas ar pakalpojumu. Lai to izdarÄ«tu, pakalpojumā varat pārbaudÄ«t galapunktus:

kubectl describe service <service-name> | grep Endpoints

Galapunkts ir formas vērtÄ«bu pāris <IP-Š°Š“рŠµŃ:ŠæŠ¾Ń€Ń‚>, un izvadā ir jābÅ«t vismaz vienam Ŕādam pārim (tas ir, vismaz viens pods darbojas ar pakalpojumu).

Ja sadaļa Endpoins tukÅ”s, ir iespējamas divas iespējas:

  1. nav nevienas pākstis ar pareizo etiķeti (padoms: pārbaudiet, vai nosaukumvieta ir atlasīta pareizi);
  2. Atlasītājā pakalpojumu etiķetēs ir kļūda.

Ja redzat galapunktu sarakstu, bet joprojām nevarat piekļūt lietojumprogrammai, iespējams, vaininieks ir kļūda targetPort pakalpojuma aprakstā.

Kā pārbaudīt pakalpojuma funkcionalitāti?

Neatkarīgi no pakalpojuma veida varat izmantot komandu kubectl port-forward lai izveidotu savienojumu ar to:

kubectl port-forward service/<service-name> 3000:80

Š—Š“ŠµŃŃŒ:

  • <service-name> ā€” pakalpojuma nosaukums;
  • 3000 ir ports, ko atverat datorā;
  • 80 - ports servisa pusē.

3. IekļūŔanas diagnostika

Ja esat izlasījis tik tālu, tad:

  • pākstis ir uzskaitÄ«tas kā Running Šø Ready;
  • pakalpojums veiksmÄ«gi sadala trafiku starp podiem.

Tomēr jūs joprojām nevarat sasniegt lietotni.

Tas nozÄ«mē, ka Ingress kontrolleris, visticamāk, nav pareizi konfigurēts. Tā kā Ingress kontrolleris ir klastera treŔās puses komponents, atkarÄ«bā no tā veida ir dažādas atkļūdoÅ”anas metodes.

Bet, pirms izmantojat Ä«paÅ”us rÄ«kus Ingress konfigurÄ“Å”anai, varat izdarÄ«t kaut ko ļoti vienkārÅ”u. Ingress lietojumi serviceName Šø servicePort lai izveidotu savienojumu ar pakalpojumu. Jums jāpārbauda, ā€‹ā€‹ā€‹ā€‹vai tie ir pareizi konfigurēti. To var izdarÄ«t, izmantojot komandu:

kubectl describe ingress <ingress-name>

Ja kolonna Backend tukÅ”s, pastāv liela konfigurācijas kļūdas iespējamÄ«ba. Ja aizmugursistēmas ir izveidotas, bet lietojumprogramma joprojām nav pieejama, problēma var bÅ«t saistÄ«ta ar:

  • Piekļuves pieejamÄ«bas iestatÄ«jumi no publiskā interneta;
  • klasteru pieejamÄ«bas iestatÄ«jumi no publiskā interneta.

JÅ«s varat noteikt problēmas ar infrastruktÅ«ru, izveidojot tieÅ”u savienojumu ar Ingress pod. Lai to izdarÄ«tu, vispirms atrodiet ieejas kontrollera podziņu (tas var bÅ«t citā nosaukumvietā):

kubectl get pods --all-namespaces
NAMESPACE   NAME                              READY STATUS
kube-system coredns-5644d7b6d9-jn7cq          1/1   Running
kube-system etcd-minikube                     1/1   Running
kube-system kube-apiserver-minikube           1/1   Running
kube-system kube-controller-manager-minikube  1/1   Running
kube-system kube-proxy-zvf2h                  1/1   Running
kube-system kube-scheduler-minikube           1/1   Running
kube-system nginx-ingress-controller-6fc5bcc  1/1   Running

Izmantojiet komandu describelai iestatītu portu:

kubectl describe pod nginx-ingress-controller-6fc5bcc
--namespace kube-system 
 | grep Ports

Visbeidzot, izveidojiet savienojumu ar podziņu:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

Tagad visi datora 3000. porta pieprasÄ«jumi tiks novirzÄ«ti uz podziņas 80. portu.

Vai tas tagad darbojas?

  • Ja jā, tad problēma ir infrastruktÅ«rā. Ir precÄ«zi jānoskaidro, kā satiksme tiek novirzÄ«ta uz klasteri.
  • Ja nē, tad problēma ir Ingress kontrollerÄ«.

Ja nevarat panākt, lai Ingress kontrolieris darbotos, jums tas būs jāatkļūdo.

Ir daudz dažādu Ingress kontrolieru. Populārākie ir Nginx, HAProxy, Traefik utt. (lai iegÅ«tu plaŔāku informāciju par esoÅ”ajiem risinājumiem, sk mÅ«su pārskats ā€” apm. tulk.) Skatiet traucējummeklÄ“Å”anas rokasgrāmatu attiecÄ«gā kontrollera dokumentācijā. Tāpēc ka Ingress Nginx ir vispopulārākais Ingress kontrolieris, rakstā esam iekļāvuÅ”i dažus padomus ar to saistÄ«to problēmu risināŔanai.

Ingress Nginx kontrollera atkļūdoŔana

Ingress-nginx projektam ir amatpersona kubectl spraudnis. Komanda kubectl ingress-nginx var izmantot:

  • žurnālu, aizmugursistēmu, sertifikātu uc analÄ«ze;
  • savienojumi ar Ingress;
  • paÅ”reizējās konfigurācijas izpēte.

Šīs trīs komandas jums to palīdzēs:

  • kubectl ingress-nginx lint - pārbaudes nginx.conf;
  • kubectl ingress-nginx backend ā€” pēta aizmuguri (lÄ«dzÄ«gi kā kubectl describe ingress <ingress-name>);
  • kubectl ingress-nginx logs ā€” pārbauda žurnālus.

Ņemiet vērā, ka dažos gadÄ«jumos, izmantojot karodziņu, var bÅ«t nepiecieÅ”ams norādÄ«t pareizo Ingress kontrollera nosaukumvietu --namespace <name>.

Kopsavilkums

Kubernetes problēmu novērÅ”ana var bÅ«t sarežģīta, ja nezināt, ar ko sākt. Problēmai vienmēr vajadzētu pievērsties no apakÅ”as uz augÅ”u: sāciet ar podiem un pēc tam pārejiet uz pakalpojumu un Ingress. Å ajā rakstā aprakstÄ«tās atkļūdoÅ”anas metodes var izmantot citiem objektiem, piemēram:

  • dÄ«kstāves darbi un CronJobs;
  • StatefulSets un DaemonSets.

Es izsaku savu pateicÄ«bu Gergely Risko, Daniels Veibels Šø Čārlzs Kristirajs par vērtÄ«giem komentāriem un papildinājumiem.

PS no tulka

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru