Condividi tramite


Usare kubectl per eseguire un'applicazione con stato Kubernetes con persistentVolume nel dispositivo Azure Stack Edge Pro

SI APPLICA A: Sì per SKU GPU ProAzure Stack Edge Pro - GPUSì per lo SKU Pro 2Azure Stack Edge Pro 2Sì per SKU R ProAzure Stack Edge Pro RSì per SKU R MiniAzure Stack Edge Mini R

Questo articolo illustra come distribuire un'applicazione con stato a istanza singola in Kubernetes usando un oggetto PersistentVolume (PV) e una distribuzione. La distribuzione usa kubectl i comandi in un cluster Kubernetes esistente e distribuisce l'applicazione MySQL.

Questa procedura è destinata a coloro che hanno esaminato l'archiviazione Kubernetes nel dispositivo Azure Stack Edge Pro e hanno familiarità con i concetti dell'archiviazione Kubernetes.

Azure Stack Edge Pro supporta anche l'esecuzione di contenitori SQL Edge di Azure e possono essere distribuiti in modo analogo a quanto descritto qui per MySQL. Per altre informazioni, vedere SQL Edge di Azure.

Prerequisiti

Prima di poter distribuire l'applicazione con stato, completare i prerequisiti seguenti nel dispositivo e nel client che si userà per accedere al dispositivo:

Per il dispositivo

  • Si dispone di credenziali di accesso a un dispositivo Azure Stack Edge Pro a 1 nodo.

Per l'accesso del client al dispositivo

  • Si dispone di un sistema client Windows che verrà usato per accedere al dispositivo Azure Stack Edge Pro.
    • Il client esegue Windows PowerShell 5.0 o versione successiva. Per scaricare la versione più recente di Windows PowerShell, passare a Installare Windows PowerShell.

    • È possibile avere anche qualsiasi altro client con un Sistema operativo supportato. Questo articolo descrive la procedura quando si usa un client Windows.

    • La procedura descritta in Accedere al cluster Kubernetes nel dispositivo Azure Stack Edge Pro è stata completata. Precisamente:

      • È stato creato uno userns1 spazio dei nomi tramite il New-HcsKubernetesNamespace comando .
      • Creazione di un utente user1 tramite il New-HcsKubernetesUser comando .
      • Concesso l'accesso user1 a userns1 tramite il Grant-HcsKubernetesNamespaceAccess comando .
      • Installato kubectl nel client e salvato il kubeconfig file con la configurazione utente in C:\Users\<username>\.kube.
    • Assicurarsi che la versione del client kubectl non sia diversa da una versione della versione master Kubernetes in esecuzione nel dispositivo Azure Stack Edge Pro.

      • Usare kubectl version per controllare la versione di kubectl in esecuzione nel client. Prendere nota della versione completa.
      • Nell'interfaccia utente locale del dispositivo Azure Stack Edge Pro passare a Panoramica e prendere nota del numero di software Kubernetes.
      • Verificare che queste due versioni siano compatibili con il mapping fornito nella versione di Kubernetes supportata.

È possibile distribuire un'applicazione con stato nel dispositivo Azure Stack Edge Pro.

Effettuare il provisioning di un pv statico

Per effettuare il provisioning statico di un pv, è necessario creare una condivisione nel dispositivo. Seguire questa procedura per effettuare il provisioning di un pv nella condivisione SMB.

Nota

  • L'esempio specifico usato in questo articolo sulle procedure non funziona con le condivisioni NFS. In generale, è possibile effettuare il provisioning delle condivisioni NFS nel dispositivo Azure Stack Edge con applicazioni non di database.
  • Per distribuire applicazioni con stato che usano volumi di archiviazione per fornire spazio di archiviazione permanente, è consigliabile usare StatefulSet. Questo esempio usa Deployment con una sola replica ed è adatto per lo sviluppo e il test.
  1. Scegliere se si vuole creare una condivisione Edge o una condivisione locale edge. Seguire le istruzioni in Aggiungere una condivisione per creare una condivisione . Assicurarsi di selezionare la casella di controllo Usa la condivisione con il calcolo Edge.

    Condivisione locale edge per pv

    1. Invece di creare una nuova condivisione, se si decide di usare una condivisione esistente, sarà necessario montare la condivisione.

      Nella portale di Azure per la risorsa Azure Stack Edge passare a Condivisioni. Nell'elenco esistente di condivisioni selezionare e fare clic su una condivisione che si vuole usare.

      Selezionare la condivisione locale esistente per PV

    2. Selezionare Monta e confermare il montaggio quando richiesto.

      Montare una condivisione locale esistente per PV

  2. Prendere nota del nome della condivisione. Quando viene creata questa condivisione, viene creato automaticamente un oggetto volume permanente nel cluster Kubernetes corrispondente alla condivisione SMB creata.

Distribuire MySQL

A questo punto si eseguirà un'applicazione con stato creando una distribuzione Kubernetes e collegandola al pv creato nel passaggio precedente usando un PersistentVolumeClaim (PVC).

Tutti i kubectl comandi usati per creare e gestire distribuzioni di applicazioni con stato devono specificare lo spazio dei nomi associato alla configurazione. Per specificare lo spazio dei nomi in un comando kubectl, usare kubectl <command> -n <your-namespace>.

  1. Ottenere un elenco dei pod in esecuzione nel cluster Kubernetes nello spazio dei nomi. Un pod è un contenitore di applicazioni o un processo in esecuzione nel cluster Kubernetes.

    kubectl get pods -n <your-namespace>
    

    Di seguito è riportato un esempio di sintassi del comando:

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

    L'output deve indicare che non vengono trovate risorse (pod) perché non sono in esecuzione applicazioni nel cluster.

  2. Verranno usati i file YAML seguenti. Il mysql-deployment.yml file descrive una distribuzione che esegue MySQL e fa riferimento al PVC. Il file definisce un montaggio del volume per /var/lib/mysqle quindi crea un PVC che cerca un volume di 20 GB.

    Questa attestazione viene soddisfatta da qualsiasi pv esistente di cui è stato effettuato il provisioning statico durante la creazione della condivisione nel passaggio precedente. Nel dispositivo viene creata una grande pv di 32 TB per ogni condivisione. La PV soddisfa i requisiti stabiliti dal PVC e il PVC deve essere associato a questo PV.

    Copiare e salvare il file seguente mysql-deployment.yml in una cartella nel client Windows in uso per accedere al dispositivo 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. Copiare e salvare come mysql-pv.yml file nella stessa cartella in cui è stato salvato .mysql-deployment.yml Per usare la condivisione SMB creata in precedenza con kubectl, impostare il volumeName campo nell'oggetto PVC sul nome della condivisione.

    Nota

    Assicurarsi che i file YAML abbiano un rientro corretto. È possibile controllare con YAML lint per convalidare e quindi salvare.

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

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

    Ecco un output di esempio della distribuzione.

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

    Prendere nota del nome del PVC creato. Verrà usato in un passaggio successivo.

  5. Distribuire il contenuto del mysql-deployment.yml file.

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

    Ecco un output di esempio della distribuzione.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
        service/mysql created
        deployment.apps/mysql created
    
  6. Visualizzare informazioni sulla distribuzione.

    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. Elencare i pod creati dalla distribuzione.

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

    Di seguito è riportato un output di esempio.

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

    kubectl describe pvc <your-pvc-name>

    Di seguito è riportato un output di esempio.

    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>
    

Verificare che MySQL sia in esecuzione

Per eseguire un comando su un contenitore in un pod che esegue MySQL, digitare:

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

Di seguito è riportato un output di esempio.

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>

Eliminare una distribuzione

Per eliminare la distribuzione, eliminare gli oggetti distribuiti in base al nome. Questi oggetti includono distribuzione, servizio e PVC.

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

Ecco l'output di esempio di quando si elimina la distribuzione e il servizio.

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

Ecco l'output di esempio di quando si elimina il PVC.

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

La PV non è più vincolata al PVC perché il PVC è stato eliminato. Quando è stato effettuato il provisioning del pv al momento della creazione della condivisione, sarà necessario eliminare la condivisione. Seguire questa procedura:

  1. Smontare la condivisione. In portale di Azure passare alle condivisioni di risorse > di Azure Stack Edge e selezionare e fare clic sulla condivisione da smontare. Selezionare Smonta e confermare l'operazione. Attendere che la condivisione venga smontata. Lo smontaggio rilascia la condivisione (e quindi il PersistentVolume associato) dal cluster Kubernetes.

    Smontare la condivisione locale per PV

  2. È ora possibile selezionare Elimina e confermare l'eliminazione per eliminare la condivisione. Questa operazione dovrebbe anche eliminare la condivisione e il pv corrispondente.

    Eliminare la condivisione locale per pv

Passaggi successivi

Per informazioni su come effettuare il provisioning dinamico dell'archiviazione, vedere Distribuire un'applicazione con stato tramite provisioning dinamico in un dispositivo Azure Stack Edge Pro