Kubernetes(k8s) jest orkiestratorem kontenerów służącym do automatycznego wdrażania aplikacji, skalowania oraz zarządzania aplikacjami. AKS to skrót od Azure Kubernetes Service usługi na platformie Azure do wdrożenia konteneryzowanych aplikacji.
W tym wpisie omówię prosty przykład postawienia aplikacji .Net Core przy pomocy kuberetes na platformie Azure.
Będziemy potrzebować:
- Zainstalowane .Net Core
- Zainstalowanego docker oraz konto docker Hub
- Subskrypcji Azure
- Zainstalowane Kubectl
- Zainstalowane Azure CLI (az)
Wszystkie komendy wykonujemy w terminalu z lokalizacji aplikacji na lokalnym komputerze.
Krok 1 Przykładowa aplikacja
Utwórzmy przykładową aplikacje .Net Core webapp, którą umieścimy w kontenerze. Moja aplikacja wyświetla obecną datę wraz z godziną.
dotnet new webapp -n k8sWorkshop
Krok 2 Obraz docker
Gdy już mammy gotową aplikacje, można teraz utworzyć obraz dockera naszej aplikacji, którą będzie postawiona na linuksie.
W projekcie aplikacji tworzymy plik o nazwie dockerfile z poniższa treścią:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 WORKDIR /app COPY /app /app ENTRYPOINT ["dotnet", "k8sWorkshop.dll"]
oraz tworzymy pliku .dockerignore z poniższą treścią
bin\ obj\
Tworzymy obraz docker poleceniem (musimy być w katalogu z aplikacja dlatego jest „.” na końcu polecenia)
docker build -t k8sworkshop .
Dla sprawdzenia można uruchomić obraz lokalnie
docker run -p 8181:80 k8sworkshop
Krok 3 docker Hub
Logujemy się do konta docker Hub poniższą komendą
docker login
Tworzymy obraz aplikacji i wysyłamy go do docker Hub
docker tag k8sworkshop pcudnik/k8sworkshop docker push pcudnik/k8sworkshop
Krok 4 Klaster Kubernetes w Azure
W platformie Azure tworzymy klaster Kubernetes. Przechodzimy do zakładki Kubernetes services i dodajemy nowy klaster.
Tworzymy nową grupę zasobów oraz podajemy nazwę klastra oraz region. Możemy wybrać rozmiar i liczbę node’ów np. standard B2s i 2 node’y.
W sekcji sieciowej wybieramy połączenie http
Przechodzimy w kreatorze do końca z standardowymi ustawieniami, po kilku minutach klaster zostanie utworzony.
Krok 5 Wgranie kontenera z aplikacją
Na lokalnym komputerze logujemy się do platformy Azure poniższym poleceniem
az login
Pobieramy konfiguracje połączenia z utworzonym klastrem Kubernetes podajemy nazą grupe oraz nazwe klastra
az aks get-credentials --resource-group [nazwa resource group] --name [nazwa klastra]
W projekcie aplikacji tworzymy plik o nazwie deployment.yaml z poniższa treścią: (w plikach yaml istotne są wcięcia spacjami pamiętajmy o tym)
apiVersion: apps/v1 kind: Deployment metadata: name: k8sworkshop spec: selector: matchLabels: app: k8sworkshop replicas: 2 template: metadata: labels: app: k8sworkshop spec: containers: - name: k8sworkshop image: pcudnik/k8sworkshop:latest imagePullPolicy: Always resources: requests: memory: "128Mi" cpu: "100m" limits: memory: "256Mi" cpu: "500m" ports: - containerPort: 80
Wgrywamy konfiguracje podów poleceniem
kubectl apply -f deployment.yaml
W projekcie aplikacji tworzymy plik o nazwie service.yaml z poniższa treścią
apiVersion: v1 kind: Service metadata: name: k8sworkshop-svc spec: selector: app: k8sworkshop ports: - protocol: TCP port: 8080 targetPort: 80 type: LoadBalancer
Wgrywamy konfiguracje serwisu poleceniem
kubectl apply -f service.yaml
Pobieramy routing klastra Kubernetes do konfiguracji
az aks show --resource-group [nazwa resource group] --name [nazwa klastra] --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
W projekcie aplikacji tworzymy plik o nazwie ingress.yaml z poniższa treścią
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: url-routing-ingress annotations: kubernetes.io/ingress.class: addon-http-application-routing spec: rules: - host: k8sworkshop.[zwrócona wartość z az aks show…] http: paths: - backend: serviceName: k8sworkshop-svc servicePort: 8080 path: /
Wgrywamy konfiguracje pliku ingress poleceniem
kubectl apply -f ingress.yaml
Sprawdzamy statusy podów, serwisu poleceniami
kubectl get pods kubectl get svc
Jak wszystko zostało poprawnie skonfigurowane i odpalone możemy wyświetlić aplikacje pod adresem:
k8sworkshop.[zwrócona wartość az aks show…]
Przykładowy projekt aplikacji na AKS można podejrzeć na https://github.com/dbtrunks/k8sWorkshop.