Kmom06: Container orchestration

By . Latest revision .

Er Microblog har fått många nya användare och ni behöver utöka er infrastruktur för att hantera trycket på servrarna. Ni börjar med att utöka hur ni använder Ansible och startar upp fler servrar och containrar på servrarna. Dock märker ni snabbt att det är krångligt och Ansible är inte gjort för att användas till detta. Istället börjar ni med att läsa på om container orchestration.

Kursmomentet är under uppdatering!

Påbörja inte förens denna gula ruta är borta!

Hur det är att lära sig kubernetes.

Hur det är att lära sig kubernetes.

PS! Om ni har fått kmom05 rättat, radera alla era resurser på Azure förutom er DNS zone.

Innan ni sätter igång med kursmomentet kolla att ert Microblog repo är synkat med originalet, Syncing a fork.

PS! Om ni har fått kmom05 rättat, radera alla era resurser på Azure förutom er DNS zone.

I detta kursmomentet ska ni jobba individuellt, ni får fortfarande diskutera och hjälpa varandra. Men eftersom ni bara har ett repo för gruppen behöver vi strukturera filerna i mappar. Filerna ni producerar ska läggas i mappen “kubernetes”. Skapa en undermapp per gruppmedlem med ert namn och lägga era filer i dem. T.ex. för mig hade det blivit “kubernetes/andreas/fil.yml”.

Vi kommer använda oss utav Kubernetes (K8s) för container orchestration men det är bra att känna till vilka andra verktyg som finns och lite om vad som skiljer dem åt.

#Container Orchestration

Container orchestration är det övergripandet namnet på verktyg som hantera livscykeln för många containers.

#Läs och titta

#Kubernetes

Ni ska lära er Kubernetes vilket är ett av de populäraste verktygen men samtidigt det mest komplicerade. Det innebär att det är mycket kopierande och skriva av.

Kubernetes har själva väldigt mycket och bra material för att lära sig Kubernetes och alla dess delar. En bra utgångspunkt är deras dokumentation, där finns länkar till det mesta.

#Läs och titta

Börja med en snabb introduktion till Kubernetes begrepp.

Kubernetes in 5 mins.

Om det inte var pedagogiskt nog förklaring av Kubernetes kan jag rekommendera följande video där de lär ut Kubernetes som en barnbok.

The Illustrated Children’s Guide to Kubernetes.

#Att göra

  • Jobba igenom modul 1-6 i Learn Kubernetes basics. För att få en bättre förståelse för grunderna i K8s (Kubernetes) och hur man kan interagera med det.

#Kubernetes yaml

Det finns två sätt att hantera objekt (pods, deployments, etc…) i K8s, imperative och declarative. I imperative kör vi kommandon i terminalen för att jobba mot ett K8s kluster, som ni gjorde i Kubernetes basics, och i declarative skriver vi konfiguration i filer och kör mot klustret.

Vi vill givetvis jobba declarative för att då kan vi spara konfigurationen i Git och vi behöver inte oroa oss för snowflake servrar eller att bara en person har kunskapen om klustret.

digitalocean förklarar [imperativ vs declarative](https://www.digitalocean.com/community/tutorials/imperative-vs-declarative-kubernetes-management-a-digitalocean-comic)

digitalocean förklarar imperativ vs declarative

Läs och titta

#Stateless applications

K8s bygger på virtualisering och containrar, vilket i grunden är stateless. Vi har inte tillgång till persistent data, när vi stänger ner en container så försvinner dess data. K8s och även Docker är i grunden byggt för att köra stateless applikationer, men när populariteten av verktygen har ökat har även användningsområden ökat och de har då lagt till olika lösningar för att få till persistent data (stateful). Men det är inte lika lätt att få till persistent data i K8s som det är i Docker.

#Läs och titta

#Att göra

#Stateful applications

Nu när ni har testat på att köra en stateless applikation i K8s ska ni lära er hur man kan köra en stateful applikation.

#Läs och titta

Kolla på följande videos om volymer i Kubernetes.

Kubernetes Volumes 1: emptydir, NFS, YAML, volumes, and intro to Persistent Volume Claims

Kubernetes Volumes 2: Understanding Persistent Volume (PV) and Persistent Volume Claim (PVC)

#Att göra

#Designa för Kubernetes

Ni har nu titta lite på hur en applikations design/arkitektur påverkar hur lätt det är att köra den i K8s. Det finns så klart flera saker som är bra att tänka på när man skapa sin applikation men även hur man sätter upp den i K8s.

#Läs och titta

#Kubernetes i Azure

Det finns en uppsjö av olika sätt och verktyg för att köra Kubernetes beroende på vilken miljö man vill köra det i. Man kan installera det lokalt, köpa in sig på redan uppsatta k8s miljöer eller tjänster som sätter upp k8s miljön åt oss. Vi ska använda sista alternativet, Azure’s AKS tjänst.

Ni ska nu jobba igenom en artikel som går igenom hur vi sätter upp ett kluster i AKS, installerar en demo och fixar HTTPS till den.

#Att göra

#Microblog i Kubernetes

Nu ska ni sätta upp Microbloggen i Kubernetes. Skapa ett nytt kluster i AKS med samma inställningar som ni gjorde sist, i videon. Arbetet är uppdelat i tre sektioner nedanför. Spara alla filer i kubernetes/ mappen.

#Mysql i Kubernetes

Jobba igenom Mysql i Kubernetes för att sätta upp en Mysql server i ert kluster. Den förutsätter att ni har skapat klustret och kopplat kubectl till det.

Ni behöver inte köra någon SQL kod då Migrations i Flask sköter det när vi startar Microblogen.

#Microblog deployment

Nästa steg är att skapa en deployment för Microblogen. Ni borde ha lärt er tillräckligt för att skapa en service, deployment och ingress för Microblogen. Er microblog deployment ska ha 2 replicas, så att det alltid finns två pods rullande som kan hantera trafik. Ni ska komma åt er Microblog med ert domännamn och använda HTTPS.

Kolla i er docker-compose.yml för vilka env variabler ni behöver för att starta containern. Ni kan använda mysql istället för en IP till database i env variabeln DATABASE_URL. OBS! starta inte containern med ett specifikt network i er deployment, vi låter K8s hantera nätverk.

För att felsöka kan ni använda följande kommandon.

kubectl get po

kubectl describe po

kubectl describe deployment microblog

kubectl logs <pod-name>

kubectl describe ingress

Ett tips är att lägga till en livenessProbe, på containern i er Deployment. Det används av K8s för att kolla om containern är redo att användas. K8s kommer pinga / och kolla vad den får tillbaka för status kod, alla mellan 200 och 399 så tolkas det som att containern mår bra och kan användas.

       ...
       livenessProbe:
          httpGet:
            path: /
            port: 5000
        ...

När ni kan se er microblog via webbläsaren med ett domännamn är ni klara.

#Automatisk skalning av er deployment

När ni har fått upp microblogen och kopplat på er domän ska ni testa att automatiskt skala er Microblog deployment, med hjälp av Horizontal Pod Autoscaler.

#Läs och titta

#Att göra

Jobba sen med i följande video för att testa på att skala er deployment.

Autoscale ett kubernetes kluster med HPA.

#Testa olika driftsättningsstrategier i Kubernetes

Om ni vill och har tid över kan ni testa olika driftsättningsstrategier med Kubernetes. Jag har inte hunnit testa dem än, så jag vet inte om det funkar (men det borde göra det).

När ni har gjort det kan ni radera ert AKS kluster i Azure, ni behöver bara lämna in filerna för rättning.

#Kubernetes i produktion

Vårt kluster är väldigt simpelt, det är mer ett utvecklings kluster än något man hade kört i produktion. För att få en inblick i vad som krävs för att lyckas med Kubernetes i produktion ska ni läsa följande artiklar:

#Läs och titta

Kolla på “Running Kubernetes in Production: A Million Ways to Crash Your Cluster” där Henning Jacobs från websidan Zalando.se pratar om hur de använder Kubernetes och vad de lärt sig av att köra det i produktions miljön.

Running Kubernetes in Production: A Million Ways to Crash Your Cluster

#Uppgifter

Följande uppgifter skall utföras och resultatet skall redovisas via me-sidan.

  1. Sätt upp Microbloggen i Kubernetes på AKS, skapa alla objekten deklarativt och spara filerna i kubernetes mappen.

  2. Radera ert AKS kluster.

  3. Försäkra dig om att du har pushat repot med din senaste kod.

#Läsanvisningar

Läsanvisningar hittar ni på sidan bokcirkel.

Kolla i lektionsplanen för att se när vi träffas för bokcirkeln.

#Resultat & Redovisning

Svara på nedanstående frågor individuellt, lämna in på Canvas tillsammans med länken till ert gemensamma GitHub-repo och domännamn till microblog sidan.

Se till att följande frågor besvaras i texten:

  1. Vad är Container orchestration?

  2. Vad är ert första intryck av Kubernetes? Skulle ni vilja använda det i framtiden?

  3. Varför är det svårare med stateful applikation jämfört med stateless i k8s?

  4. Vad ska vi tänka på när vi designar ett projekt som ska köras i K8s?

  5. Vad är viktigt att tänka på när man ska köra K8s i produktion?

  6. Hur känns det efter att ni använt K8s, var det lika svårt som alla skriver/säger att det är?

  7. Testade ni de olika driftsättningsstrategierna? Funkade det?

#Revision history

  • 2021-12-03: (C, aar) Bytt Minikube till AKS.
  • 2020-12-04: (B, aar) Bytt AWS till Minikube.
  • 2019-10-15: (A, aar) Första versionen.

Document source.