Używanie narzędzia kubectl do uruchamiania aplikacji stanowej Kubernetes z trwałymvolume na urządzeniu Azure Stack Edge Pro
DOTYCZY: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro R Azure Stack Edge Mini R
W tym artykule pokazano, jak wdrożyć aplikację stanową pojedynczego wystąpienia na platformie Kubernetes przy użyciu elementu PersistentVolume (PV) i wdrożenia. Wdrożenie używa kubectl
poleceń w istniejącym klastrze Kubernetes i wdraża aplikację MySQL.
Ta procedura jest przeznaczona dla tych, którzy przejrzeli magazyn Kubernetes na urządzeniu Azure Stack Edge Pro i zapoznali się z pojęciami dotyczącymi magazynu Kubernetes.
Usługa Azure Stack Edge Pro obsługuje również uruchamianie kontenerów usługi Azure SQL Edge i można je wdrożyć w podobny sposób, jak opisano tutaj w usłudze MySQL. Aby uzyskać więcej informacji, zobacz Azure SQL Edge.
Wymagania wstępne
Przed wdrożeniem aplikacji stanowej należy spełnić następujące wymagania wstępne na urządzeniu i klienta, który będzie używany do uzyskiwania dostępu do urządzenia:
Na potrzeby urządzenia
- Masz poświadczenia logowania do urządzenia Azure Stack Edge Pro z 1 węzłem.
- Urządzenie jest aktywowane. Zobacz Aktywowanie urządzenia.
- Urządzenie ma rolę obliczeniową skonfigurowaną za pośrednictwem witryny Azure Portal i ma klaster Kubernetes. Zobacz Konfigurowanie obliczeń.
W przypadku uzyskiwania dostępu do urządzenia przez klienta
- Masz system kliencki z systemem Windows, który będzie używany do uzyskiwania dostępu do urządzenia Azure Stack Edge Pro.
Klient korzysta z programu Windows PowerShell 5.0 lub nowszego. Aby pobrać najnowszą wersję programu Windows PowerShell, przejdź do sekcji Instalowanie programu Windows PowerShell.
Możesz również mieć dowolnego innego klienta z obsługiwanym systemem operacyjnym. W tym artykule opisano procedurę korzystania z klienta systemu Windows.
Wykonano procedurę opisaną w artykule Uzyskiwanie dostępu do klastra Kubernetes na urządzeniu Azure Stack Edge Pro. Masz:
- Utworzono
userns1
przestrzeń nazw za pomocąNew-HcsKubernetesNamespace
polecenia . - Utworzono użytkownika
user1
za pomocąNew-HcsKubernetesUser
polecenia . - Udzielono
user1
dostępu zauserns1
pośrednictwemGrant-HcsKubernetesNamespaceAccess
polecenia . - Zainstalowano na kliencie i zapisano
kubectl
kubeconfig
plik z konfiguracją użytkownika w folderze C:\Users\<username>\.kube.
- Utworzono
Upewnij się, że
kubectl
wersja klienta nie jest niesymetryczna niż jedna wersja z wersji głównej platformy Kubernetes uruchomionej na urządzeniu Azure Stack Edge Pro.- Użyj
kubectl version
polecenia , aby sprawdzić wersję narzędzia kubectl uruchomioną na kliencie. Zanotuj pełną wersję. - W lokalnym interfejsie użytkownika urządzenia Azure Stack Edge Pro przejdź do pozycji Przegląd i zanotuj numer oprogramowania Kubernetes.
- Sprawdź te dwie wersje pod kątem zgodności z mapowaniem podanym w obsługiwanej wersji rozwiązania Kubernetes.
- Użyj
Wszystko jest gotowe do wdrożenia aplikacji stanowej na urządzeniu Azure Stack Edge Pro.
Aprowizuj statyczny pv
Aby statycznie aprowizować pv, musisz utworzyć udział na urządzeniu. Wykonaj następujące kroki, aby aprowizować sieć pv względem udziału SMB.
Uwaga
- Konkretny przykład użyty w tym artykule z instrukcjami nie działa z udziałami NFS. Ogólnie rzecz biorąc, udziały NFS można aprowizować na urządzeniu Azure Stack Edge z aplikacjami spoza bazy danych.
- Aby wdrożyć aplikacje stanowe korzystające z woluminów magazynu w celu zapewnienia magazynu trwałego, zalecamy użycie polecenia
StatefulSet
. W tym przykładzie użytoDeployment
tylko jednej repliki i nadaje się do programowania i testowania.
Wybierz, czy chcesz utworzyć udział usługi Edge, czy udział lokalny usługi Edge. Postępuj zgodnie z instrukcjami w temacie Dodawanie udziału , aby utworzyć udział. Zaznacz pole wyboru Use the share with Edge compute (Użyj udziału w obliczeniach usługi Edge).
Zamiast tworzyć nowy udział, jeśli zdecydujesz się użyć istniejącego udziału, musisz zainstalować udział.
W witrynie Azure Portal dla zasobu usługi Azure Stack Edge przejdź do pozycji Udziały. Z istniejącej listy udziałów wybierz i kliknij udział, którego chcesz użyć.
Wybierz pozycję Zainstaluj i potwierdź instalację po wyświetleniu monitu.
Zanotuj nazwę udziału. Po utworzeniu tego udziału w klastrze Kubernetes zostanie automatycznie utworzony trwały obiekt woluminu odpowiadający utworzonemu udziałowi SMB.
Wdrażanie bazy danych MySQL
Teraz uruchomisz aplikację stanową, tworząc wdrożenie Platformy Kubernetes i łącząc ją z serwerem PV utworzonym we wcześniejszym kroku przy użyciu elementu PersistentVolumeClaim (PVC).
Wszystkie kubectl
polecenia używane do tworzenia wdrożeń aplikacji stanowych i zarządzania nimi muszą określać przestrzeń nazw skojarzoną z konfiguracją. Aby określić przestrzeń nazw w poleceniu kubectl, użyj polecenia kubectl <command> -n <your-namespace>
.
Pobierz listę zasobników uruchomionych w klastrze Kubernetes w przestrzeni nazw. Zasobnik to kontener aplikacji lub proces uruchomiony w klastrze Kubernetes.
kubectl get pods -n <your-namespace>
Oto przykład użycia poleceń:
C:\Users\user>kubectl get pods -n "userns1" No resources found in userns1 namespace. C:\Users\user>
Dane wyjściowe nie powinny zawierać żadnych zasobów (zasobników), ponieważ w klastrze nie są uruchomione żadne aplikacje.
Użyjesz następujących plików YAML. W
mysql-deployment.yml
pliku opisano wdrożenie, które uruchamia program MySQL i odwołuje się do pvc. Plik definiuje instalację woluminu dla/var/lib/mysql
programu , a następnie tworzy pvc, który szuka woluminu 20 GB.To oświadczenie jest spełnione przez wszelkie istniejące pv, które zostały statycznie aprowizowane podczas tworzenia udziału w poprzednim kroku. Na urządzeniu jest tworzony duży pv o pojemności 32 TB dla każdego udziału. Pv spełnia wymagania określone przez PVC i PVC powinny być powiązane z tym PV.
Skopiuj i zapisz następujący
mysql-deployment.yml
plik w folderze na kliencie systemu Windows, którego używasz do uzyskiwania dostępu do urządzenia 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
Skopiuj i zapisz jako
mysql-pv.yml
plik w tym samym folderze, w którym zapisanomysql-deployment.yml
plik . Aby użyć udziału SMB utworzonego wcześniej zakubectl
pomocą polecenia , ustawvolumeName
pole w obiekcie PVC na nazwę udziału.Uwaga
Upewnij się, że pliki YAML mają poprawne wcięcie. Aby sprawdzić poprawność, a następnie zapisać, możesz sprawdzić lint YAML.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: volumeName: <smb-share-name-here> storageClassName: "" accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
mysql-pv.yaml
Wdróż plik.kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>
Oto przykładowe dane wyjściowe wdrożenia.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pv.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim created C:\Users\user>
Zanotuj nazwę utworzonego pvc. Będzie on używany w późniejszym kroku.
Wdróż zawartość
mysql-deployment.yml
pliku.kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>
Oto przykładowe dane wyjściowe wdrożenia.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1 service/mysql created deployment.apps/mysql created
Wyświetl informacje o wdrożeniu.
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>
Wyświetl listę zasobników utworzonych przez wdrożenie.
kubectl get pods -l <app=label> -n <your-user-namespace>
Oto przykładowe dane wyjściowe.
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>
Sprawdź element PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Oto przykładowe dane wyjściowe.
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>
Sprawdzanie, czy program MySQL jest uruchomiony
Aby uruchomić polecenie względem kontenera w zasobniku z uruchomionym programem MySQL, wpisz:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql
Oto przykładowe dane wyjściowe.
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>
Usuwanie wdrożenia
Aby usunąć wdrożenie, usuń wdrożone obiekty według nazwy. Te obiekty obejmują wdrożenie, usługę i PVC.
kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>
Oto przykładowe dane wyjściowe polecenia podczas usuwania wdrożenia i usługi.
C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>
Poniżej przedstawiono przykładowe dane wyjściowe danych wyjściowych po usunięciu pcv.
C:\Users\user>kubectl delete pvc mysql-pv-claim -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>
Pv nie jest już powiązany z PVC, ponieważ PVC został usunięty. Ponieważ tryb PV został aprowizowany podczas tworzenia udziału, należy usunąć udział. Wykonaj te kroki:
Odinstalowywanie udziału. W witrynie Azure Portal przejdź do udziałów zasobów > usługi Azure Stack Edge i wybierz i kliknij udział, który chcesz odinstalować. Wybierz pozycję Odinstaluj i potwierdź operację. Poczekaj, aż udział zostanie niezainstalowany. Odinstalowywanie zwalnia udział (a tym samym skojarzony element PersistentVolume) z klastra Kubernetes.
Teraz możesz wybrać pozycję Usuń i potwierdzić usunięcie, aby usunąć udział. Powinno to również spowodować usunięcie udziału i odpowiedniego pv.
Następne kroki
Aby dowiedzieć się, jak dynamicznie aprowizować magazyn, zobacz Deploy a stateful application via dynamic provisioning on an Azure Stack Edge Pro device (Wdrażanie aplikacji stanowej za pośrednictwem dynamicznej aprowizacji na urządzeniu Azure Stack Edge Pro)