Udostępnij za pośrednictwem


Używanie narzędzia kubectl do uruchamiania aplikacji stanowej Kubernetes z trwałymvolume na urządzeniu 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 pokazano, jak wdrożyć aplikację stanową pojedynczego wystąpienia na platformie Kubernetes przy użyciu elementu PersistentVolume (PV) i wdrożenia. Wdrożenie używa kubectl poleceń w istniejącym klastrze Kubernetes i wdraża aplikację MySQL.

Ta procedura jest przeznaczona dla tych, którzy przejrzeli magazyn Kubernetes na urządzeniu Azure Stack Edge Pro i zapoznali się z pojęciami dotyczącymi magazynu Kubernetes.

Usługa Azure Stack Edge Pro obsługuje również uruchamianie kontenerów usługi Azure SQL Edge i można je wdrożyć w podobny sposób, jak opisano tutaj w usłudze MySQL. Aby uzyskać więcej informacji, zobacz Azure SQL Edge.

Wymagania wstępne

Przed wdrożeniem aplikacji stanowej należy spełnić następujące wymagania wstępne na urządzeniu i klienta, który będzie używany do uzyskiwania dostępu do urządzenia:

Na potrzeby urządzenia

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

W przypadku uzyskiwania dostępu do urządzenia przez klienta

  • Masz system kliencki z systemem Windows, który będzie używany do uzyskiwania dostępu do urządzenia Azure Stack Edge Pro.
    • Klient korzysta z programu Windows PowerShell 5.0 lub nowszego. Aby pobrać najnowszą wersję programu Windows PowerShell, przejdź do sekcji Instalowanie programu Windows PowerShell.

    • Możesz również mieć dowolnego innego klienta z obsługiwanym systemem operacyjnym. W tym artykule opisano procedurę korzystania z klienta systemu Windows.

    • Wykonano procedurę opisaną w artykule Uzyskiwanie dostępu do klastra Kubernetes na urządzeniu Azure Stack Edge Pro. Masz:

      • Utworzono userns1 przestrzeń nazw za pomocą New-HcsKubernetesNamespace polecenia .
      • Utworzono użytkownika user1 za pomocą New-HcsKubernetesUser polecenia .
      • Udzielono user1 dostępu za userns1 pośrednictwem Grant-HcsKubernetesNamespaceAccess polecenia .
      • Zainstalowano na kliencie i zapisano kubectl kubeconfig plik z konfiguracją użytkownika w folderze C:\Users\<username>\.kube.
    • Upewnij się, że kubectl wersja klienta nie jest niesymetryczna niż jedna wersja z wersji głównej platformy Kubernetes uruchomionej na urządzeniu Azure Stack Edge Pro.

      • Użyj kubectl version polecenia , aby sprawdzić wersję narzędzia kubectl uruchomioną na kliencie. Zanotuj pełną wersję.
      • W lokalnym interfejsie użytkownika urządzenia Azure Stack Edge Pro przejdź do pozycji Przegląd i zanotuj numer oprogramowania Kubernetes.
      • Sprawdź te dwie wersje pod kątem zgodności z mapowaniem podanym w obsługiwanej wersji rozwiązania Kubernetes.

Wszystko jest gotowe do wdrożenia aplikacji stanowej na urządzeniu Azure Stack Edge Pro.

Aprowizuj statyczny pv

Aby statycznie aprowizować pv, musisz utworzyć udział na urządzeniu. Wykonaj następujące kroki, aby aprowizować sieć pv względem udziału SMB.

Uwaga

  • Konkretny przykład użyty w tym artykule z instrukcjami nie działa z udziałami NFS. Ogólnie rzecz biorąc, udziały NFS można aprowizować na urządzeniu Azure Stack Edge z aplikacjami spoza bazy danych.
  • Aby wdrożyć aplikacje stanowe korzystające z woluminów magazynu w celu zapewnienia magazynu trwałego, zalecamy użycie polecenia StatefulSet. W tym przykładzie użyto Deployment tylko jednej repliki i nadaje się do programowania i testowania.
  1. Wybierz, czy chcesz utworzyć udział usługi Edge, czy udział lokalny usługi Edge. Postępuj zgodnie z instrukcjami w temacie Dodawanie udziału , aby utworzyć udział. Zaznacz pole wyboru Use the share with Edge compute (Użyj udziału w obliczeniach usługi Edge).

    Udział lokalny usługi Edge dla pv

    1. Zamiast tworzyć nowy udział, jeśli zdecydujesz się użyć istniejącego udziału, musisz zainstalować udział.

      W witrynie Azure Portal dla zasobu usługi Azure Stack Edge przejdź do pozycji Udziały. Z istniejącej listy udziałów wybierz i kliknij udział, którego chcesz użyć.

      Wybieranie istniejącego udziału lokalnego dla pv

    2. Wybierz pozycję Zainstaluj i potwierdź instalację po wyświetleniu monitu.

      Instalowanie istniejącego udziału lokalnego dla pv

  2. Zanotuj nazwę udziału. Po utworzeniu tego udziału w klastrze Kubernetes zostanie automatycznie utworzony trwały obiekt woluminu odpowiadający utworzonemu udziałowi SMB.

Wdrażanie bazy danych MySQL

Teraz uruchomisz aplikację stanową, tworząc wdrożenie Platformy Kubernetes i łącząc ją z serwerem PV utworzonym we wcześniejszym kroku przy użyciu elementu PersistentVolumeClaim (PVC).

Wszystkie kubectl polecenia używane do tworzenia wdrożeń aplikacji stanowych i zarządzania nimi muszą określać przestrzeń nazw skojarzoną z konfiguracją. Aby określić przestrzeń nazw w poleceniu kubectl, użyj polecenia kubectl <command> -n <your-namespace>.

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

    kubectl get pods -n <your-namespace>
    

    Oto przykład użycia poleceń:

     C:\Users\user>kubectl get pods -n "userns1"
     No resources found in userns1 namespace.    
     C:\Users\user>
    

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

  2. Użyjesz następujących plików YAML. W mysql-deployment.yml pliku opisano wdrożenie, które uruchamia program MySQL i odwołuje się do pvc. Plik definiuje instalację woluminu dla /var/lib/mysqlprogramu , a następnie tworzy pvc, który szuka woluminu 20 GB.

    To oświadczenie jest spełnione przez wszelkie istniejące pv, które zostały statycznie aprowizowane podczas tworzenia udziału w poprzednim kroku. Na urządzeniu jest tworzony duży pv o pojemności 32 TB dla każdego udziału. Pv spełnia wymagania określone przez PVC i PVC powinny być powiązane z tym PV.

    Skopiuj i zapisz następujący mysql-deployment.yml plik w folderze na kliencie systemu Windows, którego używasz do uzyskiwania dostępu do urządzenia Azure Stack Edge Pro.

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
      - port: 3306
      selector:
        app: mysql
      clusterIP: None
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
              # Use secret in real usage
            - name: MYSQL_ROOT_PASSWORD
              value: password
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:
              claimName: mysql-pv-claim
    
  3. Skopiuj i zapisz jako mysql-pv.yml plik w tym samym folderze, w którym zapisano mysql-deployment.ymlplik . Aby użyć udziału SMB utworzonego wcześniej za kubectlpomocą polecenia , ustaw volumeName pole w obiekcie PVC na nazwę udziału.

    Uwaga

    Upewnij się, że pliki YAML mają poprawne wcięcie. Aby sprawdzić poprawność, a następnie zapisać, możesz sprawdzić lint YAML.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
    spec:
      volumeName: <smb-share-name-here>
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. mysql-pv.yaml Wdróż plik.

    kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>

    Oto przykładowe dane wyjściowe wdrożenia.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pv.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim created
    
    C:\Users\user>
    

    Zanotuj nazwę utworzonego pvc. Będzie on używany w późniejszym kroku.

  5. Wdróż zawartość mysql-deployment.yml pliku.

    kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>

    Oto przykładowe dane wyjściowe wdrożenia.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
        service/mysql created
        deployment.apps/mysql created
    
  6. Wyświetl informacje o wdrożeniu.

    kubectl describe deployment <app-label> -n <your-user-namespace>

    C:\Users\user>kubectl describe deployment mysql -n userns1
    Name:               mysql
    Namespace:          userns1
    CreationTimestamp:  Tue, 18 Aug 2020 09:44:58 -0700
    Labels:             <none>
    Annotations:        deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"mysql","namespace":"userns1"},"spec":{"selector":{"matchL...
    Selector:           app=mysql
    Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:       Recreate
    MinReadySeconds:    0
    Pod Template:
      Labels:  app=mysql
      Containers:
       mysql:
        Image:      mysql:5.6
        Port:       3306/TCP
        Host Port:  0/TCP
        Environment:
          MYSQL_ROOT_PASSWORD:  password
        Mounts:
          /var/lib/mysql from mysql-persistent-storage (rw)
      Volumes:
       mysql-persistent-storage:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  mysql-pv-claim
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Progressing    True    NewReplicaSetAvailable
      Available      True    MinimumReplicasAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-c85f7f79c (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set mysql-c85f7f79c to 1
    
    C:\Users\user>
    
  7. Wyświetl listę zasobników utworzonych przez wdrożenie.

    kubectl get pods -l <app=label> -n <your-user-namespace>

    Oto przykładowe dane wyjściowe.

    C:\Users\user>kubectl get pods -l app=mysql -n userns1
    NAME                    READY   STATUS    RESTARTS   AGE
    mysql-c85f7f79c-vzz7j   1/1     Running   1          14m
    
    C:\Users\user>
    
  8. Sprawdź element PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    Oto przykładowe dane wyjściowe.

    C:\Users\user>kubectl describe pvc mysql-pv-claim -n userns1
    Name:          mysql-pv-claim
    Namespace:     userns1
    StorageClass:
    Status:        Bound
    Volume:        mylocalsmbshare1
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"userns1"},"spec":{"acc...
                   pv.kubernetes.io/bind-completed: yes
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      32Ti
    Access Modes:  RWO,RWX
    VolumeMode:    Filesystem
    Mounted By:    mysql-c85f7f79c-vzz7j
    Events:        <none>
    
    C:\Users\user>
    

Sprawdzanie, czy program MySQL jest uruchomiony

Aby uruchomić polecenie względem kontenera w zasobniku z uruchomionym programem MySQL, wpisz:

kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql

Oto przykładowe dane wyjściowe.

C:\Users\user>kubectl exec mysql-c85f7f79c-vzz7j -i -t -n userns1 -- mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Usuwanie wdrożenia

Aby usunąć wdrożenie, usuń wdrożone obiekty według nazwy. Te obiekty obejmują wdrożenie, usługę i PVC.

kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>

Oto przykładowe dane wyjściowe polecenia podczas usuwania wdrożenia i usługi.

C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>

Poniżej przedstawiono przykładowe dane wyjściowe danych wyjściowych po usunięciu pcv.

C:\Users\user>kubectl delete pvc mysql-pv-claim -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>

Pv nie jest już powiązany z PVC, ponieważ PVC został usunięty. Ponieważ tryb PV został aprowizowany podczas tworzenia udziału, należy usunąć udział. Wykonaj te kroki:

  1. Odinstalowywanie udziału. W witrynie Azure Portal przejdź do udziałów zasobów > usługi Azure Stack Edge i wybierz i kliknij udział, który chcesz odinstalować. Wybierz pozycję Odinstaluj i potwierdź operację. Poczekaj, aż udział zostanie niezainstalowany. Odinstalowywanie zwalnia udział (a tym samym skojarzony element PersistentVolume) z klastra Kubernetes.

    Odinstalowywanie udziału lokalnego dla pv

  2. Teraz możesz wybrać pozycję Usuń i potwierdzić usunięcie, aby usunąć udział. Powinno to również spowodować usunięcie udziału i odpowiedniego pv.

    Usuwanie udziału lokalnego dla pv

Następne kroki

Aby dowiedzieć się, jak dynamicznie aprowizować magazyn, zobacz Deploy a stateful application via dynamic provisioning on an Azure Stack Edge Pro device (Wdrażanie aplikacji stanowej za pośrednictwem dynamicznej aprowizacji na urządzeniu Azure Stack Edge Pro)