Använda kubectl för att köra ett tillståndskänsligt Kubernetes-program med StorageClass på din Azure Stack Edge Pro GPU-enhet
GÄLLER FÖR: Azure Stack Edge Pro – GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure 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 StorageClass för att dynamiskt etablera lagring 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.
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.
- Enheten är aktiverad. Se Aktivera enheten.
- Enheten har beräkningsrollen konfigurerad via Azure Portal och har ett Kubernetes-kluster. Se Konfigurera beräkning.
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 viaNew-HcsKubernetesNamespace
kommandot . - Skapade en användare
user1
viaNew-HcsKubernetesUser
kommandot . user1
Beviljad åtkomst tilluserns1
viaGrant-HcsKubernetesNamespaceAccess
kommandot .- Installerat
kubectl
på klienten och sparatkubeconfig
filen med användarkonfigurationen till C:\Users\<username>\.kube.
- Skapade ett
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.
- Använd
Du är redo att distribuera ett tillståndskänsligt program på din Azure Stack Edge Pro-enhet.
Distribuera MySQL
Nu ska du köra ett tillståndskänsligt program genom att skapa en Kubernetes-distribution och ansluta den till den inbyggda StorageClass 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>
.
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.
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/mysql
och skapar sedan en PVC som söker efter en volym på 20 GB. En dynamisk PV etableras och PVC är 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-sc
Kopiera och spara som en
mysql-pvc.yml
fil till samma mapp där du sparademysql-deployment.yml
. Om du vill använda den inbyggda StorageClass som Azure Stack Edge Pro-enheten på en ansluten datadisk anger dustorageClassName
fältet i PVC-objektet tillase-node-local
och accessModes ska varaReadWriteOnce
.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-sc spec: storageClassName: ase-node-local accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
mysql-pvc.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-pvc.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim-sc created C:\Users\user>
Observera namnet på den PVC som skapats – i det här exemplet
mysql-pv-claim-sc
. Du kommer att använda den i ett senare steg.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 C:\Users\user>
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: 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>
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-695c4d9dcd-rvzff 1/1 Running 0 40s C:\Users\user>
Granska PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Här är ett exempel på utdata.
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>
Kontrollera att MySQL körs
Kontrollera att programmet körs genom att skriva:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql -p
Ange lösenordet när du uppmanas till det. Lösenordet finns i filen mysql-deployment
.
Här är ett exempel på utdata.
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>
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-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>
Nästa steg
Information om hur du konfigurerar nätverk via kubectl finns i Distribuera ett tillståndslöst program på en Azure Stack Edge Pro-enhet