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
- CrashLoopBackOff - Applikasjonen krasjer kontinuerlig ved oppstart
- ImagePullBackOff - Kan ikke hente container-image fra registry
- FailedScheduling - Pod kan ikke plasseres p? noen node (mangler ressurser)
- OOMKilled - Container bruker for mye minne og blir drept
- 503 Service Unavailable - Trafikk n?r ikke applikasjonen (Service/Route-problemer)
- Pending - Pod-en venter p? ressurser eller andre avhengigheter
Her skal vi se hvordan du raskt identifiserer og potensielt l?ser disse problemene med praktiske kommandoer og feils?kingsteknikker.
Sjekkliste ved problemer
- Er podder Running og Ready?
- Finnes Warning/Error-events i prosjektet?
- Feiler image-pull (mangler imagePullSecret)?
- Stopper appen p? grunn av ressursgrenser (quota/limits)?
- Treffer trafikken riktig Service/Route/Port?
Grunnleggende verkt?y
Velg aktivt prosjekt
N?r du velger et aktivt prosjekt, slipper du ? legge til -n
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
- -n
: Angi namespace/prosjekt for en enkelt kommando. Dette er ikke n?dvendig dersom riktig prosjekt er valgt, som du kan gj?re ved ? kj?re oc project i forkant. - -c
: Velg hvilken container i en pod/deployment (f.eks. -c app-container). - -f:
- oc logs -f betyr follow (str?m logger fortl?pende).
- oc apply -f betyr fil (path til manifest).
- -o : Velg output-format. Vanlige verdier: wide, name, yaml, json, jsonpath=....
Output-formater og n?r du bruker dem:
- wide: Viser ekstra kolonner som node, IP-adresse, alder. Nyttig for ? se hvor pod-er kj?rer og nettverksdetaljer.
- name: Kun ressursnavn (f.eks. pod/my-app-123-abc). Perfekt for ? pipe til andre kommandoer eller scripts.
- yaml: Fullstendig YAML-representasjon av ressursen. Brukes n?r du trenger alle detaljer eller vil redigere og oppdatere.
- json: JSON-format (samme som YAML, men JSON-syntaks). Nyttig for API-integrasjoner eller om du bruker jq.
- jsonpath='...': Henting av spesifikke felter. Nyttig for scripts og automatisering.
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:
- Bruk {.items[*]} for ? iterere over alle elementer i en liste
- Bruk {.items[0]} for ? f? f?rste element
- Kombiner med | for ? pipe til jq for kompleks filtrering
Finne podnavn
N?r du trenger et faktisk podnavn kan du:
- Liste alle pod-er (med ekstra info):
oc get pods -o wide
- Kun navn (lett ? kopiere/pipe videre):
oc get pods -o name
- Filtrere p? label (vanligvis satt i deployment):
oc get pods -l app=<appname> -o name
- Hente f?rste pod som matcher (nyttig i scripts):
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
- Liste podder (med noder og IP-er):
oc get pods -o wide
- Beskriv en deployment og f?lg utrulling:
oc describe deployment <deploy>
oc rollout status deployment/<deploy>
- Restart en deployment (nyttig ved milj?endringer):
oc rollout restart deployment/<deploy>
Logger
- Rullerende logger fra applikasjoner:
# 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:
- -f: (follow) Rullerende logger
- -c
: Velg en spesifikk container (f.eks. -c app-container eller -c nginx) - --all-containers=true: Hent logger fra alle containere i hver pod
- --previous: Hent logger fra forrige (krasjede) instans av container-en
- --since=10m: Vis kun logger fra siste 10 minutter (eller annen tidsavgrensning)
- --tail=100: Vis kun de siste 100 linjene
- --timestamps: Vis tidsstempel for hver logglinje
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.
- Siste hendelser i prosjektet sortert etter tid (nyttig ved feil under deploy):
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.
- Kun advarsler/feil:
oc get events | egrep "Warning|Error"
Ressursproblemer
- Ressurskvoter og detaljer:
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
- Sjekk at image-pull-secret finnes og er knyttet til servicekonto-en:
oc get secrets
oc describe secret <robot-user>-secret
Les gjerne manifest-filer i OKD for ? se hvordan du setter dette opp riktig.
Nettverksproblemer
- Service, Endpoints og Route:
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
- Interaktiv shell inni container-en:
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:
- Endringer i Deployment (f.eks. env-variabler, ressurser, image-tag) vil trigge en ny utrulling.
- Endringer i ConfigMap/Secret som er mountet som fil krever ofte en utrulling for ? tas i bruk:
oc rollout restart deployment/<project>
- For image-oppdateringer: bruk en eksplisitt ny tag, og gjerne bruk imagePullPolicy: Always i manifestet for ? sikre at nyeste tag hentes ved restart.