Kubectl gebruiken om een Kubernetes stateful toepassing uit te voeren met StorageClass op uw Azure Stack Edge Pro GPU-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 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 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.
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>
.
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. 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
Kopieer en sla het bestand op als een
mysql-pvc.yml
bestand in dezelfde map waar u hetmysql-deployment.yml
bestand hebt opgeslagen. Als u de ingebouwde StorageClass wilt gebruiken die het Azure Stack Edge Pro-apparaat op een gekoppelde gegevensschijf gebruikt, stelt u hetstorageClassName
veld in het PVC-objectase-node-local
in op en moet accessModes zijnReadWriteOnce
.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
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.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>
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>
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>
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>