Verwenden von kubectl zum Ausführen einer zustandsbehafteten Kubernetes-Anwendung mit PersistentVolume auf einem Azure Stack Edge Pro-Gerät
GILT FÜR: Azure Stack Edge Pro – GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
In diesem Artikel erfahren Sie, wie Sie eine zustandsbehaftete Einzelinstanzanwendung in Kubernetes mit einem PersistentVolume (PV) und einer Bereitstellung bereitstellen. Die Bereitstellung wendet kubectl
-Befehle auf einen vorhandenen Kubernetes-Cluster an und stellt die Anwendung MySQL bereit.
Dieses Verfahren ist für Benutzer vorgesehen, die den Artikel Kubernetes-Speicher auf dem Azure Stack Edge Pro-Gerät gelesen haben und mit den Kubernetes-Speicherkonzepten vertraut sind.
Azure Stack Edge Pro unterstützt auch das Ausführen von Azure SQL Edge-Containern, die auf ähnliche Weise bereitgestellt werden, wie hier für MySQL beschrieben. Weitere Informationen finden Sie unter Azure SQL Edge.
Voraussetzungen
Erfüllen Sie vor der Bereitstellung der zustandsbehafteten Anwendung die folgenden Voraussetzungen auf Ihrem Gerät und dem Client, den Sie für den Zugriff auf das Gerät verwenden:
Für das Gerät
- Sie verfügen über Anmeldeinformationen für ein Azure Stack Edge Pro-Gerät mit einem Knoten.
- Das Gerät ist aktiviert. Weitere Informationen finden Sie unter Aktivieren des Geräts.
- Das Gerät verfügt über die über das Azure-Portal konfigurierte Computerolle und umfasst einen Kubernetes-Cluster. Siehe Konfigurieren der Computeumgebung.
Für den Client, der auf das Gerät zugreift
- Sie verfügen über ein Windows-Clientsystem, das für den Zugriff auf das Azure Stack Edge Pro-Gerät verwendet wird.
Auf dem Client wird Windows PowerShell 5.0 oder höher ausgeführt. Informationen zum Herunterladen der neuesten Version von Windows PowerShell finden Sie unter Installieren von Windows PowerShell.
Sie können auch einen anderen Client mit einem unterstützten Betriebssystem verwenden. In diesem Artikel wird die Vorgehensweise bei Verwendung eines Windows-Clients beschrieben.
Sie haben die unter Zugreifen auf den Kubernetes-Cluster auf dem Azure Stack Edge Pro-Gerät beschriebenen Schritte ausgeführt. Sie haben:
- den Namespace
userns1
über den BefehlNew-HcsKubernetesNamespace
erstellt. - den Benutzer
user1
über den BefehlNew-HcsKubernetesUser
erstellt. user1
Zugriff aufuserns1
über den BefehlGrant-HcsKubernetesNamespaceAccess
gewährt.kubectl
auf dem Client installiert und die Dateikubeconfig
mit der Benutzerkonfiguration in „C:\Users\<Benutzername>\.kube“ gespeichert.
- den Namespace
Stellen Sie sicher, dass die
kubectl
-Clientversion um nicht mehr als eine Version von der Kubernetes-Masterversion abweicht, die auf dem Azure Stack Edge Pro-Gerät ausgeführt wird.- Verwenden Sie
kubectl version
, um die kubectl-Version zu überprüfen, die auf dem Client ausgeführt wird. Notieren Sie sich den gesamten Versionsnamen. - Navigieren Sie auf der lokalen Benutzeroberfläche des Azure Stack Edge Pro-Geräts zu Übersicht, und notieren Sie sich die Kubernetes-Softwarenummer.
- Überprüfen Sie anhand der Zuordnungen in der Liste der unterstützten Kubernetes-Versionen, ob diese beiden Versionen kompatibel sind.
- Verwenden Sie
Sie können nun eine zustandsbehaftete Anwendung auf dem Azure Stack Edge Pro-Gerät bereitstellen.
Bereitstellen eines statischen PV
Zum statischen Bereitstellen eines PV müssen Sie auf Ihrem Gerät eine Freigabe erstellen. Führen Sie die folgenden Schritte aus, um ein PV für Ihre SMB-Freigabe bereitzustellen.
Hinweis
- Das in diesem Anleitungsartikel verwendete Beispiel funktioniert nicht bei Verwendung von NFS-Freigaben. Im Allgemeinen können NFS-Freigaben auf Ihrem Azure Stack Edge-Gerät mit Nicht-Datenbankanwendungen bereitgestellt werden.
- Zum Bereitstellen zustandsbehafteter Anwendungen, die mithilfe von Speichervolumes persistenten Speicher bereitstellen, wird die Verwendung von
StatefulSet
empfohlen. In diesem Beispiel wirdDeployment
nur mit einem Replikat verwendet. Das Beispiel eignet sich für Entwicklung und Tests.
Wählen Sie aus, ob Sie eine Edge-Freigabe oder lokale Edge-Freigabe erstellen möchten. Befolgen Sie die Anweisungen unter Hinzufügen einer Freigabe, um eine Freigabe zu erstellen. Aktivieren Sie das Kontrollkästchen Freigabe mit Edgecomputing verwenden.
Wenn Sie sich entscheiden, eine vorhandene Freigabe zu verwenden, müssen Sie die Freigabe nicht neu erstellen, sondern sie einbinden.
Wechseln Sie im Azure-Portal für Ihre Azure Stack Edge-Ressource zu Freigaben. Wählen Sie in der Liste der vorhandenen Freigaben die Freigabe aus, die Sie verwenden möchten, und klicken Sie darauf.
Wählen Sie Einbinden aus, und bestätigen Sie bei Aufforderung die Einbindung.
Notieren Sie sich den Namen der Freigabe. Bei der Erstellung dieser Freigabe wird automatisch ein persistentes Volumeobjekt im Kubernetes-Cluster erstellt, das der von Ihnen erstellten SMB-Freigabe entspricht.
Bereitstellen von MySQL
Sie führen nun eine zustandsbehaftete Anwendung aus, indem Sie eine Bereitstellung von Kubernetes erstellen und diese über einen PersistentVolumeClaim (PVC) mit dem im vorherigen Schritt erstellten PV verbinden.
Alle kubectl
-Befehle, die Sie zum Erstellen und Verwalten zustandsbehafteter Anwendungsbereitstellungen verwenden, müssen den mit der Konfiguration verbundenen Namespace angeben. Um den Namespace in einem kubectl-Befehl anzugeben, verwenden Sie kubectl <command> -n <your-namespace>
.
Rufen Sie eine Liste der Pods ab, die in Ihrem Kubernetes-Cluster in Ihrem Namespace ausgeführt werden. Ein Pod ist ein Anwendungscontainer oder -vorgang, der im Kubernetes-Cluster ausgeführt wird.
kubectl get pods -n <your-namespace>
Hier ist ein Beispiel für die Verwendung des Befehls angegeben:
C:\Users\user>kubectl get pods -n "userns1" No resources found in userns1 namespace. C:\Users\user>
Die Ausgabe muss angeben, dass keine Ressourcen (Pods) gefunden wurden, da in Ihrem Cluster keine Anwendungen ausgeführt werden.
Die folgenden YAML-Dateien werden verwendet. Die Datei
mysql-deployment.yml
beschreibt eine Bereitstellung, die MySQL ausführt und auf den PVC verweist. Die Datei definiert eine Volumebereitstellung für/var/lib/mysql
und erstellt dann einen PVC, der nach einem 20-GB-Volume sucht.Dieser Anspruch wird durch jedes vorhandene PV erfüllt, das bei der Erstellung der Freigabe im vorherigen Schritt statisch bereitgestellt wurde. Auf Ihrem Gerät wird für jede Freigabe ein großes PV mit 32 TB erstellt. Das PV erfüllt die vom PVC gestellten Anforderungen, und der PVC sollte an dieses PV gebunden sein.
Kopieren Sie die folgende Datei
mysql-deployment.yml
, und speichern Sie diese in einem Ordner auf dem Windows-Client, den Sie für den Zugriff auf das Azure Stack Edge Pro-Gerät verwenden.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
Kopieren und speichern Sie sie als Datei
mysql-pv.yml
in denselben Ordner, in dem Siemysql-deployment.yml
gespeichert haben. Um die SMB-Freigabe zu verwenden, die Sie zuvor mitkubectl
erstellt haben, legen Sie das FeldvolumeName
im PVC-Objekt auf den Namen der Freigabe fest.Hinweis
Stellen Sie sicher, dass die YAML-Dateien den richtigen Einzug haben. Sie können die Dateien mit YAML lint prüfen und dann speichern.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: volumeName: <smb-share-name-here> storageClassName: "" accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
Stellen Sie die Datei
mysql-pv.yaml
bereit.kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>
Es folgt eine Beispielausgabe der Bereitstellung.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pv.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim created C:\Users\user>
Notieren Sie sich den Namen des erstellten PVC. Sie werden ihn in einem späteren Schritt verwenden.
Stellen Sie den Inhalt der Datei
mysql-deployment.yml
bereit.kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>
Es folgt eine Beispielausgabe der Bereitstellung.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1 service/mysql created deployment.apps/mysql created
Zeigen Sie Informationen zur Bereitstellung an.
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>
Listen Sie die von der Bereitstellung erstellten Pods auf.
kubectl get pods -l <app=label> -n <your-user-namespace>
Hier ist eine Beispielausgabe.
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>
Untersuchen Sie den PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Hier ist eine Beispielausgabe.
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>
Überprüfen, ob MySQL ausgeführt wird
Um einen Befehl für einen Container in einem Pod auszuführen, in dem MySQL ausgeführt wird, geben Sie Folgendes ein:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql
Hier ist eine Beispielausgabe.
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>
Löschen einer Bereitstellung
Um die Bereitstellung zu löschen, löschen Sie die bereitgestellten Objekte nach Namen. Zu diesen Objekten gehören Bereitstellung, Dienst und PVC.
kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>
Hier ist eine Beispielausgabe für den Fall, dass Bereitstellung und Dienst gelöscht werden.
C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>
Hier ist eine Beispielausgabe für den Fall, dass Sie den PVC löschen.
C:\Users\user>kubectl delete pvc mysql-pv-claim -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>
Das PV ist nicht mehr an den PVC gebunden, weil der PVC gelöscht wurde. Da das PV bei der Erstellung der Freigabe bereitgestellt wurde, müssen Sie die Freigabe löschen. Führen Sie folgende Schritte aus:
Heben Sie die Bereitstellung der Freigabe auf. Navigieren Sie im Azure-Portal zu Azure Stack Edge-Ressourcen > Freigaben, und wählen Sie die Freigabe aus, deren Bereitstellung Sie aufheben möchten. Wählen Sie Bereitstellung aufheben aus, und bestätigen Sie den Vorgang. Warten Sie, bis die Bereitstellung der Freigabe aufgehoben wurde. Durch das Aufheben der Bereitstellung wird die Freigabe (und damit das zugehörige PersistentVolume) im Kubernetes-Cluster freigegeben.
Sie können jetzt Löschen auswählen und den Löschvorgang bestätigen, um die Freigabe zu löschen. Dadurch sollten auch die Freigabe und das entsprechende PV gelöscht werden.
Nächste Schritte
Lesen Sie den Artikel Verwenden von kubectl zum Ausführen einer zustandsbehafteten Kubernetes-Anwendung mit StorageClass auf einem Azure Stack Edge Pro-Gerät, um zu verstehen, wie Speicher dynamisch bereitgestellt wird.