Kubernetes perusteet

Paketinhallinta ja arjen työkalut

Helm ja Rancher Catalog, Kustomize sekä podien logitus ja debuggaus kubectl-työkaluilla.

4 min lukuaika

Paketinhallinta ja arjen työkalut

Tässä osiossa opit hallitsemaan sovelluksia korkeammalla tasolla Helmillä ja Rancherin Apps/Catalog -näkymästä, muokkaamaan valmiita manifesteja Kustomizella sekä käyttämään arjen työkaluja podien logitukseen ja debuggaukseen. Lopuksi asennat valmiin sovelluksen Helm-chartilla ja ylikirjoitat sen arvoja.


1. Miksi paketinhallintaa tarvitaan?

Yksittäisen sovelluksen käyttöönotto voi tarkoittaa kymmeniä YAML-manifesteja (Deployment, Service, Ingress, ConfigMap, Secret…). Niiden ylläpito käsin on työlästä ja virhealtista.

Paketinhallinta ratkaisee tämän:

  • niputtaa sovelluksen kaikki resurssit yhdeksi paketiksi,
  • mahdollistaa versioinnin, parametroinnin ja uudelleenkäytön,
  • tekee asennuksesta, päivityksestä ja poistosta toistettavaa.

Kuberneteksessa yleisin ratkaisu on Helm.


2. Helm-paketinhallinta

Helm on Kuberneteksen paketinhallinta. Keskeiset käsitteet:

  • Chart – paketti, joka sisältää sovelluksen manifestit mallipohjina (templates) ja oletusarvot (values.yaml).
  • Release – chartista klusteriin asennettu instanssi (voit asentaa saman chartin monta kertaa eri nimillä).
  • Repository – kokoelma chartteja, joista niitä ladataan.
  • Values – parametrit, joilla chartin oletusarvot ylikirjoitetaan.
flowchart LR
    REPO[Helm-repository] --> CHART[Chart + values.yaml]
    VALUES[Omat arvot] --> CHART
    CHART -->|helm install| REL[Release]
    REL --> K8S[Kubernetes-objektit:<br/>Deployment, Service, ...]

Chartin rakenne pähkinänkuoressa:

text
mychart/
├── Chart.yaml        # chartin metatiedot (nimi, versio)
├── values.yaml       # oletusarvot
└── templates/        # manifestimallit (käyttävät arvoja)

Yleisimmät komennot:

bash
# Lisää ja päivitä repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Asenna, päivitä, listaa, poista
helm install web bitnami/nginx
helm upgrade web bitnami/nginx --set replicaCount=3
helm list
helm uninstall web

# Peruuta edelliseen versioon
helm rollback web 1

3. Rancher Catalog ja Apps

Rancher tarjoaa Helm-chartit graafisesti Apps-näkymässä (aiemmin Catalog):

  • Apps → Charts – asennettavat sovellukset esikonfiguroiduista repositorioista.
  • Apps → Repositories – omien Helm-repositorioiden lisääminen.
  • Asennuksen yhteydessä Rancher näyttää chartin arvot lomakkeena tai YAML-editorina, jolloin voit ylikirjoittaa ne ilman komentoriviä.

Taustalla Rancher käyttää samaa Helmiä – Apps-näkymästä asennettu sovellus näkyy myös komennolla helm list.


4. Kustomize

Kustomize on template-vapaa tapa muokata valmiita manifesteja. Se on sisäänrakennettu kubectl-työkaluun (kubectl apply -k).

  • base – yhteiset perusmanifestit.
  • overlays – ympäristökohtaiset muutokset (esim. dev, prod), jotka patchaavat basea.
  • Kaikki kootaan kustomization.yaml-tiedostolla.
text
base/
├── deployment.yaml
├── service.yaml
└── kustomization.yaml
overlays/
└── prod/
    └── kustomization.yaml   # viittaa baseen ja tekee muutokset
bash
# Rakenna ja ota käyttöön overlay
kubectl apply -k overlays/prod

Helm vs. Kustomize: Helm parametroi mallipohjilla ja arvoilla; Kustomize muokkaa olemassa olevia manifesteja patchaamalla. Molempia voi käyttää myös yhdessä.


5. Arjen työkalut: logitus ja debuggaus

Kun sovellus ei toimi odotetusti, näillä kubectl-komennoilla selvität syyn:

bash
# Podin lokit (seuraa reaaliaikaisesti -f, edellinen käynnistys --previous)
kubectl logs <pod>
kubectl logs -f <pod>
kubectl logs --previous <pod>
kubectl logs -l app=web        # kaikki labelia vastaavat podit

# Podin tila, tapahtumat ja määrittelyt
kubectl describe pod <pod>

# Aja komento podin sisällä (interaktiivinen shell)
kubectl exec -it <pod> -- sh

# Klusterin tapahtumat (viimeisimmät ongelmat)
kubectl get events --sort-by=.lastTimestamp

# Resurssien käyttö (vaatii metrics-serverin)
kubectl top pods
  • kubectl logs – sovelluksen tulosteet; ensimmäinen paikka vianetsintään.
  • kubectl describe – näyttää tapahtumat (Events), esim. miksi Pod ei käynnisty.
  • kubectl exec – pääset podin sisään testaamaan verkkoa, tiedostoja tai prosesseja.

6. Hands-on: sovelluksen asennus Helmillä ja arvojen ylikirjoitus

Asenna valmis sovellus Helm-chartilla, ylikirjoita sen arvot ja tutki lopputulosta logituksen ja debuggauksen työkaluilla. Varmista ensin, että sinulla on klusterin kubeconfig käytössä (ks. arkkitehtuuri-osion harjoitus) ja pääsy Rancheriin.

1. Luo ja ota käyttöön oma nimiavaruutesi:

bash
# Korvaa <oma-nimi> omalla nimelläsi
kubectl create namespace <oma-nimi> --dry-run=client -o yaml | kubectl apply -f -
kubectl config set-context --current --namespace=<oma-nimi>

A) Asennus Rancherin Apps-näkymästä

  1. Avaa Rancherissa Apps → Charts.
  2. Etsi sovellus (esim. Metrics Server tai Nginx) ja valitse Install.
  3. Valitse kohdenimiavaruudeksi oma nimiavaruutesi (<oma-nimi>).
  4. Ylikirjoita arvot lomakkeesta tai Edit YAML -näkymästä (esim. replicaCount: 2).
  5. Viimeistele asennus ja seuraa tilaa Installed Apps -näkymässä.

B) Asennus komentoriviltä Helmillä

bash
# Lisää chart-repository
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# Asenna nginx omaan nimiavaruuteen ja ylikirjoita arvoja
helm install web bitnami/nginx \
  --namespace <oma-nimi> \
  --set replicaCount=2 \
  --set service.type=ClusterIP

# Listaa releaset ja tarkista Podit
helm list --namespace <oma-nimi>
kubectl get pods

Vaihtoehtoisesti ylikirjoita arvot arvotiedostolla:

bash
cat <<'EOF' > values.yaml
replicaCount: 2
service:
  type: ClusterIP
EOF

helm upgrade --install web bitnami/nginx --namespace <oma-nimi> -f values.yaml

C) Tutki ja debuggaa asennettu sovellus

bash
# Lokit
kubectl logs -l app.kubernetes.io/name=nginx

# Yhden podin tarkat tiedot ja tapahtumat
kubectl describe pod <pod>

# Aja komento podin sisällä
kubectl exec -it <pod> -- sh

🔎 Havainto: Sekä Rancherista että komentoriviltä Helmillä asennettu sovellus on sama Release. Voit hallita sitä kummalla tavalla tahansa – taustalla on sama Helm.

4. Siivoa harjoitus poistamalla release ja oma nimiavaruus:

bash
helm uninstall web --namespace <oma-nimi>
kubectl delete namespace <oma-nimi>

Yhteenveto

  • Helm niputtaa sovelluksen resurssit chartiksi; asennettu instanssi on Release, jonka arvot voi ylikirjoittaa (--set tai arvotiedosto).
  • Rancher Apps/Catalog tarjoaa samat Helm-chartit graafisesti – taustalla on Helm.
  • Kustomize muokkaa valmiita manifesteja patchaamalla (kubectl apply -k); ei mallipohjia.
  • Arjen vianetsintä: kubectl logs (lokit), kubectl describe (tapahtumat) ja kubectl exec (podin sisään).