Dela via


Använda kubectl för att köra ett tillståndskänsligt Kubernetes-program med en PersistentVolume på din Azure Stack Edge Pro-enhet

GÄLLER FÖR: Ja för Pro GPU SKUAzure Stack Edge Pro – GPUJa för Pro 2 SKUAzure Stack Edge Pro 2Ja för Pro R SKUAzure Stack Edge Pro RJa för Mini R SKUAzure Stack Edge Mini R

Den här artikeln visar hur du distribuerar ett tillståndskänsligt program med en enskild instans i Kubernetes med hjälp av en PersistentVolume (PV) och en distribution. Distributionen använder kubectl kommandon i ett befintligt Kubernetes-kluster och distribuerar MySQL-programmet.

Den här proceduren är avsedd för dem som har granskat Kubernetes-lagringen på Azure Stack Edge Pro-enheten och som är bekanta med begreppen i Kubernetes Storage.

Azure Stack Edge Pro stöder också körning av Azure SQL Edge-containrar och dessa kan distribueras på ett liknande sätt som beskrivs här för MySQL. Mer information finns i Azure SQL Edge.

Förutsättningar

Innan du kan distribuera det tillståndskänsliga programmet måste du uppfylla följande krav på enheten och klienten som du ska använda för att komma åt enheten:

För enheten

  • Du har inloggningsuppgifter till en Azure Stack Edge Pro-enhet med en nod.

För klientåtkomst till enheten

  • Du har ett Windows-klientsystem som ska användas för att komma åt Azure Stack Edge Pro-enheten.
    • Klienten kör Windows PowerShell 5.0 eller senare. Om du vill ladda ned den senaste versionen av Windows PowerShell går du till Installera Windows PowerShell.

    • Du kan också ha en annan klient med ett operativsystem som stöds. Den här artikeln beskriver proceduren när du använder en Windows-klient.

    • Du har slutfört proceduren som beskrivs i Åtkomst till Kubernetes-klustret på Azure Stack Edge Pro-enheten. Du har:

      • Skapade ett userns1 namnområde via New-HcsKubernetesNamespace kommandot .
      • Skapade en användare user1 via New-HcsKubernetesUser kommandot .
      • user1 Beviljad åtkomst till userns1 via Grant-HcsKubernetesNamespaceAccess kommandot .
      • Installerat kubectl på klienten och sparat kubeconfig filen med användarkonfigurationen till C:\Users\<username>\.kube.
    • Kontrollera att kubectl klientversionen inte är skev mer än en version från Kubernetes-huvudversionen som körs på din Azure Stack Edge Pro-enhet.

      • Använd kubectl version för att kontrollera vilken version av kubectl som körs på klienten. Anteckna den fullständiga versionen.
      • I det lokala användargränssnittet för din Azure Stack Edge Pro-enhet går du till Översikt och noterar Kubernetes-programvarunumret.
      • Verifiera dessa två versioner för kompatibilitet från mappningen som anges i Kubernetes-versionen som stöds.

Du är redo att distribuera ett tillståndskänsligt program på din Azure Stack Edge Pro-enhet.

Etablera en statisk PV

För att statiskt etablera en PV måste du skapa en resurs på enheten. Följ dessa steg för att etablera en PV mot din SMB-resurs.

Kommentar

  • Det specifika exempel som används i den här instruktioner-artikeln fungerar inte med NFS-resurser. I allmänhet kan NFS-resurser etableras på din Azure Stack Edge-enhet med icke-databasprogram.
  • Om du vill distribuera tillståndskänsliga program som använder lagringsvolymer för att tillhandahålla beständig lagring rekommenderar vi att du använder StatefulSet. Det här exemplet använder Deployment bara en replik och är lämplig för utveckling och testning.
  1. Välj om du vill skapa en Edge-resurs eller en lokal Edge-resurs. Följ anvisningarna i Lägg till en resurs för att skapa en resurs. Markera kryssrutan för Använd resursen med Edge-beräkning.

    Lokal Edge-resurs för PV

    1. I stället för att skapa en ny resurs måste du montera resursen om du bestämmer dig för att använda en befintlig resurs.

      I Azure Portal för din Azure Stack Edge-resurs går du till Resurser. I den befintliga listan över resurser väljer du och klickar på en resurs som du vill använda.

      Välj befintlig lokal resurs för PV

    2. Välj Montera och bekräfta monteringen när du uppmanas att göra det.

      Montera befintlig lokal resurs för PV

  2. Anteckna resursnamnet. När den här resursen skapas skapas automatiskt ett beständigt volymobjekt i Kubernetes-klustret som motsvarar den SMB-resurs som du skapade.

Distribuera MySQL

Nu ska du köra ett tillståndskänsligt program genom att skapa en Kubernetes-distribution och ansluta den till den PV som du skapade i det tidigare steget med hjälp av en PersistentVolumeClaim (PVC).

Alla kubectl kommandon som du använder för att skapa och hantera tillståndskänsliga programdistributioner måste ange det namnområde som är associerat med konfigurationen. Om du vill ange namnområdet i ett kubectl-kommando använder du kubectl <command> -n <your-namespace>.

  1. Hämta en lista över poddar som körs i kubernetes-klustret i ditt namnområde. En podd är en programcontainer eller process som körs på ditt Kubernetes-kluster.

    kubectl get pods -n <your-namespace>
    

    Här är ett exempel på kommandoanvändning:

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

    Utdata ska ange att inga resurser (poddar) hittas eftersom det inte finns några program som körs i klustret.

  2. Du använder följande YAML-filer. Filen mysql-deployment.yml beskriver en distribution som kör MySQL och refererar till PVC. Filen definierar en volymmontering för /var/lib/mysqloch skapar sedan en PVC som söker efter en volym på 20 GB.

    Det här anspråket uppfylls av alla befintliga PV:er som statiskt etablerades när du skapade resursen i det tidigare steget. På enheten skapas en stor PV på 32 TB för varje resurs. Den PV uppfyller de krav som anges av PVC och PVC bör vara bunden till denna PV.

    Kopiera och spara följande mysql-deployment.yml fil i en mapp på Windows-klienten som du använder för att komma åt Azure Stack Edge Pro-enheten.

    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. Kopiera och spara som en mysql-pv.yml fil till samma mapp där du sparade mysql-deployment.yml. Om du vill använda den SMB-resurs som du skapade tidigare med kubectlanger du volumeName fältet i PVC-objektet till resursens namn.

    Kommentar

    Kontrollera att YAML-filerna har rätt indrag. Du kan kontrollera med YAML-lint för att verifiera och sedan spara.

    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 Distribuera filen.

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

    Här är ett exempel på utdata från distributionen.

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

    Observera namnet på den PVC som skapats. Du kommer att använda den i ett senare steg.

  5. Distribuera innehållet i mysql-deployment.yml filen.

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

    Här är ett exempel på utdata från distributionen.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
        service/mysql created
        deployment.apps/mysql created
    
  6. Visa information om distributionen.

    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. Visa en lista över poddar som skapats av distributionen.

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

    Här är ett exempel på utdata.

    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. Granska PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    Här är ett exempel på utdata.

    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>
    

Kontrollera att MySQL körs

Om du vill köra ett kommando mot en container i en podd som kör MySQL skriver du:

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

Här är ett exempel på utdata.

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>

Ta bort en distribution

Ta bort distributionen genom att ta bort de distribuerade objekten efter namn. Dessa objekt omfattar distribution, tjänst och PVC.

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

Här är exempel på utdata från när du tar bort distributionen och tjänsten.

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

Här är exempel på utdata från när du tar bort PVC:en.

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

Den PV är inte längre bunden till PVC eftersom PVC togs bort. Eftersom PV etablerades när resursen skapades måste du ta bort resursen. Följ de här stegen:

  1. Demontera resursen. I Azure Portal går du till dina Azure Stack Edge-resursresurser > och väljer och klickar på den resurs som du vill demontera. Välj Demontera och bekräfta åtgärden. Vänta tills resursen har demonterats. När du demonterar frigörs resursen (och därmed tillhörande PersistentVolume) från Kubernetes-klustret.

    Demontera lokal resurs för PV

  2. Nu kan du välja Ta bort och bekräfta borttagningen för att ta bort resursen. Detta bör också ta bort resursen och motsvarande PV.

    Ta bort lokal resurs för PV

Nästa steg

Information om hur du dynamiskt etablerar lagring finns i Distribuera ett tillståndskänsligt program via dynamisk etablering på en Azure Stack Edge Pro-enhet