Wybierz region
pl
  • PL
  • EN
Wydrukuj

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

W obecnej ostatniej już części uruchomimy prosty klaster w chmurze AWS dokonamy wdrożenia tej samej aplikacji w wielu replikach oraz sprawdzimy działanie LoadBalancera.

W poprzedniej części skupiliśmy się na uruchomieniu lokalnego klastra Kubernetesa oraz dokonaliśmy prostego wdrożenia aplikacji napisanej w .ASP NET 6.0. Teraz pora na wdrożenie!

Klaster Kubernetesa w AWS

Do uruchomienia klastra w AWS wymagane jest konto w tej platformie oraz narzędzi takich jak:

Dodatkowo podczas pracy będziemy używać takich programów jak:

W celu uruchomienia klastra w AWS pobieramy przygotowany projekt CDK z definicją takiego klastra:

github.com/mrozim78/aws-cdk-eks-cluster

Jeżeli jest to nasze pierwsze uruchomienie CDK w danym regionie AWS. Powinniśmy zainicjować go w AWS. W tym celu uruchomiamy następujące komendy

cdk bootstrap aws://{NAZWA_KONTA_AWS}/{NAZWA_REGIONU}

W celu utworzenia naszego klastra powinniśmy wykonać najpierw operacje syntezy projektu CDK

cdk synth 

Następnie wykonać wdrożenia go w chmurze AWS

cdk deploy EksID-eks

Po 15 – 30 minutach powinniśmy uzyskać informację o utworzeniu klastra. Następnie wykonujemy komendę pobrania pliku config dla naszego klastra

`aws cloudformation describe-stacks --stack-name GravitonID-eks --query "Stacks[0].Outputs[1].OutputValue" --output text`

Sprawdzamy, czy nasz klaster funkcjonuje prawidłowo komendą:

kubectl get nodes

Powinniśmy uzyskać następujący rezultat:

Wdrożenie aplikacji

 

Aplikacja , którą będziemy wdrażać ulegała małym modyfikacjom od poprzedniego odcinka

github.com/mrozim78/example-microservice-net

Po krótce opiszę co zostało zmienione. Dodano nową strukturę WeatherForecastHeader nagłówka w której przechowywane są atrybuty związane z parametrami maszyny, która serwuje nasz serwis.

Zmieniony został także Controller , który serwuje tą strukturę zamiast poprzedniej listy:

Zmieniony zbudowany na nowo obraz został również podmieniony w DockerHub:

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

Do katalogu k8s w projekcie został dodany nowy plik example-microservice-net-nlb.yaml wdrożenia naszego projektu na klaster Kubernetesa. Dokonajmy analizy jego zawartości:

 

Na początku tworzymy nowy namespace o nazwie aspnet. Następne wdrażamy serwis LoadBalancera. Zwróćmy uwagę na adnotacje:

service.beta.kubernetes.io/aws-load-balancer-type: "nlb"

Informuje ona AWS, że dla LoadBalancera będziemy używać usługi Elastic Load Balancera (ELB) Ostatnią część pliku stanowi definicja wdrożenia naszego obrazu mrozim78/example-microservice-net w liczbie replik 3. W celu wykonania wdrożenia wykonujemy komendę:

 kubectl apply -f example-microservice-net-nlb.yaml

Testy wdrożonej aplikacji

Po określonym czasie sprawdzamy czy nasza aplikacja została wdrożona, czyli wykonujemy komendę do pozyskania listy podów:

kubectl get pods --namespace=aspnet 

Powinniśmy uzyskać następujący rezultat

Sprawdźmy również czy utworzono dla nas LoadBalancera z zewnętrznym adresem. W tym celu wykonujemy następującą komendę:

kubectl get svc --namespace=aspnet

W jej wyniku powinniśmy uzyskać informację o utworzonym LB

Dokonajmy testu tak utworzonego wdrożenia. Na samym początku zapiszmy naszą długa nazwę literową naszego zewnętrznego LB do zmiennej ELB za pomocą następującej komendy:

ELB=$(kubectl get service aspnet-service -n aspnet -o json | jq -r '.status.loadBalancer.ingress[].hostname')

Wykonajmy następujący skrypt by sprawdzić czy nasz serwis odpowiada oraz by wyświetlić  jaki pod nam odpowiada i z jakiego ip oraz nazwy hosta (operacja powtarzamy w pętli 9 krotnie)

for i in {1..9}; do curl -s $ELB/WeatherForecast | jq '.ip , .hostName' ; echo; done

Powinniśmy otrzymać następujący rezultat:

Jak widzimy LB działa prawidłowo i przekierowuje zapytania do losowo wybranego poda repliki.

Podsumowując zauważmy iż praca z Kubernetesem w chmurze AWS jest równie prosta jak na lokalnym klastrze. W celu automatyzacji uruchomienia takiego rozwiązania możemy użyć narzędzia CDK AWS.

To już koniec naszej serii o Kubernetesie w przykładach dla .NET Core. Zachęcam was do samodzielnej pracy z tym rozwiązaniem :)


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