Containerorkestrering (k8s)

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]

Snabbstart

En snabbguide till att installera och komma igång med Kubernetes i CSCloud (men kan även genomföras via virtuella maskiner). Vi använder kubeadm för att sätta upp en master och ansluter sedan en nod till denna.

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

En interaktiv version av Snabbstart. Jag 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: Applikation

I den sista demot tittar vi på hur en applikation kan driftsättas i Kubernetes. Vi utgår från exemplet från Docker Compose, och sätter upp neo4j, movie-rest-API:et och en nginx proxy. Proxyn kopplas mot en OpenStack-lastbalancerare så att API:et kan nås från omvärlden via ett floating ip. Vi försöker använda allt vi tittat på i modulen: beständiga volymer, privata registries, configmaps, osv.

Du hittar de filer jag använder på gitlab

(Video (35:50)]

Introduktion till Examinationsuppgift 3

En kort presentation av vad ni skall göra i Examinationsuppgift 3. Allt som sägs står i texten, men videon ger vissa förklaringar kring uppgiften. Läs texten innan du tittar på videon och om du tycker att allt är klart kan du skippa videon. Är det fortfarande oklart efter videon, fråga på Slack.

[Video (12:17)]