Site blog

Picture of Mats Johannesson
by Mats Johannesson - Thursday, 5 March 2020, 9:13 PM
Anyone in the world

Roll för Ops och för Dev


Arbeta med bestående lagring i Kubernetes


När jag har läst dokumentationen från Kubernetes, så har det varit lite svårt att förstå hur detta konfigureras. Så det är väl lika bra att gå igenom detta steg för steg.


Övergripande steg

  1. Konfigurera lagring.
  2. Skapa .yaml-fil för lagring  (ansvaret ligger på Ops). 
  3. Skapa .yaml-fil för begäran (eng. claim) (ansvaret ligger på Dev).
  4. Skapa .yaml-fil för pod som för lagringsdelen refererar til claim (ansvaret ligger på Dev).
  5. Starta pod.
Beroende lite på funktionalitet kan storageClass behöva konfigureras. I mitt kursmaterial finns detta beskrivet dels i det teoretiska materialet, men även i en övning där lokal lagring skall användas. 


Steg 1. Konfigurera lagring

Detta beror på vilken typ av lagring som skall användas. I mina övningsexempel används både lokal lagring på nod (easec-linux2) och på NFS-server. Båda dessa kommer att behöva konfigureras. Kubernetes kan arbeta med en mängd olika typer av lagring och som finns både lokalt och i molntjänst.

Exemplet i denna blogg kommer att använda NFS-server. För att underlätta lite i kurs- och labbsammanhang har .easec tagit fram en docker-container för detta syfte. Dockerfile för denna container finns här: https://github.com/easec/nfs-server . I andra sammanhang är det alltid bäst att sätta upp en "riktig" NFS-server.

Förutsättningar: Docker installerat och Kubernetes uppsatt enligt .easec:s specifikationer. git installerat liksom nfs-utils  (på Ubuntu: sudo apt-get install nfs-kernel-server) på alla ingående maskiner.

På https://github.com/easec/Kubernetes finns alla .yaml-filer som refereras, klona dessa till din hemmakatalog med kommandot git clone https://github.com/easec/Kubernetes.git .


1. Öppna terminalfönstret och skriv in följande kommando och klicka på Enter efter varje rad:

    docker run -d --net=host \ 

    --privileged --name nfs-server \

    easec/nfs-server \

    /exports/data-0001 /exports/data-0002

    Container kommer att exponera två stycken kataloger, /exports/data-0001 och /exports/data-0002.


Steg 2: Skapa .yaml-fil för lagring (pv)

1. Om du har klonat mitt arkiv, förflytta dig till katalogen Kubernetes/persistent-volumes.

2. Öppna filen nfs-0001.yaml i din editor.

nfs-0001

Lägg märke till att kapacitet anges under spec:, accessModes anger typ av access, i mitt kursmaterial har jag beskrivit de olika typerna av access som finns. På ett liknande sätt finns det även beskrivit de olika typerna av persistentVolumeReclaimPolicy som finns. Under nfs: anges anslutningsinformation till den maskin där docker-container med NFS-server körs och i detta fallet den första katalogen.

3. Applicera denna .yaml-fil med kommandot: kubectl create -f nfs-0001.yaml .

4. Öppna filen nfs-0002.yaml i din editor.

nfs-0002

Denna .yaml-fil liknar den första, med två undantag. Det första undantaget är kapaciteten (i den första var den satt till 2Gi) som är satt till 5Gi och det andra undantaget är referens till katalog och i detta fallet pekar denna på den andra katalogen som exponeras av NFS-server.

5. Applicera denna .yaml-fil med kommandot: kubectl create -f nfs-0002.yaml .

kubectl get pv

6. För att se alla PersistentVolumes i klustret, använd kommandot kubectl get pv .

 

Steg 3: Skapa .yaml-fil för claim (pvc)

1. Öppna filen pvc-mysql.yaml i din editor.

pvc-mysql.yaml

Denna fil beskriver vad som begärs av eventuell pod som kopplas mot denna claim. I detta fallet kommer det att krävas att lagringen har möjlighet att exponera 3Gi. Går du tillbaks lite i denna bloggtext, så ser du att det är bara pv mot nfs-0002 som har denna kapacitet.


2. Applicera denna .yaml-fil med kommandot: kubectl create -f pvc-mysql.yaml .

3. Öppna filen pvc-http.yaml i din editor.

pvc-http.yaml

Precis som tidigare fil (pvc-mysql.yaml) beskriver denna vad som begärs av eventuell pod som kopplas mot denna claim. I detta fallet kommer det att krävas att lagringen har möjlighet att exponera 1Gi.

4. Applicera denna .yaml-fil med kommandot: kubectl create -f pvc-http.yaml .

kubectl get pvc

5. För att se alla claims i klustret, använd kommandot kubectl get pvc . När du har kört kommandot, kommer du att se att claim-http är associerat med nfs-0001 och claim-mysql är associerat med nfs-0002. Du kan även se den totala kapaciteten för respektive lagring.


Steg 4: Skapa .yaml-fil för pods

1. Öppna filen pod-mysql.yaml i din editor. 

pod-mysql

Under sektionen containers kan du se att pod kommer att baseras på avspeglingen openshift/mysql-55-centos7, ett antal miljövariabler är definierade (i produktion används exempelvis Secrets för detta), monterar volym till katalogen /var/lib/mysql/data. Under sektionen volumes finns referens till claim-mysql.

2. Öppna filen pod-http.yaml i din editor. 

pod-html

Under sektionen containers kan du se att pod kommer att baseras på avspeglingen nginx:alpine, port 80 kommer att exponeras, monterar volym till katalogen /usr/share/nginx/html. Under sektionen volumes finns referens till claim-http.


Steg 5: Starta pods
1. Starta pod-mysql med kommandot: kubectl create -f pod-mysql.yaml . Vi kommer inte att använda denna, annat än för att se att den plockar "rätt" lagring utifrån claim.


2. Starta pod-http med kommandot: kubectl create -f pod-http.yaml .

kubect get pods

3. Använd kommandot kubectl get pods för att verifiera att dessa körs. Tänk på om du inte installerade nfs-utils (på Ubuntu: sudo apt-get install nfs-kernel-server) på noderna, kommer någon pod att stå läget att den skapas under längre tid. För att se vad som händer, kan du använda kommandot kubectl describe pod <namnet_på_denna_pod>, troligtvis har du ett felmeddelande att volym inte kan monteras. Installera nfs-utils och strax kommer du att se att pod är i läget Ready,


Extra: verifiera funktion

docker exec

1. Anslut till docker-container nfs-server och skapa index.html, använd kommandot:  docker exec -it nfs-server bash -c "echo '<h1> The end is near</h1>You are not getting any younger and neither are your forms.' > /exports/data-0001/index.html" . Om du vill ansluta till pod kan du använda kommandot kubectl exec -it <namn_på_pod> bash .

ip

2. Ta reda på IP-adress för pod, genom att använda följande kommando: ip=$(kubectl get pod www -o yaml | grep podIP | awk '{split($0,a,":"); print a[2]}'); echo $ip .

curl_ip

3. Verifiera med kommandot curl $ip att texten du skrev in under punkt 1 visas.

the end is near

4. Om du har webbläsare, kan du ansluta denna till pod och texten du skrev in under punkt  1 visas.

I .easec:s kurs arbetar du vidare med dessa pods.


Rensa

Använd stegen nedan för att rensa din miljö!

1. Använd kommandot kubectl delete pod www mysql för att plocka bort pods.

2. Använd kommandot kubectl delete pvc claim-http claim-mysql för att plocka bort pvc.

3. Använd kommandot kubectl delete pv nfs-0001 nfs-0002 för att plocka bort pv.

4. Använd kommandot docker stop nfs-server && docker rm nfs-server för att stänga ner docker-container och plocka bort denna.






[ Modified: Friday, 6 March 2020, 10:39 AM ]
 

  
RSS