Udostępnij za pośrednictwem


Wdrażanie aplikacji bezstanowej Kubernetes za pomocą narzędzia kubectl na urządzeniu z procesorem GPU Usługi Azure Stack Edge Pro

DOTYCZY: Tak dla jednostki SKU procesora GPU ProAzure Stack Edge Pro — GPUTak dla jednostki SKU Pro 2Azure Stack Edge Pro 2Tak dla jednostki SKU Pro RAzure Stack Edge Pro R Azure Stack Edge Mini RTak dla jednostki SKU Mini R

W tym artykule opisano sposób wdrażania aplikacji bezstanowej przy użyciu poleceń kubectl w istniejącym klastrze Kubernetes. W tym artykule przedstawiono również proces tworzenia i konfigurowania zasobników w aplikacji bezstanowej.

Wymagania wstępne

Przed utworzeniem klastra Kubernetes i użyciem kubectl narzędzia wiersza polecenia należy upewnić się, że:

  • Masz poświadczenia logowania do urządzenia Azure Stack Edge Pro z 1 węzłem.

  • Program Windows PowerShell 5.0 lub nowszy jest zainstalowany w systemie klienckim systemu Windows w celu uzyskania dostępu do urządzenia Azure Stack Edge Pro. Możesz również mieć dowolnego innego klienta z obsługiwanym systemem operacyjnym. W tym artykule opisano procedurę korzystania z klienta systemu Windows. Aby pobrać najnowszą wersję programu Windows PowerShell, przejdź do sekcji Instalowanie programu Windows PowerShell.

  • Środowisko obliczeniowe jest włączone na urządzeniu Azure Stack Edge Pro. Aby włączyć obliczenia, przejdź do strony Obliczenia w lokalnym interfejsie użytkownika urządzenia. Następnie wybierz interfejs sieciowy, który chcesz włączyć dla obliczeń. Wybierz opcję Włącz. Włączenie obliczeń powoduje utworzenie przełącznika wirtualnego na urządzeniu w tym interfejsie sieciowym. Aby uzyskać więcej informacji, zobacz Włączanie sieci obliczeniowej w usłudze Azure Stack Edge Pro.

  • Urządzenie Azure Stack Edge Pro ma serwer klastra Kubernetes z uruchomioną wersją 1.9 lub nowszą. Aby uzyskać więcej informacji, zobacz Tworzenie klastra Kubernetes i zarządzanie nim na urządzeniu Microsoft Azure Stack Edge Pro.

  • Zainstalowano program kubectl.

Wdrażanie aplikacji bezstanowej

Przed rozpoczęciem należy mieć:

  1. Utworzono klaster Kubernetes.
  2. Konfigurowanie przestrzeni nazw.
  3. Skojarzył użytkownika z przestrzenią nazw.
  4. Zapisano konfigurację użytkownika na .C:\Users\<username>\.kube
  5. Zainstalowano plik kubectl.

Teraz możesz rozpocząć uruchamianie wdrożeń aplikacji bezstanowych i zarządzanie nimi na urządzeniu Azure Stack Edge Pro. Przed rozpoczęciem korzystania z kubectlprogramu należy sprawdzić, czy masz poprawną wersję programu kubectl.

Sprawdź, czy masz poprawną wersję narzędzia kubectl i skonfiguruj konfigurację

Aby sprawdzić wersję programu kubectl:

  1. Sprawdź, czy wersja elementu kubectl jest większa lub równa 1.9:

    kubectl version
    

    Poniżej przedstawiono przykładowe dane wyjściowe:

    PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version
    Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
    Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
    

    W takim przypadku wersja klienta narzędzia kubectl jest w wersji 1.15.2 i jest zgodna, aby kontynuować.

  2. Pobierz listę zasobników uruchomionych w klastrze Kubernetes. Zasobnik to kontener aplikacji lub proces uruchomiony w klastrze Kubernetes.

    kubectl get pods -n <namespace-string>
    

    Poniżej przedstawiono przykład użycia poleceń:

    PS C:\WINDOWS\system32> kubectl get pods -n "test1"
    No resources found.
    PS C:\WINDOWS\system32>
    

    Dane wyjściowe nie powinny zawierać żadnych zasobów (zasobników), ponieważ w klastrze nie są uruchomione żadne aplikacje.

    Polecenie wypełni strukturę katalogu "C:\Users\<username>\.kube" plikami konfiguracji. Narzędzie wiersza polecenia kubectl użyje tych plików do tworzenia aplikacji bezstanowych i zarządzania nimi w klastrze Kubernetes.

  3. Ręcznie sprawdź strukturę katalogu "C:\Users\<username>\.kube", aby sprawdzić, czy narzędzie kubectl wypełniło go następującymi podfolderami:

    PS C:\Users\username> ls .kube
    
    
       Directory: C:\Users\user\.kube
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----         2/18/2020 11:05 AM                cache
    d-----         2/18/2020 11:04 AM                http-cache
    -a----         2/18/2020 10:41 AM           5377 config
    

Uwaga

Aby wyświetlić listę wszystkich poleceń kubectl, wpisz kubectl --help.

Tworzenie aplikacji bezstanowej przy użyciu wdrożenia

Po sprawdzeniu, czy wersja wiersza polecenia kubectl jest poprawna i masz wymagane pliki konfiguracji, możesz utworzyć bezstanowe wdrożenie aplikacji.

Zasobnik to podstawowa jednostka wykonywania aplikacji Kubernetes, najmniejszej i najprostszej jednostki w modelu obiektów Kubernetes, który tworzysz lub wdrażasz. Zasobnik hermetyzuje również zasoby magazynu, unikatowy adres IP sieci i opcje, które określają sposób działania kontenerów.

Typ tworzonej aplikacji bezstanowej to wdrożenie serwera internetowego nginx.

Wszystkie polecenia kubectl używane do tworzenia wdrożeń aplikacji bezstanowych i zarządzania nimi muszą określać przestrzeń nazw skojarzoną z konfiguracją. Przestrzeń nazw została utworzona podczas nawiązywania połączenia z klastrem na urządzeniu Azure Stack Edge Pro w samouczku Tworzenie klastra Kubernetes i zarządzanie nim na urządzeniu Microsoft Azure Stack Edge Pro za pomocą polecenia New-HcsKubernetesNamespace.

Aby określić przestrzeń nazw w poleceniu kubectl, użyj polecenia kubectl <command> -n <namespace-string>.

Wykonaj następujące kroki, aby utworzyć wdrożenie serwera nginx:

  1. Zastosuj aplikację bezstanową, tworząc obiekt wdrożenia kubernetes:

    kubectl apply -f <yaml-file> -n <namespace-string>
    

    W tym przykładzie ścieżka do pliku YAML aplikacji jest źródłem zewnętrznym.

    Oto przykładowe użycie polecenia i jego danych wyjściowych:

    PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1"
    
    deployment.apps/nginx-deployment created
    

    Alternatywnie możesz zapisać następujący kod markdown na komputerze lokalnym i zastąpić ścieżkę i nazwę pliku w parametrze -f . Na przykład "C:\Kubernetes\deployment.yaml". Konfiguracja wdrożenia aplikacji to:

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    

    To polecenie tworzy domyślne wdrożenie nginx, które ma dwa zasobniki do uruchomienia aplikacji.

  2. Uzyskaj opis utworzonego wdrożenia rozwiązania Kubernetes nginx:

    kubectl describe deployment nginx-deployment -n <namespace-string>
    

    Poniżej przedstawiono przykładowe użycie polecenia z danymi wyjściowymi:

    PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1"
    
    Name:                   nginx-deployment
    Namespace:              test1
    CreationTimestamp:      Tue, 18 Feb 2020 13:35:29 -0800
    Labels:                 <none>
    Annotations:            deployment.kubernetes.io/revision: 1
                            kubectl.kubernetes.io/last-applied-configuration:
                              {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl...
    Selector:               app=nginx
    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
       Labels:  app=nginx
       Containers:
        nginx:
         Image:        nginx:1.7.9
         Port:         80/TCP
         Host Port:    0/TCP
         Environment:  <none>
         Mounts:       <none>
       Volumes:        <none>
    Conditions:
       Type           Status  Reason
       ----           ------  ------
       Available      True    MinimumReplicasAvailable
       Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-deployment-5754944d6c (2/2 replicas created)
    Events:
      Type    Reason             Age    From                   Message
      ----    ------             ----   ----                   -------
      Normal  ScalingReplicaSet  2m22s  deployment-controller  Scaled up replica set nginx-deployment-5754944d6c to 2
    

    W przypadku ustawienia replik zobaczysz:

    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    

    Ustawienie replik wskazuje, że specyfikacja wdrożenia wymaga dwóch zasobników i że te zasobniki zostały utworzone i zaktualizowane i są gotowe do użycia.

    Uwaga

    Zestaw replik zastępuje zasobniki, które są usuwane lub przerywane z jakiegokolwiek powodu, takie jak w przypadku awarii węzła urządzenia lub przerwania uaktualniania urządzenia. Z tego powodu zalecamy użycie zestawu replik, nawet jeśli aplikacja wymaga tylko jednego zasobnika.

  3. Aby wyświetlić listę zasobników we wdrożeniu:

    kubectl get pods -l app=nginx -n <namespace-string>
    

    Poniżej przedstawiono przykładowe użycie polecenia z danymi wyjściowymi:

    PS C:\Users\user> kubectl get pods -l app=nginx -n "test1"
    
    NAME                                READY   STATUS    RESTARTS   AGE
    nginx-deployment-5754944d6c-7wqjd   1/1     Running   0          3m13s
    nginx-deployment-5754944d6c-nfj2h   1/1     Running   0          3m13s
    

    Dane wyjściowe weryfikują, czy mamy dwa zasobniki o unikatowych nazwach, do których możemy się odwołać przy użyciu narzędzia kubectl.

  4. Aby wyświetlić informacje o pojedynczym zasobniku we wdrożeniu:

    kubectl describe pod <podname-string> -n <namespace-string>
    

Poniżej przedstawiono przykładowe użycie polecenia z danymi wyjściowymi:

PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"

Name:           nginx-deployment-5754944d6c-7wqjd
Namespace:      test1
Priority:       0
Node:           k8s-1d9qhq2cl-n1/10.128.46.184
Start Time:     Tue, 18 Feb 2020 13:35:29 -0800
Labels:         app=nginx
                pod-template-hash=5754944d6c
Annotations:    <none>
Status:         Running
IP:             172.17.246.200
Controlled By:  ReplicaSet/nginx-deployment-5754944d6c
 Containers:
   nginx:
     Container ID:   docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
     Image:          nginx:1.7.9
     Image ID:       docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
     Port:           80/TCP
     Host Port:      0/TCP
     State:          Running
       Started:      Tue, 18 Feb 2020 13:35:35 -0800
     Ready:          True
     Restart Count:  0
     Environment:    <none>
     Mounts:
       /var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
 Conditions:
   Type              Status
   Initialized       True
   Ready             True
   ContainersReady   True
   PodScheduled      True
 Volumes:
   default-token-8gksw:
     Type:        Secret (a volume populated by a Secret)
     SecretName:  default-token-8gksw
     Optional:    false
 QoS Class:       BestEffort
 Node-Selectors:  <none>
 Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                  node.kubernetes.io/unreachable:NoExecute for 300s
 Events:
   Type    Reason     Age    From                       Message
   ----    ------     ----   ----                       -------
   Normal  Scheduled  4m58s  default-scheduler          Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
   Normal  Pulling    4m57s  kubelet, k8s-1d9qhq2cl-n1  Pulling image "nginx:1.7.9"
   Normal  Pulled     4m52s  kubelet, k8s-1d9qhq2cl-n1  Successfully pulled image "nginx:1.7.9"
   Normal  Created    4m52s  kubelet, k8s-1d9qhq2cl-n1  Created container nginx
   Normal  Started    4m52s  kubelet, k8s-1d9qhq2cl-n1  Started container nginx

Ponowne skalowanie wdrożenia aplikacji przez zwiększenie liczby replik

Każdy zasobnik ma uruchamiać pojedyncze wystąpienie danej aplikacji. Jeśli chcesz skalować aplikację w poziomie w celu uruchamiania wielu wystąpień, możesz zwiększyć liczbę zasobników do jednego dla każdego wystąpienia. W rozwiązaniu Kubernetes jest to nazywane replikacją. Możesz zwiększyć liczbę zasobników we wdrożeniu aplikacji, stosując nowy plik YAML. Plik YAML zmienia ustawienie replik na 4, co zwiększa liczbę zasobników we wdrożeniu na cztery zasobniki. Aby zwiększyć liczbę zasobników z zakresu od 2 do 4:

PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"

Alternatywnie możesz zapisać następujący kod markdown na komputerze lokalnym i zastąpić ścieżkę i nazwę pliku parametru -f parametru .kubectl apply Na przykład "C:\Kubernetes\deployment-scale.yaml". Konfiguracja skali wdrożenia aplikacji to:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4 # Update the replicas from 2 to 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80

Aby sprawdzić, czy wdrożenie ma cztery zasobniki:

kubectl get pods -l app=nginx

Poniżej przedstawiono przykładowe dane wyjściowe wdrożenia skalowania z dwóch do czterech zasobników:

PS C:\WINDOWS\system32> kubectl get pods -l app=nginx

NAME                               READY     STATUS    RESTARTS   AGE
nginx-deployment-148880595-4zdqq   1/1       Running   0          25s
nginx-deployment-148880595-6zgi1   1/1       Running   0          25s
nginx-deployment-148880595-fxcez   1/1       Running   0          2m
nginx-deployment-148880595-rwovn   1/1       Running   0          2m

Jak widać z danych wyjściowych, masz teraz cztery zasobniki we wdrożeniu, które mogą uruchamiać aplikację.

Usuwanie wdrożenia

Aby usunąć wdrożenie, w tym wszystkie zasobniki, należy uruchomić kubectl delete deployment określenie nazwy wdrożenia nginx-deployment i nazwy przestrzeni nazw. Aby usunąć wdrożenie:

kubectl delete deployment nginx-deployment -n <namespace-string>

Poniżej przedstawiono przykład użycia polecenia z danymi wyjściowymi:

PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted

Następne kroki

Omówienie platformy Kubernetes