Kubectl gebruiken om een Kubernetes stateful toepassing uit te voeren met een PersistentVolume op uw Azure Stack Edge Pro-apparaat
VAN TOEPASSING OP: Azure Stack Edge Pro - GPU
Azure Stack Edge Pro 2
Azure Stack Edge Pro R
Azure 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 deNew-HcsKubernetesNamespace
opdracht. - Er is een gebruiker
user1
gemaakt via deNew-HcsKubernetesUser
opdracht. user1
De toegang verleend viauserns1
deGrant-HcsKubernetesNamespaceAccess
opdracht.kubectl
Geïnstalleerd op de client en hetkubeconfig
bestand met de gebruikersconfiguratie opgeslagen in C:\Users\<username>\.kube.
- Er is een
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.
- Hiermee
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 gebruiktDeployment
en is geschikt voor ontwikkeling en testen.
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.
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.
Selecteer Koppelen en bevestig de koppeling wanneer u hierom wordt gevraagd.
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>
.
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.
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/mysql
en 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
Kopieer en sla het bestand op als een
mysql-pv.yml
bestand in dezelfde map waar u hetmysql-deployment.yml
bestand hebt opgeslagen. Als u de SMB-share wilt gebruiken waarmee u eerder hebt gemaaktkubectl
, stelt u hetvolumeName
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
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.
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
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>
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>
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:
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.
U kunt nu Verwijderen selecteren en verwijderen bevestigen om uw share te verwijderen. Hiermee moeten ook de share en de bijbehorende HW worden verwijderd.