spinny:~/writing $ less introduction-to-kubernetes.md
12Om 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.34## Före Kubernetes: Lite Historik561. **Traditionell Deployment**: Initialt kördes applikationer på fysiska servrar. Dyrt, svårt att skala och benäget för resurskonflikter.72. **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.83. **Containeriserad Deployment**: Containrar (som Docker) delar samma värd-OS men kör isolerade processer. De är lättviktiga, snabba att starta och portabla.910Containrar löste portabilitetsproblemet men skapade ett annat: hur hanterar man hundratals (eller tusentals) containrar i produktion?1112Det är här **Kubernetes** kommer in.1314## Vad är Kubernetes?1516Kubernetes (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).1718## Arkitekturen i ett Kubernetes-kluster1920```mermaid21graph TD22 subgraph "Control Plane (Master)"23 A["API Server"]24 B["etcd"]25 C["Scheduler"]26 D["Controller Manager"]27 end2829 subgraph "Worker Node 1"30 E["Kubelet"] --- F["Container Runtime"]31 G["Kube-proxy"]32 F --- H["Pod"]33 F --- I["Pod"]34 end3536 subgraph "Worker Node 2"37 J["Kubelet"] --- K["Container Runtime"]38 L["Kube-proxy"]39 K --- M["Pod"]40 end4142 A -- "Communicates with" --> E43 A -- "Communicates with" --> J44 User -- "kubectl" --> A45 C -- "Assigns Pods to Nodes" --> E46 D -- "Maintains state" --> A47 A -- "Saves/Reads state" --> B48```4950### Control Plane5152Control Plane är klustrets "hjärna". Dess huvudkomponenter:5354- **API Server (`kube-apiserver`)**: Porten till klustret. Exponerar Kubernetes API.55- **etcd**: En konsekvent nyckel-värde-databas som lagrar all klusterdata.56- **Scheduler (`kube-scheduler`)**: Tilldelar nya Pods till tillgängliga Worker Nodes.57- **Controller Manager (`kube-controller-manager`)**: Kör kontrollöglor som övervakar klustrets tillstånd.5859### Worker Node6061Worker Nodes är maskinerna där applikationerna faktiskt körs:6263- **Kubelet**: En agent som säkerställer att containrar körs och är friska.64- **Kube-proxy**: En nätverksproxy som hanterar nätverksregler.65- **Container Runtime**: Programvaran som kör containrar (Docker, `containerd`, `CRI-O`).6667## Grundläggande Kubernetes-objekt6869### Pod7071**Pod** är den minsta exekveringsenheten. Den representerar en eller flera containrar som körs tillsammans.7273### Deployment7475En **Deployment** beskriver det önskade tillståndet för en grupp identiska Pods.7677```yaml78# nginx-deployment.yaml79apiVersion: apps/v180kind: Deployment81metadata:82 name: nginx-deployment83spec:84 replicas: 385 selector:86 matchLabels:87 app: nginx88 template:89 metadata:90 labels:91 app: nginx92 spec:93 containers:94 - name: nginx95 image: nginx:1.14.296 ports:97 - containerPort: 8098```99100### Service101102En **Service** ger en **stabil åtkomstpunkt** för en grupp Pods.103104```mermaid105graph TD106 subgraph "Service (nginx-service)"107 A["ClusterIP: 10.96.0.10"]108 end109110 subgraph "Pods"111 B("Pod 1 - IP: 192.168.1.2")112 C("Pod 2 - IP: 192.168.1.3")113 D("Pod 3 - IP: 192.168.1.4")114 end115116 A -- "Selector: app=nginx" --> B117 A -- "Selector: app=nginx" --> C118 A -- "Selector: app=nginx" --> D119120 Client -- "Request to nginx-service" --> A121```122123```yaml124# nginx-service.yaml125apiVersion: v1126kind: Service127metadata:128 name: nginx-service129spec:130 selector:131 app: nginx132 ports:133 - protocol: TCP134 port: 80135 targetPort: 80136 type: ClusterIP # Default - exposes the service only within the cluster137```138139Typer av Services:140- `ClusterIP`: Exponerar tjänsten på ett kluster-internt IP (standard).141- `NodePort`: Exponerar tjänsten på en statisk port på varje Worker Node.142- `LoadBalancer`: Skapar en extern lastbalanserare hos molnleverantören.143144### Ingress145146En **Ingress** fungerar som en "intelligent router" för extern trafik.147148```mermaid149graph LR150 User -- "mysite.com/api" --> Ingress151 User -- "mysite.com/ui" --> Ingress152153 subgraph "Cluster"154 Ingress -- "/api" --> ServiceA("api-service")155 Ingress -- "/ui" --> ServiceB("ui-service")156157 ServiceA --> PodA1("API Pod 1")158 ServiceA --> PodA2("API Pod 2")159160 ServiceB --> PodB1("UI Pod 1")161 ServiceB --> PodB2("UI Pod 2")162 end163```164165```yaml166# example-ingress.yaml167apiVersion: networking.k8s.io/v1168kind: Ingress169metadata:170 name: example-ingress171spec:172 rules:173 - host: mysite.com174 http:175 paths:176 - path: /api177 pathType: Prefix178 backend:179 service:180 name: api-service181 port:182 number: 8080183 - path: /ui184 pathType: Prefix185 backend:186 service:187 name: ui-service188 port:189 number: 3000190```191192### Andra Användbara Objekt193194- **Namespace**: Skapar "virtuella kluster" inuti ett fysiskt kluster.195- **ConfigMap och Secret**: För att hantera konfigurationsdata och hemligheter.196- **StatefulSet**: Likt en Deployment, men specifikt för tillståndsbaserade applikationer.197- **PersistentVolume (PV) och PersistentVolumeClaim (PVC)**: För att hantera beständig lagring.198199## Slutsats200201Kubernetes är ett otroligt kraftfullt verktyg, men inlärningskurvan kan vara brant.202203**Vad ska du göra nu?**204- **Experimentera lokalt**: Installera [Minikube](https://minikube.sigs.k8s.io/docs/start/) eller [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/).205- **Använd `kubectl`**: Bekanta dig med `kubectl`-kommandot.206- **Utforska officiella tutorials**: [Kubernetes-dokumentationen](https://kubernetes.io/docs/tutorials/) är en fantastisk resurs.207208Containerorkestrering är en grundläggande färdighet i cloud-native-världen. Ha det kul!209
:Introduktion till Kubernetes: Containerorkestratornlines 1-209 (END) — press q to close