K8s w Azure czyli AKS

Opublikowany Autor Piotr CudnikDodaj komentarz

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.