Использование kubectl для запуска приложения Kubernetes с отслеживанием состояния с помощью StorageClass на устройстве GPU Azure Stack Edge Pro
ОБЛАСТЬ ПРИМЕНЕНИЯ: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
В этой статье показано, как развернуть приложение с отслеживанием состояния с одним экземпляром в Kubernetes, используя StorageClass для динамического предоставления хранилища и развертывания. Развертывание использует команды kubectl
в существующем кластере Kubernetes и развертывает приложение MySQL.
Эта процедура предназначена для пользователей, которые ознакомились со статьей об использовании хранилища Kubernetes на устройстве Azure Stack Edge Pro, а также знакомы с основными понятиями хранилища Kubernetes.
Необходимые компоненты
Перед развертыванием приложения с отслеживанием состояния выполните указанные ниже предварительные требования на устройстве и клиенте, который будете использовать для доступа к устройству.
Для устройств
- У вас есть учетные данные для входа на устройство Azure Stack Edge Pro с 1 узлом.
- Устройство активировано. См. Активация устройства.
- Для устройства настроена роль вычислений на портале Azure, а также установлен кластер Kubernetes. См. Настройка вычислений.
Для клиента, получающего доступ к устройству
- У вас есть система клиента Windows, которая будет использоваться для доступа к устройству Azure Stack Edge Pro.
На клиенте работает Windows PowerShell 5.0 или более поздней версии. Чтобы узнать, как скачать последнюю версию Windows PowerShell, перейдите к статье Установка Windows PowerShell.
Также можно использовать любой другой клиент с поддерживаемой операционной системой. В этой статье описывается процедура с использованием клиента Windows.
Вы выполнили процедуру, описанную в статье Доступ к кластеру Kubernetes на устройстве Azure Stack Edge Pro. Вы выполнили следующие задачи:
- Создали пространство имен
userns1
с помощью командыNew-HcsKubernetesNamespace
. - Создали пользователя
user1
с помощью командыNew-HcsKubernetesUser
. - Предоставили доступ
user1
кuserns1
с помощью командыGrant-HcsKubernetesNamespaceAccess
. - Установлено
kubectl
на клиенте и сохранитеkubeconfig
файл с конфигурацией пользователя на C:\Users\username>\<.kube.
- Создали пространство имен
Убедитесь, что версия клиента
kubectl
отличается не более чем на единицу от главной версии Kubernetes, работающей на устройстве Azure Stack Edge Pro.- Используйте
kubectl version
для проверки версии kubectl, работающей на клиенте. Запишите полный номер версии. - В локальном пользовательском веб-интерфейсе устройства Azure Stack Edge Pro перейдите к панели Обзор и запишите номер ПО Kubernetes.
- Проверьте эти две версии для совместимости из сопоставления, предоставленного в поддерживаемой версии Kubernetes.
- Используйте
Теперь вы готовы к развертыванию приложения с отслеживанием состояния на устройстве Azure Stack Edge Pro.
Развертывание MySQL
Теперь вы сможете запустить приложение с отслеживанием состояния, создав развертывание Kubernetes и подключив его к встроенному StorageClass с помощью PersistentVolumeClaim (PVC).
Все команды kubectl
, используемые для создания развертываний приложений с отслеживанием состояния и управления ими, должны указывать пространство имен, связанное с конфигурацией. Чтобы указать пространство имен в команде kubectl, используйте kubectl <command> -n <your-namespace>
.
Получите список модулей pod, выполняющихся в кластере Kubernetes в пространстве имен. Модуль pod — это контейнер приложения или процесс, выполняющийся в кластере Kubernetes.
kubectl get pods -n <your-namespace>
Ниже приведен пример применения этой команды:
C:\Users\user>kubectl get pods -n "userns1" No resources found in userns1 namespace. C:\Users\user>
В выходных данных должно быть указано, что ресурсы (модули pod) не найдены, поскольку в кластере не выполняются никакие приложения.
Вы будете использовать следующие файлы YAML. Файл
mysql-deployment.yml
описывает развертывание, которое запускает MySQL и ссылается на PVC. Файл определяет подключение тома для/var/lib/mysql
, а затем создает PVC, который выполняет поиск тома размером 20 ГБ. Динамический PV подготовлен к работе, а PVC привязан к этому PV.Скопируйте и сохраните следующий файл
mysql-deployment.yml
в папке клиента Windows, который используется для доступа к устройству 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-sc
Скопируйте и сохраните данные в виде файла
mysql-pvc.yml
в той же папке, где был сохранен файлmysql-deployment.yml
. Чтобы использовать встроенный StorageClass этого устройства Azure Stack Edge Pro на подключенном диске данных, задайте для поляstorageClassName
в объекте PVC, значениеase-node-local
, а для accessModes — значениеReadWriteOnce
.Примечание.
Убедитесь, что файлы YAML имеют правильный отступ. Вы можете уточнить это с помощью YAML lint, а также выполнить проверку, а затем сохранить.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim-sc spec: storageClassName: ase-node-local accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
Разверните файл
mysql-pvc.yaml
.kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>
Ниже приведен пример выходных данных развертывания.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pvc.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim-sc created C:\Users\user>
Запишите имя созданного PVC, в этом примере —
mysql-pv-claim-sc
. Оно потребуется вам на следующем шаге.Разверните содержимое файла
mysql-deployment.yml
.kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>
Ниже приведен пример выходных данных развертывания.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1 service/mysql created deployment.apps/mysql created C:\Users\user>
Отобразите сведения о развертывании.
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>
Создайте список модулей pod, созданных при развертывании.
kubectl get pods -l <app=label> -n <your-user-namespace>
Ниже приведен пример выходных данных.
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>
Проверьте PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Ниже приведен пример выходных данных.
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>
Проверка того, выполняется ли MySQL
Чтобы убедиться, что приложение выполняется, введите следующую команду:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql -p
При появлении запроса укажите пароль. Пароль находится в файле mysql-deployment
.
Ниже приведен пример выходных данных.
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>
Удаление развертывания
Чтобы удалить развертывание, удалите развернутые объекты по имени. К таким объектам относятся развертывание, служба и PVC.
kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>
Ниже приведен пример выходных данных при удалении развертывания и службы.
C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>
Ниже приведен пример выходных данных при удалении PVC.
C:\Users\user>kubectl delete pvc mysql-pv-claim-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>
Следующие шаги
Дополнительные сведения о настройке сети с помощью kubectl см. в статье Развертывание приложения без отслеживания состояния на устройстве Azure Stack Edge Pro.