Wybierz region
pl
  • PL
  • EN
Wydrukuj

Kubernetes dla .NET Developerów w przykładach dla .NET Core – część 2

W poprzedniej części skupiliśmy się na opisie rozwiązania Docker oraz Kubernetes. Wyjaśniliśmy sposób działania tych rozwiązań, ich historię oraz motywacje powstania.

W obecnej części uruchomimy swój pierwszy klaster Kubernetesa oraz wdrożymy na nim naszą pierwszą aplikacje napisaną dla .NET Core.

Lokalny klaster Kubernetes 

Uruchomienie klastra Kubernetesa na lokalnej maszynie wymaga użycia zasobów komputera. Zalecany jest komputer o kilku rdzeniach i o minimalnej wolnej pamięci 16GB RAM. Do uruchomienia naszego lokalnego klastra Kubernetesa użyjemy następujących narzędzi:

Po instalacji narzędzie Oracle Virtualbox oraz Vagrant ściągamy repozytorium z github z plikami dla Vagranta. Wchodzimy do głównego katalogu dla tego repozytorium czyli vagrant-kubeadm-kubernetes i wykonujemy komendę:

vagrant up 

Po wykonaniu tej komendy powinniśmy otrzymać uruchomiony klaster Kubernetesa.  Kopiujemy plik konfiguracyjny nowo utworzonego klastra  configs/config do odpowiedniego katalogu dla kubectl (w przypadku Linux jest to katalog ~/.kube). W celu sprawdzenia czy nasz klaster działa prawidłowo wykonujemy komendę

kubectl get nodes 

W rezultacie powinniśmy otrzymać listę węzłów (nodes) dla klastra.

Aplikacja dla .NET Core

Zanim wdrożymy pierwszą aplikacje na Kubernetes dokonajmy jej analizy.

Kod aplikacji możemy odszukać na github pod adresem:

github.com/mrozim78/example-microservice-net

Aplikacja składa się z jednego prostego kontrolera WeatherForecastController , który obsługuje metodę GET dla HTTP. Generuje ona przykładowe dane pogodowe.

 

Dla projektu przygotowano również plik budowania obrazu Dockerfile. Zawiera on opis przygotowania takiego obrazu. Jest on wieloetapowy (multi-stage), aby w obrazie wdrażanym znajdowało się tylko minimalne środowisko uruchomieniowe.

 

Tak przygotowany obraz umieściłem na serwerze docker hub. Znajduje się on pod adresem:

hub.docker.com/r/mrozim78/example-microservice-net 

I to ten obraz będziemy wdrażać na naszym lokalnym klastrze Kubernetesa.

Wdrożenie aplikacji na lokalnym klastrze Kubernetesa

W celu wdrożenia aplikacji na klastrze Kubernetesa powinniśmy przygotować plik wdrożenia example-microservice-net.yaml. Jego zawartość odnajdziemy w repozytorium ze źródłami w podkatalogu k8s.

Analizując ten plik zauważymy, że wdrażany obraz pochodzi z serwera Docker Hub z miejsca, które podałem powyżej. Istotne również jest to, że udostępnia on port 80 oraz liczba replik tego kontenera wynosi 1.

 

Dla tak przygotowanego pliku wykonujemy komendę

kubectl apply -f example-microservice-net.yaml

Wdroży ona przygotowany obraz na klastrze Kubernetesa. W celu sprawdzenia czy wszystko przebiegło poprawnie wykonajmy komendę

kubectl get pods | grep example-microservice-net

Jeżeli kontener został uruchomiony poprawnie powinniśmy otrzymać następujący rezultat. Z nazwą nowoutworzonego poda oraz ze statusem Running:

W celu sprawdzenia czy aplikacja działa prawidłowo powinniśmy przekierować port 80 z naszego poda na naszą lokalną maszynę na port 42014 . Następnie należy zweryfikować czy serwis odpowiada. W tym celu użyjemy następujące komendy do przekierowywania portów:

kubectl port-forward example-microservice-net-d86c4c779-kxpdn 42014:80

Gdzie  example-microservice-net-d86c4c779-kxpdn to nazwa naszego nowo utworzonego poda (w celu powtórzenia tego u siebie podstawcie swoją nazwę poda odczytaną z wyniku poprzedniej komendy). Pozostaje tylko włączyć przeglądarkę i sprawdzić czy serwis odzywa się na lokalnym adresie:

http://localhost:42014/WeatherForecast

W wyniku tej operacji powinniśmy otrzymać podobny rezultat jak ten na obrazie poniżej.

Na zakończenie podsumujmy tak zdobytą wiedzę. Jak widzimy uruchomienie lokalne klastra Kubernetesa jest bardzo proste. Użycie takich narzędzi jak Vagrant oraz Oracle Virtual Box sprowadza ten proces do uruchomienia jednej komendy. Wdrożenie prostej aplikacji na klastrze Kubernetesa to także nic skomplikowanego.

W następnym części porozmawiamy o innych aspektach pracy z Kubernetesem i spróbujemy wykonać pełne wdrożenia aplikacji w wielu replikach z użyciem Load Balancera.

 

 


Remigiusz Mrozek

Architekt w Pionie Energetyki i Gazownictwa. Na co dzień koduje w C#, prywatnie pasjonat nowych technologii ze szczególnym ukłonem w odmęty Big Data i Machine Learningu. Mistrz Gry, zawsze z najbardziej psychodeliczną fabułą. Można go spotkać na Coperniconie i Pyrkonie!


Wydrukuj