Om du arbetar inom mjukvaruutveckling har du säkert hört talas om Kubernetes. Men vad är det exakt, och varför har det blivit de facto-standarden för att hantera containeriserade applikationer? Denna guide tar dig från grunderna till de fundamentala koncepten, med praktiska exempel och diagram.
Före Kubernetes: Lite Historik
- Traditionell Deployment: Initialt kördes applikationer på fysiska servrar. Dyrt, svårt att skala och benäget för resurskonflikter.
- Virtualiserad Deployment: Sedan kom Virtual Machines (VM). VM:ar möjliggjorde flera isolerade applikationer på samma hårdvara, men varje VM kör ett helt operativsystem.
- Containeriserad Deployment: Containrar (som Docker) delar samma värd-OS men kör isolerade processer. De är lättviktiga, snabba att starta och portabla.
Containrar löste portabilitetsproblemet men skapade ett annat: hur hanterar man hundratals (eller tusentals) containrar i produktion?
Det är här Kubernetes kommer in.
Vad är Kubernetes?
Kubernetes (ofta förkortat K8s) är en plattform med öppen källkod för containerorkestrering. Det automatiserar deployment, skalning och hantering av containeriserade applikationer. Skapat av Google och nu underhållet av Cloud Native Computing Foundation (CNCF).
Arkitekturen i ett Kubernetes-kluster
Control Plane
Control Plane är klustrets "hjärna". Dess huvudkomponenter:
- API Server (
kube-apiserver): Porten till klustret. Exponerar Kubernetes API. - etcd: En konsekvent nyckel-värde-databas som lagrar all klusterdata.
- Scheduler (
kube-scheduler): Tilldelar nya Pods till tillgängliga Worker Nodes. - Controller Manager (
kube-controller-manager): Kör kontrollöglor som övervakar klustrets tillstånd.
Worker Node
Worker Nodes är maskinerna där applikationerna faktiskt körs:
- Kubelet: En agent som säkerställer att containrar körs och är friska.
- Kube-proxy: En nätverksproxy som hanterar nätverksregler.
- Container Runtime: Programvaran som kör containrar (Docker,
containerd,CRI-O).
Grundläggande Kubernetes-objekt
Pod
Pod är den minsta exekveringsenheten. Den representerar en eller flera containrar som körs tillsammans.
Deployment
En Deployment beskriver det önskade tillståndet för en grupp identiska Pods.
# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Service
En Service ger en stabil åtkomstpunkt för en grupp Pods.
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP # Default - exposes the service only within the cluster
Typer av Services:
ClusterIP: Exponerar tjänsten på ett kluster-internt IP (standard).NodePort: Exponerar tjänsten på en statisk port på varje Worker Node.LoadBalancer: Skapar en extern lastbalanserare hos molnleverantören.
Ingress
En Ingress fungerar som en "intelligent router" för extern trafik.
# example-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: mysite.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 8080 - path: /ui pathType: Prefix backend: service: name: ui-service port: number: 3000
Andra Användbara Objekt
- Namespace: Skapar "virtuella kluster" inuti ett fysiskt kluster.
- ConfigMap och Secret: För att hantera konfigurationsdata och hemligheter.
- StatefulSet: Likt en Deployment, men specifikt för tillståndsbaserade applikationer.
- PersistentVolume (PV) och PersistentVolumeClaim (PVC): För att hantera beständig lagring.
Slutsats
Kubernetes är ett otroligt kraftfullt verktyg, men inlärningskurvan kan vara brant.
Vad ska du göra nu?
- Experimentera lokalt: Installera Minikube eller Kind.
- Använd
kubectl: Bekanta dig medkubectl-kommandot. - Utforska officiella tutorials: Kubernetes-dokumentationen är en fantastisk resurs.
Containerorkestrering är en grundläggande färdighet i cloud-native-världen. Ha det kul!