Usare kubectl per eseguire un'applicazione con stato Kubernetes con persistentVolume nel dispositivo Azure Stack Edge Pro
SI APPLICA A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure 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.
- Il dispositivo viene attivato. Vedere Attivare il dispositivo.
- Il dispositivo ha il ruolo di calcolo configurato tramite il portale di Azure e ha un cluster Kubernetes. Vedere Configurare il calcolo.
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 ilNew-HcsKubernetesNamespace
comando . - Creazione di un utente
user1
tramite ilNew-HcsKubernetesUser
comando . - Concesso l'accesso
user1
auserns1
tramite ilGrant-HcsKubernetesNamespaceAccess
comando . - Installato
kubectl
nel client e salvato ilkubeconfig
file con la configurazione utente in C:\Users\<username>\.kube.
- È stato creato uno
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.
- Usare
È 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 usaDeployment
con una sola replica ed è adatto per lo sviluppo e il test.
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.
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 Monta e confermare il montaggio quando richiesto.
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>
.
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.
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/mysql
e 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
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 conkubectl
, impostare ilvolumeName
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
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.
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
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>
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>
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:
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.
È ora possibile selezionare Elimina e confermare l'eliminazione per eliminare la condivisione. Questa operazione dovrebbe anche eliminare la condivisione e il pv corrispondente.
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