Delen via


Kubectl gebruiken om een Kubernetes stateful toepassing uit te voeren met StorageClass op uw Azure Stack Edge Pro GPU-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 in Kubernetes implementeert met behulp van een StorageClass om opslag en een implementatie dynamisch in te richten. 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.

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.

MySQL implementeren

U gaat nu een stateful toepassing uitvoeren door een Kubernetes-implementatie te maken en deze te verbinden met de ingebouwde StorageClass 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. Er wordt een dynamische HW ingericht en het PVC is gebonden aan deze HW.

    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-sc
    
  3. Kopieer en sla het bestand op als een mysql-pvc.yml bestand in dezelfde map waar u het mysql-deployment.ymlbestand hebt opgeslagen. Als u de ingebouwde StorageClass wilt gebruiken die het Azure Stack Edge Pro-apparaat op een gekoppelde gegevensschijf gebruikt, stelt u het storageClassName veld in het PVC-object ase-node-local in op en moet accessModes zijn ReadWriteOnce.

    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-sc
    spec:
      storageClassName: ase-node-local
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Implementeer het mysql-pvc.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-pvc.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim-sc created
    C:\Users\user>
    

    Noteer de naam van het pvc dat is gemaakt - in dit voorbeeld mysql-pv-claim-sc. 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
    C:\Users\user>
    
  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:  Thu, 20 Aug 2020 11:14:25 -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-sc
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-695c4d9dcd (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set mysql-695c4d9dcd 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-695c4d9dcd-rvzff   1/1     Running   0          40s
    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-sc -n userns1
    Name:          mysql-pv-claim-sc
    Namespace:     userns1
    StorageClass:  ase-node-local
    Status:        Bound
    Volume:        pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim-sc","namespace":"userns1"},"spec":{"...
                   pv.kubernetes.io/bind-completed: yes
                   pv.kubernetes.io/bound-by-controller: yes
                   volume.beta.kubernetes.io/storage-provisioner: rancher.io/local-path
                   volume.kubernetes.io/selected-node: k8s-3q7lhq2cl-3q7lhq2
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      20Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Mounted By:    mysql-695c4d9dcd-rvzff
    Events:
      Type    Reason                 Age                From                                                                                                Message
      ----    ------                 ----               ----                                                                                                -------
      Normal  WaitForFirstConsumer   71s (x2 over 77s)  persistentvolume-controller                                                                         waiting for first consumer to be created before binding
      Normal  ExternalProvisioning   62s                persistentvolume-controller                                                                         waiting for a volume to be created, either by external provisioner "rancher.io/local-path" or manually created by system administrator
      Normal  Provisioning           62s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  External provisioner is provisioning volume for claim "userns1/mysql-pv-claim-sc"
      Normal  ProvisioningSucceeded  60s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  Successfully provisioned volume pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    C:\Users\user>
    

Controleren of MySQL wordt uitgevoerd

Als u wilt controleren of de toepassing wordt uitgevoerd, typt u:

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

Geef het wachtwoord op wanneer u hierom wordt gevraagd. Het wachtwoord staat in uw mysql-deployment bestand.

Hier volgt een voorbeelduitvoer.

C:\Users\user>kubectl exec mysql-695c4d9dcd-rvzff -i -t -n userns1 -- mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
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-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>

Volgende stappen

Zie Een stateless toepassing implementeren op een Azure Stack Edge Pro-apparaat voor meer informatie over het configureren van netwerken via kubectl