Kubernetes perusteet

Kubernetes hallinta

Kuberneteksen komponentit, RKE2:n arkkitehtuuri ja klusterin tarkastelu Rancherissa ja komentoriviltä.

5 min lukuaika

Kuberneteksen hallinta

Tässä osiossa opit, mistä osista Kubernetes-klusteri koostuu, miten RKE2-jakelu toteuttaa nämä osat, ja miten klusteria tarkastellaan sekä Rancherin käyttöliittymästä että komentoriviltä. Koulutuksessa käytettävä klusteri on pilvessä ajettava RKE2-klusteri, jota hallitaan Rancherilla.


1. Mitä klusterin hallinta tarkoittaa?

Kubernetes-klusteri on joukko koneita (solmuja, nodes), jotka toimivat yhtenä kokonaisuutena konttien ajamiseen. Hallinnalla tarkoitetaan sitä, että ymmärrät:

  • mistä osista klusteri koostuu ja mikä on kunkin osan tehtävä,
  • miten osat kommunikoivat keskenään,
  • miten klusterin tilaa tarkastellaan ja vianetsintää tehdään.

Klusteri jakautuu kahteen rooliin:

  • Ohjaustaso (control plane) tekee päätökset ja säilyttää klusterin tilan.
  • Worker-solmut ajavat varsinaiset sovelluskontit.
flowchart LR
    subgraph CP[Ohjaustaso · Control Plane]
        API[kube-apiserver]
        ETCD[(etcd)]
        SCH[kube-scheduler]
        CM[kube-controller-manager]
    end
    subgraph W[Worker-solmut]
        KL[kubelet]
        KP[kube-proxy]
        CR[Container Runtime]
    end
    User[kubectl / Rancher] --> API
    API --- ETCD
    API --- SCH
    API --- CM
    API --- KL

2. Control Plane -komponentit

Ohjaustaso koostuu neljästä keskeisestä komponentista. RKE2:ssa ne ajetaan staattisina podeina (static pods) server-solmuilla.

kube-apiserver

Klusterin keskitetty rajapinta (REST API). Kaikki kommunikointi kulkee sen kautta – niin kubectl, Rancher kuin klusterin sisäiset komponentitkin. Se:

  • vastaanottaa ja validoi pyynnöt (autentikointi ja auktorisointi, RBAC),
  • on ainoa komponentti, joka lukee ja kirjoittaa etcd:hen,
  • toimii tapahtumien keskuksena, jota muut komponentit seuraavat (watch).

etcd

Hajautettu, vahvasti konsistentti avain–arvo-tietokanta, joka säilyttää klusterin koko halutun ja nykyisen tilan. Se on klusterin totuuden lähde (source of truth).

⚠️ Muista: etcd sisältää kaiken – myös Secretit. Sen varmuuskopiointi ja suojaus on kriittistä. RKE2 tekee etcd:stä automaattisia tilannevedoksia (snapshots).

kube-scheduler

Päättää, mille worker-solmulle uusi Pod sijoitetaan. Se ottaa huomioon mm.:

  • solmujen vapaat resurssit (CPU, muisti),
  • Podin resurssipyynnöt ja -rajat (requests/limits),
  • säännöt kuten nodeSelector, taints/tolerations ja affinity.

Scheduler ei käynnistä konttia itse – se vain kirjaa päätöksen apiserverin kautta.

kube-controller-manager

Ajaa joukkoa kontrollereita, jotka toteuttavat sovittelusilmukoita (reconciliation loop): ne vertaavat haluttua ja nykyistä tilaa ja tekevät korjaavat toimet. Esimerkkejä:

  • Node controller – seuraa solmujen terveyttä,
  • Deployment/ReplicaSet controller – pitää kopioiden määrän oikeana,
  • Job controller – ajaa kertaluontoiset tehtävät.
sequenceDiagram
    participant U as kubectl / Rancher
    participant A as kube-apiserver
    participant E as etcd
    participant S as kube-scheduler
    participant K as kubelet (worker)
    U->>A: Luo Deployment (haluttu tila)
    A->>E: Tallenna tila
    S->>A: Valitse solmu Podille
    A->>K: Käynnistä Pod solmulla
    K->>A: Raportoi tila (Running)

3. Worker-solmut

Worker-solmut (RKE2:ssa agent-solmut) ajavat sovelluskontit. Jokaisella solmulla on kolme keskeistä osaa.

kubelet

Solmun agentti, joka:

  • vastaanottaa apiserveriltä tiedon, mitkä Podit solmulla pitää olla ajossa,
  • käynnistää ja valvoo kontteja container runtimen kautta,
  • suorittaa terveystarkistukset (liveness/readiness probes),
  • raportoi solmun ja Podien tilan takaisin apiserverille.

kube-proxy

Hoitaa solmun verkkosäännöt ja ohjaa liikenteen Serviceille (esim. iptables- tai IPVS-sääntöjen avulla). Näin Palvelun (Service) virtuaalinen IP reitittyy oikeille Podeille.

Container Runtime

Ohjelmisto, joka käynnistää ja ajaa kontit. RKE2 käyttää containerd-ajuria. Runtime hoitaa konttikuvien lataamisen, konttien elinkaaren ja eristyksen.

💡 Control Plane -komponentitkin ajetaan lopulta kontteina worker-tason mekanismeilla: RKE2:ssa server-solmu ajaa sekä ohjaustason staattiset podit että kubelet- ja containerd-osat.


4. RKE2:n arkkitehtuuri

RKE2 (Rancher Kubernetes Engine 2) on Rancherin turvallisuuspainotteinen Kubernetes-jakelu. Se asentaa ja ylläpitää yllä kuvatut komponentit valmiiksi paketoituna.

Server- ja agent-solmut

  • Server-solmu (rke2-server) ajaa ohjaustason komponentit ja embedded etcd:n. Tuotannossa server-solmuja on tyypillisesti 3 korkean saatavuuden vuoksi.
  • Agent-solmu (rke2-agent) on worker-solmu, joka ajaa vain kubeletin, kube-proxyn ja containerdin sekä sovelluskuormat.

Keskeiset ominaisuudet

  • Supervisor – RKE2:n oma prosessi, joka käynnistää ja valvoo kubeletin sekä ohjaustason staattiset podit.
  • Embedded etcd – etcd ajetaan osana server-solmua; RKE2 hoitaa snapshotit.
  • containerd – sisäänrakennettu container runtime.
  • CNI-lisäosa – oletuksena Canal (Calico + Flannel); vaihtoehtoina mm. Cilium.
  • helm-controller – asentaa lisäosat (CNI, CoreDNS, ingress-nginx, metrics-server) automaattisesti klusterin käynnistyessä.
  • Staattiset podit – ohjaustason komponenttien manifestit ovat solmulla polussa /var/lib/rancher/rke2/agent/pod-manifests/.
flowchart TB
    subgraph RANCHER[Rancher · hallinta]
        UI[Rancher UI + API]
    end
    subgraph SRV[Server-solmut · rke2-server]
        direction TB
        S_API[kube-apiserver]
        S_ETCD[(embedded etcd)]
        S_SCH[kube-scheduler]
        S_CM[controller-manager]
        S_KL[kubelet + containerd]
    end
    subgraph AGT[Agent-solmut · rke2-agent]
        direction TB
        A_KL[kubelet]
        A_KP[kube-proxy]
        A_CR[containerd]
        A_POD[Sovelluspodit]
    end
    UI --> S_API
    S_API --- S_ETCD
    S_API --- S_SCH
    S_API --- S_CM
    S_API --- A_KL

Rancher yhdistää klusteriin agentin kautta ja tarjoaa graafisen näkymän solmuihin, podeihin ja työkuormiin. Sama tieto on saatavilla myös kubectl-komennoilla.


5. Rancher hallintakäyttöliittymänä

Rancher on Kuberneteksen hallinta-alusta, jolla voidaan luoda, tuoda ja hallita useita klustereita yhdestä paikasta. Koulutuksessa Rancher on käytössä RKE2-klusterin hallintaan.

Rancherin keskeiset näkymät:

  • Cluster Management – klusterien luonti ja tuonti sekä solmujen tilat.
  • Cluster Explorer – yhden klusterin sisäiset resurssit (Nodes, Pods, Deployments, Services, ConfigMaps, Secrets…).
  • Workloads – sovelluskuormien tarkastelu ja hallinta graafisesti.

Kaikki, mitä Rancherissa näet, tulee saman kube-apiserverin kautta kuin kubectl-komennot – Rancher on käyttöliittymä samaan rajapintaan.


6. Hands-on: solmut ja järjestelmäpodit (15 min)

Tarkastele klusterin osia sekä komentoriviltä että Rancherista. Varmista ensin, että sinulla on klusterin kubeconfig käytössä (ks. arkkitehtuuri-osion harjoitus) ja pääsy Rancheriin.

Varmista myös, että oma nimiavaruutesi (namespace) on luotu ja käytössä – siinä työskentelet myöhemmissä harjoituksissa:

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) Komentoriviltä (kubectl)

1. Listaa solmut ja niiden roolit:

bash
kubectl get nodes -o wide

Tunnista tuloksesta server-solmut (rooli control-plane,etcd,master) ja agent-solmut (worker). Sarakkeista näet myös solmun IP:n, käyttöjärjestelmän ja Kubernetes-version.

2. Tarkastele järjestelmäpodeja kube-system-nimiavaruudessa:

bash
kubectl get pods -n kube-system -o wide

Etsi tuloksesta RKE2:n komponentit, esimerkiksi:

  • etcd-<solmu>, kube-apiserver-<solmu>, kube-scheduler-<solmu>, kube-controller-manager-<solmu> – ohjaustason staattiset podit,
  • kube-proxy-<solmu> – verkkoproxy jokaisella solmulla,
  • rke2-canal-* / cilium-* – CNI-verkkolisäosa,
  • rke2-coredns-* – klusterin DNS,
  • rke2-ingress-nginx-*, rke2-metrics-server-* – lisäpalvelut.

3. Katso yhden solmun tarkemmat tiedot:

bash
kubectl describe node <solmun-nimi>

Kiinnitä huomiota kohtiin Roles, Taints, Capacity, Allocatable ja Conditions (esim. Ready=True).

4. Varmista klusterin perusterveys:

bash
kubectl cluster-info
kubectl get pods -n kube-system --field-selector status.phase!=Running

Jälkimmäisen komennon tulisi olla tyhjä – kaikki järjestelmäpodit ovat Running.

B) Rancherin käyttöliittymästä

  1. Kirjaudu Rancheriin ja avaa koulutusklusteri.
  2. Mene Cluster → Nodes. Vertaa solmujen määrää ja rooleja komennon kubectl get nodes tulokseen.
  3. Avaa Cluster Explorer → Workloads → Pods ja valitse nimiavaruudeksi kube-system. Etsi samat komponentit kuin komentoriviltä.
  4. Klikkaa yhtä podia (esim. kube-apiserver-*) ja tutki sen tila, tapahtumat (events) ja lokit.

🔎 Havainto: Rancher ja kubectl näyttävät saman tiedon, koska molemmat käyttävät samaa kube-apiserveriä. Käyttöliittymä on kätevä yleiskuvaan, komentorivi tarkkaan vianetsintään ja automaatioon.


Yhteenveto

  • Klusteri jakautuu ohjaustasoon (apiserver, etcd, scheduler, controller-manager) ja worker-solmuihin (kubelet, kube-proxy, container runtime).
  • kube-apiserver on kaiken kommunikoinnin keskus; etcd on totuuden lähde.
  • RKE2 paketoi nämä valmiiksi: server-solmut ajavat ohjaustason ja embedded etcd:n, agent-solmut ovat workereita. containerd on runtime ja Canal oletus-CNI.
  • Rancher on hallintakäyttöliittymä samaan apiserveriin – sama tieto on saatavilla myös kubectl get nodes ja kubectl get pods -n kube-system -komennoilla.