Feils?king av OKD

Mye kan g? galt n?r man jobber med OKD. Derfor er det greit ? kunne noen triks for ? feils?ke hva som kan ha g?tt galt underveis.

Noen av de vanligste feilene i OKD

Her skal vi se hvordan du raskt identifiserer og potensielt l?ser disse problemene med praktiske kommandoer og feils?kingsteknikker.

Sjekkliste ved problemer

Grunnleggende verkt?y

Velg aktivt prosjekt

N?r du velger et aktivt prosjekt, slipper du ? legge til -n i alle kommandoer.

oc project <project>
oc project            # shows current project and cluster

Dette setter current namespace for ditt oc-milj? i terminalvinduet du jobber i.

Vanlige kommando-flagg

Output-formater og n?r du bruker dem:

Praktiske eksempler:

# Se hvor pod-er kj?rer (node + IP)
oc get pods -o wide

# F? bare podnavn for ? pipe videre
oc get pods -l app=<appname> -o name | head -1

# Se fullstendig konfigurasjon av en pod
oc get pod <podname> -o yaml

# Henter bare image-navn fra alle pod-er
oc get pods -o jsonpath='{.items[*].spec.containers[*].image}'

# F? f?rste podnavn som matcher en label
oc get pods -l app=<appname> -o jsonpath='{.items[0].metadata.name}'

Tips for jsonpath:

Finne podnavn

N?r du trenger et faktisk podnavn kan du:

oc get pods -o wide
oc get pods -o name
oc get pods -l app=<appname> -o name
oc get pods -l app=<appname> -o jsonpath='{.items[0].metadata.name}'

Tips: Podnavn inneholder et generert suffiks (f.eks. my-app-6d9c9c7d8f-abc12). Bruk labels for ? finne riktig applikasjon.

Grunnleggende feils?king

Se status for pod-er og deploy

oc get pods -o wide
oc describe deployment <deploy>
oc rollout status deployment/<deploy>
oc rollout restart deployment/<deploy>

Logger

# Fra deployment (alle pod-er)
oc logs deployment/<project>

# Fra spesifikk pod
oc logs pod/<podname>

# Fra alle pod-er med label
oc logs -l app=<appname>

Nyttige flagg for logger:

Eksempler p? kombinasjoner:

# Alle containere i alle pod-er med label
oc logs -f -l app=<appname> --all-containers=true

# Spesifikk container i deployment med tidsavgrensning
oc logs -f deployment/<project> -c <container> --since=30m

# Forrige instans av en krasjet container
oc logs pod/<podname> -c <container> --previous

# Siste 50 linjer med tidsstempel
oc logs pod/<podname> --tail=50 --timestamps

Hendelser (events)

oc describe pod <podname>

Gir fullstendig status og Events nederst. Nyttig ved Pending, CrashLoopBackOff, ImagePullBackOff, OOMKilled osv. Sjekk felter som Reason, Last State, mount paths/volumes, node, image som trekkes og hvilke imagePullSecrets som brukes.

oc get events --sort-by='.lastTimestamp'

Tidslinje over hva som faktisk skjedde i prosjektet. Se etter Warning-rader som BackOff, FailedScheduling, FailedMount, ImagePullBackOff, Admission. Kombiner dette gjerne med oc describe for ? f? en idé om hva som g?r galt.

oc get events | egrep "Warning|Error"

Ressursproblemer

oc get resourcequotas
oc describe resourcequota <quota-navn>

Kommandoene viser hvor mye ressurser du bruker, og hvor mye du har tilgjengelig. Kj?r oc get resourcequotas for ? finne navnet p? <quota-navn>, som regel er det compute-resources du ?nsker ? bruke. Sistnevnte gir en mer lettleslig visning av ressurser i prosjektet.

ImagePull-problemer

oc get secrets
oc describe secret <robot-user>-secret

Les gjerne manifest-filer i OKD for ? se hvordan du setter dette opp riktig.

Nettverksproblemer

oc get svc
oc describe svc <service>
oc get endpoints <service>
oc get route
oc describe route <route>

oc get svc viser alle service-er som kj?rer i prosjektet ditt. Bruk ett av navnene i listen og kj?r oc describe svc <service> for ? se mer info om service-en. Det samme kan du gj?re for ruter med oc get route og oc describe route <route>

Les manifest-filer i OKD for ? se hvordan du setter dette opp service- og route-filer riktig.

Koble seg p? containere

oc exec -it pod/<podname> -c <container> -- sh

Dette gir deg muligheten til ? hoppe inn i container-en og kj?re shell kommandoer, nyttig for ? f. eks. lese innholdet i filer for ? se om de har blitt oppdatert.

Endre manifester

Du trenger ikke bygge nytt image hver gang du endrer konfigurasjon i YAML-manifester (Deployment, Service, Route osv.). Manifester kan endres og tas i bruk direkte:

oc apply -f deployment.yaml
oc rollout restart deployment/<project>
oc rollout status deployment/<project>

Dette oppdaterer ressurser i OKD umiddelbart. Bygg nytt image kun n?r applikasjonskoden eller avhengigheter endres. Noen praktiske tips:

oc rollout restart deployment/<project>

Se ogs?