Laboratorul 05. Kubernetes

5.1. Pods

Nota: pe parcursul laboratoarelor de mai jos, va rog sa inlocuiti “id” cu numarul aferent fiecarui student.

  • Adaugam credentialele pentru clusterul de kubernetes

mkdir ~/.kube

cp config ~/.kube

kubectl get nodes

  • Observam contextul actual folosit
  • Verificam conexiunea si observam contextul folosit

kubectl config view

  • Creare namespace student.
  • Fiecare student isi va crea propriul namespace, folosind id-ul student aferent.

kubectl create ns student[id]

kubectl get ns

  • Configuram kubectl sa foloseasca ca namespace implicit namespace-ul propriu.

kubectl config set-context –current –namespace=student[id]

kubectl config view

  • Editam fisierul “pod01.yaml” cu id-ul aferent fiecarui student, apoi creem un pod conform definitiei din fisier. Pod-ul se va crea in aproximativ 10 secunde. Observati output-ul celor doua comenzi get. Folositi id-ul aferent.

kubectl apply -f pod01.yaml

kubectl get pods

kubectl get pods webserver-student-id -owide

kubectl get pods webserver-student-id -oyaml

  • Intram in pod-ul nou creat si observam.

kubectl exec -it webserver-student-id – bash

root@webserver-student-id:/# cat /etc/os-release

PRETTY_NAME=“Debian GNU/Linux 10 (buster)”

NAME=“Debian GNU/Linux”

VERSION_ID=“10”

VERSION=“10 (buster)”

VERSION_CODENAME=buster

ID=debian

HOME_URL=“https://www.debian.org/

SUPPORT_URL=“https://www.debian.org/support

BUG_REPORT_URL=“https://bugs.debian.org/

root@webserver-student-id:/# exit

kubectl logs webserver-student-id

  • Stergem pod-ul creat anterior.

kubectl delete pod webserver-student-id

kubectl get po -o wide # Should output “No resources found.”

  • Cream un pod ce contine doua containere

kubectl apply -f pod02.yaml

kubectl get po -o wide

kubectl describe pod webserver

  • Rulati comenzile urmatoare una cate una si observati ca va aflati in containere diferite ale aceluiasi pod.

kubectl exec -it webserver -c webwatcher – /bin/bash

root@webserver:/# cat /etc/os-release

kubectl exec -it webserver -c webserver – /bin/bash

root@webserver:/# cat /etc/os-release

  • Stergem ceea ce am creat folosind comanda de mai jos

kubectl delete -f pod02.yaml

  • Cream pod-ul 3 folosind fisierul pod03.yaml. Avem dooua containere care impart acelasi volum.

kubectl apply -f pod03.yaml

  • Observati in definitia pod-ului cum este montat volumul html in cele doua containere
  • Mai departe verificam faptul ca aceleasi date sunt prezente in ambele containere

kubectl exec webserver -c c1 – /bin/cat /usr/share/nginx/html/index.html

kubectl exec webserver -c c2 – /bin/cat /html/index.html

  • Stergem pod-ul creat anterior

kubectl delete pod webserver

  • Pentru partea a 2-a (din 3) a laboratorului, rulati comanda:

cd ../Laborator2

5.2. Deployments, stateless/stateful

Deployments - de obicei folosit de aplicatii stateless

  • Creeaza primul tau deployment folosind commanda urmatoare:

kubectl apply -f deploy-01.yaml

  • Observam detaliile deployment-ului

kubectl get deployments

kubectl get pods

kubectl get replicaset

  • Scalam deployment-ul in sus, crescand numarul de replici

kubectl scale deployments/nginx-deployment –replicas=4

kubectl get pods -o wide # vom vedea 4 pod-uri

  • Scalam deployment-ul in jos. Reducem numarul de pod-uri

kubectl scale deployments/nginx-deployment –replicas=2

kubectl get pods -o wide

  • Schimbam imaginea folosita in deployment utilizand comanda urmatoare:

kubectl set image deployments/nginx-deployment nginx=nginx:1.9.1

  • Facem revert la deployment-ul anterior cu imaginea de docker anterioara

kubectl rollout undo deployments/nginx-deployment

kubectl rollout status deployments/nginx-deployment

kubectl describe deploy nginx-deployment

  • Stergem deployment-ul

kubectl delete deployment nginx-deployment

Statefulset - aplicatii stateful

  • Pe fiecare masina student exista instalat si configurat nfs server cu export-urile:

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

  • Verificam ca functioneaza mount-urile:

sudo showmount -e localhost

  • Fiecare student va folosi propria adresa ip, mai departe in cadrul acestui laborator.
  • Adresa ip poate fi obtinuta folosind comanda de mai jos

ip -f inet addr show ens3

  • Editati fisierele nfs-0001.yaml si nfs-0002.yaml, adaugand adresa ip proprie in campul spec.nfs.server si actualizati campul metadata.name cu id-ul de student aferent.
  • Cream volume persistente astfel:

kubectl apply -f nfs-0001.yaml

kubectl apply -f nfs-0002.yaml

  • Observam volumele create

kubectl get pv | grep studentid

kubectl describe pv <pv_name>

  • Cream un statefulset folosind comanda de mai jos:

kubectl apply -f statefulset-01.yaml

  • Observam statefulset-ul creat

kubectl get statefulset

kubectl describe statefulset

kubectl get pods

  • Verificam ca datele de pe disk sunt disponibile in container
  • Scriem date in volumele de pe disk

echo 'Hello World' /exports/data-0001/index.html echo “Hello $USER” > /exports/data-0002/index.html

  • Verificam in pod-uri. Comenzile urmatoare ar trebui sa afiseze continutul fisierului index.html de pe disk

kubectl exec -it web-0 – cat /usr/share/nginx/html/index.html

kubectl exec -it web-1 – cat /usr/share/nginx/html/index.html

  • Cream un serviciu care sa acceseze statefulset-ul

kubectl create -f service.yaml

  • Observam cum serviciul se conecteaza la backend (campul Endpoints:)

kubectl describe svc nginx

  • Curatam mediul

kubectl delete -f statefulset-01.yaml

  • Trecem la urmatorea parte din laborator

cd ../Laborator3

5.3. Daemonsets

  • Daemonset-urile sunt resurse stateless, folosite pentru a putea rula, spre exemplu, un proces pe toate nodurile din cluster.
  • Daemonset-urile se asigura ca anumite nod-uri Kubernetes sau chiar toate ruleaza o copie a unui pod.
  • Editam continutul fisierului daemonset.yaml, actualizand “student[id]” cu id-ul corespunzator

vi daemonset.yaml

  • Aplicam fisierul “daemonset.yaml”

kubectl apply -f daemonset.yaml

  • Verificam ca pod-urile au pornit. Vom vedea ca s-au creat 3 pod-uri, cate unul pe fiecare worker node.

kubectl get pods -owide kubectl describe daemonset daemonset-studentid

  • Editam fisierul “daemonset.yaml”, decomentam liniile 16,17 si 18 .

vi daemonset.yaml

  • Aplicam din nou fisierul “daemonset.yaml”

kubectl apply -f daemonset.yaml

  • Unordered List ItemVerificam starea daemonset-ului si a pod-urilor. Observam ca s-a creat un pod si pe nodul master.

kubectl get daemonset kubectl get pods -owide

  • Incercati sa stergeti un pod creat de daemonset.

kubectl delete pod daemonset-student[id]-xxxxx

  • Curatam mediul

kubectl delete daemonset daemonset-student[id]

sau

kubectl delete -f daemonset.yaml

devops/laboratoare/05.txt · Last modified: 2021/07/28 16:54 by bogdan.croitoru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0