Delen via


Kubectl gebruiken om een Kubernetes stateful toepassing uit te voeren met een PersistentVolume op uw Azure Stack Edge Pro-apparaat

VAN TOEPASSING OP: Ja voor Pro GPU-SKUAzure Stack Edge Pro - GPUJa voor Pro 2 SKUAzure Stack Edge Pro 2Ja voor Pro R SKUAzure Stack Edge Pro RJa voor Mini R SKUAzure Stack Edge Mini R

In dit artikel wordt beschreven hoe u een stateful toepassing met één exemplaar implementeert in Kubernetes met behulp van een PersistentVolume (PV) en een implementatie. De implementatie maakt gebruik van kubectl opdrachten in een bestaand Kubernetes-cluster en implementeert de MySQL-toepassing.

Deze procedure is bedoeld voor degenen die de Kubernetes-opslag op een Azure Stack Edge Pro-apparaat hebben gecontroleerd en bekend zijn met de concepten van Kubernetes-opslag.

Azure Stack Edge Pro biedt ook ondersteuning voor het uitvoeren van Azure SQL Edge-containers. Deze kunnen op een vergelijkbare manier worden geïmplementeerd, zoals hier wordt beschreven voor MySQL. Zie Azure SQL Edge voor meer informatie.

Vereisten

Voordat u de stateful toepassing kunt implementeren, moet u de volgende vereisten voltooien op uw apparaat en de client die u gebruikt voor toegang tot het apparaat:

Voor het apparaat

  • U hebt aanmeldingsreferenties voor een Azure Stack Edge Pro-apparaat met 1 knooppunt.
    • Het apparaat is geactiveerd. Zie Het apparaat activeren.
    • Het apparaat heeft de rekenrol geconfigureerd via Azure Portal en heeft een Kubernetes-cluster. Zie Rekenproces configureren.

Voor clienttoegang tot het apparaat

  • U hebt een Windows-clientsysteem dat wordt gebruikt voor toegang tot het Azure Stack Edge Pro-apparaat.
    • Op de client wordt Windows PowerShell 5.0 of hoger uitgevoerd. Als u de nieuwste versie van Windows PowerShell wilt downloaden, gaat u naar Windows PowerShell installeren.

    • U kunt ook elke andere client met een ondersteund besturingssysteem hebben. In dit artikel wordt de procedure beschreven bij het gebruik van een Windows-client.

    • U hebt de procedure voltooid die wordt beschreven in Access the Kubernetes cluster on Azure Stack Edge Pro device. U hebt:

      • Er is een userns1 naamruimte gemaakt via de New-HcsKubernetesNamespace opdracht.
      • Er is een gebruiker user1 gemaakt via de New-HcsKubernetesUser opdracht.
      • user1 De toegang verleend via userns1 de Grant-HcsKubernetesNamespaceAccess opdracht.
      • kubectl Geïnstalleerd op de client en het kubeconfig bestand met de gebruikersconfiguratie opgeslagen in C:\Users\<username>\.kube.
    • Zorg ervoor dat de kubectl clientversie niet meer dan één versie is van de Kubernetes-hoofdversie die wordt uitgevoerd op uw Azure Stack Edge Pro-apparaat.

      • Hiermee kubectl version controleert u de versie van kubectl die wordt uitgevoerd op de client. Noteer de volledige versie.
      • Ga in de lokale gebruikersinterface van uw Azure Stack Edge Pro-apparaat naar Overzicht en noteer het Kubernetes-softwarenummer.
      • Controleer deze twee versies op compatibiliteit van de toewijzing die is opgegeven in de ondersteunde Kubernetes-versie.

U bent klaar om een stateful toepassing te implementeren op uw Azure Stack Edge Pro-apparaat.

Een statische HW inrichten

Als u statisch een HW wilt inrichten, moet u een share maken op uw apparaat. Volg deze stappen om een HW in te richten voor uw SMB-share.

Notitie

  • Het specifieke voorbeeld dat in dit artikel wordt gebruikt, werkt niet met NFS-shares. Over het algemeen kunnen NFS-shares worden ingericht op uw Azure Stack Edge-apparaat met niet-databasetoepassingen.
  • Als u stateful toepassingen wilt implementeren die gebruikmaken van opslagvolumes om permanente opslag te bieden, raden we u aan om te gebruiken StatefulSet. In dit voorbeeld wordt slechts één replica gebruikt Deployment en is geschikt voor ontwikkeling en testen.
  1. Kies of u een Edge-share of een lokale Edge-share wilt maken. Volg de instructies in Een share toevoegen om een share te maken. Zorg ervoor dat u het selectievakje inschakelt voor het gebruik van de share met Edge Compute.

    Lokale Edge-share voor HW

    1. Als u besluit een bestaande share te gebruiken, moet u de share koppelen in plaats van een nieuwe share te maken.

      Ga in Azure Portal voor uw Azure Stack Edge-resource naar Shares. Selecteer en klik in de bestaande lijst met shares op een share die u wilt gebruiken.

      Bestaande lokale share voor HW selecteren

    2. Selecteer Koppelen en bevestig de koppeling wanneer u hierom wordt gevraagd.

      Bestaande lokale share koppelen voor HW

  2. Noteer de naam van de share. Wanneer deze share wordt gemaakt, wordt automatisch een permanent volumeobject gemaakt in het Kubernetes-cluster dat overeenkomt met de SMB-share die u hebt gemaakt.

MySQL implementeren

U gaat nu een stateful toepassing uitvoeren door een Kubernetes-implementatie te maken en deze te verbinden met de PV die u in de vorige stap hebt gemaakt met behulp van een PersistentVolumeClaim (PVC).

Alle kubectl opdrachten die u gebruikt voor het maken en beheren van stateful toepassingsimplementaties, moeten de naamruimte opgeven die is gekoppeld aan de configuratie. Als u de naamruimte in een kubectl-opdracht wilt opgeven, gebruikt u kubectl <command> -n <your-namespace>.

  1. Haal een lijst op met de pods die worden uitgevoerd op uw Kubernetes-cluster in uw naamruimte. Een pod is een toepassingscontainer of -proces dat wordt uitgevoerd op uw Kubernetes-cluster.

    kubectl get pods -n <your-namespace>
    

    Hier volgt een voorbeeld van het gebruik van de opdracht:

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

    De uitvoer moet aangeven dat er geen resources (pods) worden gevonden omdat er geen toepassingen worden uitgevoerd op uw cluster.

  2. U gebruikt de volgende YAML-bestanden. In mysql-deployment.yml het bestand wordt een implementatie beschreven die MySQL uitvoert en verwijst naar het PVC. Het bestand definieert een volumekoppeling voor /var/lib/mysqlen maakt vervolgens een PVC dat zoekt naar een volume van 20 GB.

    Deze claim wordt voldaan door een bestaande HW die statisch is ingericht toen u de share in de vorige stap maakte. Op uw apparaat wordt voor elke share een grote HW van 32 TB gemaakt. De HW voldoet aan de eisen van PVC en het PVC moet aan deze HW worden gebonden.

    Kopieer en sla het volgende mysql-deployment.yml bestand op in een map op de Windows-client die u gebruikt voor toegang tot het Azure Stack Edge Pro-apparaat.

    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. Kopieer en sla het bestand op als een mysql-pv.yml bestand in dezelfde map waar u het mysql-deployment.ymlbestand hebt opgeslagen. Als u de SMB-share wilt gebruiken waarmee u eerder hebt gemaakt kubectl, stelt u het volumeName veld in het PVC-object in op de naam van de share.

    Notitie

    Zorg ervoor dat de YAML-bestanden de juiste inspringing hebben. U kunt controleren met YAML-lint om te valideren en vervolgens op te slaan.

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

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

    Hier volgt een voorbeeld van de uitvoer van de implementatie.

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

    Noteer de naam van het pvc dat is gemaakt. U gebruikt deze in een latere stap.

  5. Implementeer de inhoud van het mysql-deployment.yml bestand.

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

    Hier volgt een voorbeeld van de uitvoer van de implementatie.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
        service/mysql created
        deployment.apps/mysql created
    
  6. Informatie over de implementatie weergeven.

    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. Vermeld de pods die door de implementatie zijn gemaakt.

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

    Hier volgt een voorbeelduitvoer.

    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. Inspecteer de PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    Hier volgt een voorbeelduitvoer.

    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>
    

Controleren of MySQL wordt uitgevoerd

Als u een opdracht wilt uitvoeren voor een container in een pod waarop MySQL wordt uitgevoerd, typt u:

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

Hier volgt een voorbeelduitvoer.

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>

Een implementatie verwijderen

Als u de implementatie wilt verwijderen, verwijdert u de geïmplementeerde objecten op naam. Deze objecten omvatten implementatie, service en PVC.

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

Hier ziet u voorbeelduitvoer van wanneer u de implementatie en de service verwijdert.

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

Hier ziet u voorbeelduitvoer van wanneer u het PVC verwijdert.

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

De PV is niet langer gebonden aan het PVC omdat het PVC is verwijderd. Wanneer de PV is ingericht toen de share werd gemaakt, moet u de share verwijderen. Volg vervolgens deze stappen:

  1. Ontkoppel de share. Ga in Azure Portal naar uw Azure Stack Edge-resourceshares > en selecteer en klik op de share die u wilt ontkoppelen. Selecteer Ontkoppelen en bevestig de bewerking. Wacht totdat de share is ontkoppeld. De ontkoppeling brengt de share (en dus het bijbehorende PersistentVolume) uit het Kubernetes-cluster uit.

    Lokale share ontkoppelen voor HW

  2. U kunt nu Verwijderen selecteren en verwijderen bevestigen om uw share te verwijderen. Hiermee moeten ook de share en de bijbehorende HW worden verwijderd.

    Lokale share verwijderen voor HW

Volgende stappen

Zie Een stateful toepassing implementeren via dynamische inrichting op een Azure Stack Edge Pro-apparaat voor meer informatie over het dynamisch inrichten van opslag