Theory and demos

Introduktion

Denna modul fokuserar på containerorkestrering, specifikt hur det görs med Kubernetes. Containerorkestrering handlar om att hantera en stor mängd containers, t.ex. som del av en driftsatt applikation, och behandlar hur man skapar skalbarhetet och tillförlitlighet.

[Video (8:48)] [Presentation]

Kubernetes

Kuberentes är en open-source containerorkestrator från Google. Den kan anses vara standard idag och kan köras i de flesta molnplattformar samt on-prem. Då Kubernetes löser ett komplext problem är den i sig också ganska komplex, så vi börjar med en översikt kring dess arkitektur och viktigaste komponenter.

[Video (29:41)] [Presentation]

Minikube

För att få möjlighet att testa kubernetes på ett enkelt sätt och kunna labba så är det smidigt att ha ett lokalt kluster. Samtidigt kan det vara lite bökigt att sätta upp så vi kommer att använda Minikube. Vi rekommenderar därför att du nu installerar minikube på din dator som förhoppningsvis kör Docker Desktop.

Installationsinstruktioner, Minikube

Morgan kommer att installera sitt kluster i CSCloud och sedan använda detta framöver, men det går lika bra att köra Minikube i detta läge. Vi kommer senare att titta på att skapa ett kluster med Terraform (Se Demo 6). Du kan alltså hoppa över "Kubernetes på CSCloud" samt "Demo 1" och gå vidare till "Pods och Deployments"

Kubernetes på CSCloud (frivillig)

Jag använder cloud-init för att sätta upp maskinerna. För den som inte vill skriva eget finns mitt tillgängligt.

[Video (16:04)] [Presentation]

Demo 1: Installation av kubernetes på CSCloud (frivillig)

En interaktiv version av Snabbstart. Vi rekommenderar att ni tittar på båda.

(Video (21:13)]

Pods och Deployments

Pods används för att köra containers och är således en central del av Kubernetes. Vi börjar med att starta "bare" pods, går vidare och diskuterar controllers. Deployments är ett bättre sätt att starta pods som bygger på controllers. För att förstå dessa behöver vi även känna till labels och selectors, vilka diskuteras innan vi avslutar med ett exempel på en deployment.

[Video (27:15)] [Presentation]

Demo 2: Pods

Kort demo av hur man skapar Pods och Deployments med kubectl-kommandon och YAML-filer.

(Video (22:08)]

Nätverk och Services

Vi behöver (så klart) nätverk för att kunna driftsätta tjänster som skall nås via nätverket. Av naturliga skäl måste nätverk vara lite komplext i Kubernetes, så vi diskuterar de tre olika nätverken vi har i ett kluster samt hur dessa samspelar. En Service är ett sätt att knyta en beständig accesspunkt till en samling tillfälliga pods. Vi diskurar hur NodePort och ClusterIP används för att att skapa denna beständiga accesspunk, samt när man bör använda dessa (spoiler: ClusterIP om den endast behöver nås av andra pods, NodePort om vi vill skicka extern trafik till den).

[Video (32:15)] [Presentation]

Demo 3: Services

Demo av Services. Vi börjar med nginx och sätter upp en service med några replikor som "lastbalanceras" mellan. Vi sätter sedan upp vår eget Flask/Python-api, diskuterar kort privata "docker registries", och visar att det verkligen balanserar mellan olika Pods. Vi byter från ClusterIP till NodePort och sätter upp en OpenStack-lastbalancerare på de NodePorts vi skapar och exponerar tjänsten för världen på ett floating ip.

(Video (30:38)]

Lagring och konfiguration

Vissa containers/pods har tillstånd, t.ex. en databashanterare, vilket passar deras korta livslängd illa. Vi hanterar detta genom att koppla beständiga volymer till Pods/Containers. Detta görs med hjälp av PersistentVolume och PV Claims i Kubernetes, så vi diskuterar dessa samt Storage Classes. Vi diskuterar även hur vi kan göra Pods/Containers mer generella/portabla genom att specificera parametrar, t.ex. portnummer och användarnamn med miljövariabler. Ett smidigt sätt att hantera dessa är ConfigMaps, som även hjälper oss byta ut eller lägga till konfigurationsfiler i en image.

[Video (23:56)] [Presentation]

Demo 4: Lagring

Vi sätter upp nginx med en volym för webbsidor och testar olika sätt att konfigurera containers med configmaps.

(Video (30:42)]

Säkerhet

Kubernetes har inte någon inbyggt system för användare och grupper utan förlitar sig på plugins. Vi tittar översiktligt på hur detta fungerar samt hur dess regelbaserade system för att bestämma vad en användare får göra (RBAC) fungerar.

[Video (16:23)] [Presentation]

Demo 5: Just Task It in development

Demo 6: Just Task It in production