Miten kontin vianmääritys tehdään?
Joskus podia käyttöönotettaessa sen tila muuttuu muutaman sekunnin jälkeen muotoon CrashLoopBackOff tai Error. Tässä tapauksessa voit tarkistaa podien lokit, mutta saatat joutua siirtymään terminaaliin selvittääksesi, mikä on vialla. Et kuitenkaan voi tehdä sitä, koska podin käynnistyminen epäonnistuu.
Tässä artikkelissa katsomme, miten kontin vianmääritys tehdään kahdella menetelmällä:
- Ensimmäinen käyttämällä Rahti-selainkäyttöliittymää
- Toinen käyttämällä oc -komentorivityökalua.
Vikaantuvan podin käyttöönotto
Otetaan käyttöön vikaantuva podi. Tätä varten käytämme virallista NGINX-imagoa. Tämä imago epäonnistuu, koska se toimii pääkäyttäjäoikeuksilla, mikä ei ole mahdollista Rahdissa (OpenShiftissä). Lisätietoja täältä
Tässä on Deployment-määrityksemme:
kind: Deployment
apiVersion: apps/v1
metadata:
name: test-debug
spec:
replicas: 1
selector:
matchLabels:
app: test-debug
template:
metadata:
labels:
app: test-debug
spec:
containers:
- name: nginx
image: 'nginx:latest'
ports:
- containerPort: 8080
protocol: TCP
imagePullPolicy: Always
restartPolicy: Always
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
Tallenna se tiedostoon nimeltä deployment-fail.yaml (esimerkiksi)
Ota se käyttöön suorittamalla tämä komento:
Tarkista nyt podisi. Sen pitäisi epäonnistua. Katso lokeja, sinun pitäisi nähdä tämä:
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?)
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2026/07/10 13:21:40 [warn] 1#1: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
2026/07/10 13:21:40 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
Kontin vianmääritys Rahti-selainkäyttöliittymällä
Tarkastellaan näitä virheitä:
2026/07/10 13:21:40 [warn] 1#1: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
2026/07/10 13:21:40 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
nginx: [emerg] mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
Olisi hyödyllistä tarkistaa tiedosto nginx.conf, mutta et voi tehdä sitä, koska podi epäonnistuu. Tässä debug-kontti tulee avuksi!
Siirry Rahdissa kohtaan Workloads > Pods ja valitse podisi, jonka tila on Error tai CrashLoopBackOff. Napsauta välilehteä Logs ja napsauta leppäkerttua muistuttavaa kuvaketta:
![]()
Se käynnistää automaattisesti debug-kontin. Voit nyt tarkistaa tiedoston /etc/nginx/nginx.conf sisällön suorittamalla komennon:
Sekä oikeudet hakemistoon /var/cache/nginx/ suorittamalla komennon:
Terminal
Jos et näe komentoja terminaalissa, laajenna sitä napsauttamalla oikeasta yläkulmasta "Expand". Voit myös pienentää sen takaisin, ja komennot näkyvät silti.
Kaksi asiaa täytyy tehdä:
-
user-direktiivi ei ole tarpeellinen, koska jokainen podi Rahdissa käynnistyy satunnaisella UID:llä ja GID:llä (katso tietoturvaoppaamme) -
Meidän täytyy päivittää hakemiston
/var/cache/nginxoikeudet
Miten?
Meidän täytyy luoda viralliseen NGINX-imagoon perustuva mukautettu imago. CSC on kehittänyt sellaisen, ja sen voi noutaa Docker Hubista: cscfi/nginx-okd. Lisätietoja löydät Dockerfilesta GitHub-repositoriostamme
Voit nähdä, että päivitimme oikeudet näillä riveillä ja kommentoimme user-direktiivin täällä
Note
Sovellusta ei ole mahdollista ajaa porteissa 80 ja 443. Siksi päivitimme myös portin konfiguraatiossa
Kun olet saanut podisi vianmäärityksen tehtyä, voit poistua terminaalista. Se tappaa debug-kontin automaattisesti.
Kontin vianmääritys CLI-työkalulla
Menettely on sama, ainoa ero on se, että sinun täytyy suorittaa tämä komento:
Uusi debug-kontti käynnistyy, ja päädyt suoraan komentokehotteeseen.
Vianmääritys
Jos debug-konttisi ei käynnisty, syynä voi olla liitetty taltio. Rahti ei tällä hetkellä tue ReadWriteManyä (RWX). Sinun täytyy poistaa taltio, jotta debug-kontti voidaan käynnistää, päivittämällä deploymentisi.
Voit tarkistaa välilehden Events