Kubernetes, Docker og Orkestrering
Hva er Kubernetes, og hvordan henger det sammen med Docker?
Kubernetes er en åpen kildekodeplattform for orkestrering av containere – det vil si at den styrer hvordan og hvor containerbaserte applikasjoner kjøres. Opprinnelig ble Kubernetes utviklet for å administrere Docker-containere, og selv om den nå støtter andre OCI-kompatible runtime-miljøer, er Docker fortsatt den mest brukte metoden for å bygge og levere container-images.
Med Docker bygger du “images” som inneholder applikasjonen din og alle dens avhengigheter. Kubernetes tar disse image-filene, starter dem som “pods” (den minste deployerbare enheten i Kubernetes), og sørger for at riktig antall kopier alltid kjører og at de blir restarte ved feil. Dermed danner Docker og Kubernetes sammen en komplett arbeidsflyt for deploy og drift av moderne applikasjoner.

Installer Minikube på Ubuntu
Minikube lar deg kjøre et lokalt Kubernetes-cluster for utvikling og testing. Følg disse stegene for å sette opp Minikube på Ubuntu:
-
Oppdater pakkelisten og installer virtualiseringskomponenter:
sudo apt-get update sudo apt-get install -y virtualbox virtualbox-ext-pack
-
Last ned og installer Minikube:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
-
Start et lokalt cluster:
minikube start --driver=virtualbox kubectl get pods -A
Enkel Deployment og Service med YAML
La oss se på et praktisk eksempel. Nedenfor finner du et YAML-manifest som definerer en Deployment og en tilhørende Service for en enkel Node.js-applikasjon.
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deploy
spec:
replicas: 3
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello-container
image: min-node-app:latest
ports:
- containerPort: 3000
---
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
selector:
app: hello
ports:
- port: 3000
targetPort: 3000
nodePort: 30007
Disse filene kan deployeres med:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
Når de er deployert, kan du nå applikasjonen via NodeIP:30007
.
Sikkerhetstips for Kubernetes
For å sikre at ditt Kubernetes-miljø er robust, bør du ta i bruk følgende tiltak:
- RBAC (Role-Based Access Control): Opprett roller og service accounts for å begrense hvem som kan gjøre hva i clusteret.
- NetworkPolicies: Definer retningslinjer som styrer trafikken mellom pods.
- Secrets og ConfigMaps: Oppbevar sensitive data (f.eks. passord og API-nøkler) sikkert.
Alternativer: Docker Swarm og Cluster
Selv om Kubernetes er den mest brukte orkestreringsløsningen i dag, finnes det også andre alternativer:
- Docker Swarm: En enklere, integrert løsning fra Docker for å orkestrere containere. Docker Swarm er lettere å sette opp, men tilbyr færre avanserte funksjoner enn Kubernetes. Den er ideell for mindre miljøer der kompleksiteten ikke er nødvendig.
- Cluster: Begrepet “cluster” refererer til en gruppe maskiner (noder) som samarbeider for å kjøre applikasjoner. I Kubernetes består et cluster av en master (kontrollplan) og flere worker-noder som kjører pods. I Docker Swarm består et cluster av manager- og worker-noder, der managerne styrer clusterets tilstand.
Både Kubernetes og Docker Swarm er designet for å administrere containere på tvers av flere noder, men Kubernetes gir mer avanserte funksjoner for skalering, selvhelbredelse og sikkerhet.
Kubernetes i DevSecOps
Kubernetes er en essensiell del av DevSecOps fordi det automatiserer deploy, skalerer applikasjoner og sikrer at applikasjoner kjøres på en konsistent og sikker måte. Ved å integrere Kubernetes med:
- Docker: Bruk Docker til å bygge images som deretter kjøres i Kubernetes pods.
- Infrastructure as Code: Bruk verktøy som Terraform for å provisjonere miljøet før containerne deployeres.
- CI/CD pipelines: Automatiserte pipelines kan bygge, teste og skanne Docker-images før de rulles ut i et Kubernetes-cluster.
Denne integrasjonen sikrer at sikkerhet og stabilitet er innebygd i hele utviklings- og deployprosessen, fra koding til drift og monitorering.