Oleksandr Fedoruk

Software engineer, lecturer, researcher

Programowanie w chmurze – laboratorium 3

Celem tego laboratorium jest zapoznanie się z Deployment oraz rollout’ami w K8s.

W ramach wykonywanych poleceń przygotujesz Deployment, zreskalujesz liczbę Podów, zbudujesz nowszą wersję aplikacji i wdrożysz ją używając strategii Rollout.

  1. Zbuduj obraz aplikacji webowej używając dowolnego frameworka/narzędzia tak, by pod adresem ‘/’ był zwracany string “Wersja 1.0.0” lub JSON z podobną treścią. Przy budowaniu użyj taga v1, np.:

    $ docker build -t my-app:v1 .

    Pamiętaj, że K8s domyślnie próbuje pobierać obrazy z registry więc jeśli nie chcesz pushować zbudowanego obrazu na Dockerhub, upewnij się, że budujesz obraz w otoczeniu K8s:

    $ eval $(minikube docker-env) – ustawia zmienne środowiskowe powłoki by korzystawała z daemona Dockerowego wewnątrz Minikube. By sprawdzić czy zadziałało poprawnie wykonaj

    $ docker info | grep Name, powinno zwrócić linijkę jak np. Name: minikube.


  2. Przygotuj Deployment w uruchamiający 2 repliki tej aplikacji. Ustaw imagePullPolicy: Never by korzystać ze wcześniej zbudowanego obrazu.
  3. Sprawdź Pody i dopisz wynik do pliku report.txt.

    $ { date; kubectl get pods; } >> report.txt
  4. Podbij liczbę replik Poda w Deployment do 4, zaaplikuj zmiany, sprawdź Pody.
  5. Dopisz listę Podów oraz opis stanu Deployment do pliku report.txt.

    $ { date; kubectl get pods; kubectl describe deployments <nazwa deployment>; } >> report.txt

  6. Zmodyfikuj konfiguracje deploymentu. Dodaj następujące parametry:

    revisionHistoryLimit: 3
    progressDeadlineSeconds: 300
    minReadySeconds: 10


    oraz ustaw strategię nowych wdrożeń by korzystała z RolloutUpdate przy maxUnavailable: 1 oraz maxSurge: 1.
  7. Zaaplikuj zmiany i zapisz nowy stan Deployment do report.txt

    $ { date; kubectl describe deployments <nazwa Deployment>; } >> report.txt.
  8. Stwórz nowy Service typu NodePort by udostępnić uruchomioną aplikację.
    W zależności od OS możesz zweryfikować poprawność działania poprzez:

    $ curl $(minikube ip):<nodePort z Service>

    albo na MacOS poprzez uruchomienie:

    $ minikube service <nazwa uruchomionego Service>

    I potem:

    $ curl <ip z wyniku polecenia wyżej>:<nodePort z Service>.
  9. Dopisz wynik polecenia powyżej do pliku report.txt:

    $ curl $(<polecenie z poprzedniego kroku) >> report.txt
  10. Zmodyfikuj aplikacje by zwracała “Wersja 2” zamiast “Wersja 1”, zbuduj nowy obraz otagowany jako v1.

    $ docker build -t my-app:v2 .
  11. Podmień tag obraza z v1 na v2 w pliku yaml Deployment. Zaaplikuj zmiany. Zapisz stan do pliku reports.txt:

    $ { date; kubectl describe deployments <nazwa Deployment>; } >> report.txt.

    Dopisz output z aplikacji do pliku reports.txt jak w kroku 9.