Использование kubectl для запуска приложения Kubernetes с отслеживанием состояния с помощью PersistentVolume на устройстве Azure Stack Edge Pro
ОБЛАСТЬ ПРИМЕНЕНИЯ: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
В этой статье показано, как развернуть приложение с отслеживанием состояния с одним экземпляром в Kubernetes с помощью PersistentVolume (PV) и развертывания. Развертывание использует команды kubectl
в существующем кластере Kubernetes и развертывает приложение MySQL.
Эта процедура предназначена для пользователей, которые ознакомились со статьей об использовании хранилища Kubernetes на устройстве Azure Stack Edge Pro, а также знакомы с основными понятиями хранилища Kubernetes.
Azure Stack Edge Pro также поддерживает запуск контейнеров SQL для пограничных вычислений, которые можно развернуть, выполнив приведенные в этой статье действия для MySQL. См. дополнительные сведения об SQL для пограничных вычислений.
Необходимые компоненты
Перед развертыванием приложения с отслеживанием состояния выполните указанные ниже предварительные требования на устройстве и клиенте, который будете использовать для доступа к устройству.
Для устройств
- У вас есть учетные данные для входа на устройство 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.
Подготовка статического PV
Чтобы статически подготовить PV, необходимо создать общую папку на устройстве. Выполните следующие действия, чтобы подготовить PV для общего ресурса SMB.
Примечание.
- Конкретный пример, используемый в этой статье, не работает с общими папками NFS. Как правило, общие папки NFS можно подготовить на устройстве Azure Stack Edge с приложениями, не являющимися базами данных.
- Для развертывания приложений с отслеживанием состояния, которые для обеспечения постоянного хранилища используют тома хранилища, рекомендуется использовать
StatefulSet
. В этом примере параметрDeployment
используется только с одной репликой. Он подходит для разработки и тестирования.
Выберите какую папку нужно создать: общую папку Edge или локальную общую папку Edge. Следуйте инструкциям в разделе Добавление общей папки, чтобы создать общую папку. Убедитесь, что установлен флажок Использовать общую папку с пограничными вычислениями.
Если вы решили использовать существующую общую папку, а не создавать новую, существующую папку понадобится подключить.
На портале Azure на странице своего ресурса Azure Stack Edge перейдите в раздел Общие папки. В существующем списке общих папок выберите и щелкните общую папку, которую хотите использовать.
Выберите Подключить и при появлении запроса подтвердите подключение.
Запишите имя созданной общей папки. При создании этой общей папки в кластере Kubernetes автоматически будет создан объект постоянного тома, соответствующий созданной вами общей папке SMB.
Развертывание MySQL
Теперь вы сможете запустить приложение с отслеживанием состояния, создав развертывание Kubernetes и подключив его к PV, созданному на предыдущем шаге, с помощью 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, который был статически предоставлен при создании общей папки на предыдущем шаге. На вашем устройстве для каждой общей папки создается большой PV размером 32 ТБ. Раздел PV должен соответствовать требованиям, заданным в PVC. Кроме того, 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
Скопируйте и сохраните данные в виде файла
mysql-pv.yml
в той же папке, где был сохранен файлmysql-deployment.yml
. Чтобы использовать общую папку SMB, созданную ранее с помощьюkubectl
, задайте для поляvolumeName
в объекте PVC имя общей папки.Примечание.
Убедитесь, что файлы YAML имеют правильный отступ. Вы можете уточнить это с помощью YAML lint, а также выполнить проверку, а затем сохранить.
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
.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-pv.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim created C:\Users\user>
Запишите имя созданного PVC. Оно потребуется вам на следующем шаге.
Разверните содержимое файла
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
Отобразите сведения о развертывании.
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>
Создайте список модулей 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-c85f7f79c-vzz7j 1/1 Running 1 14m C:\Users\user>
Проверьте PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Ниже приведен пример выходных данных.
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>
Проверка того, выполняется ли MySQL
Чтобы выполнить команду для контейнера в модуле pod, работающем под управлением MySQL, введите:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql
Ниже приведен пример выходных данных.
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>
Удаление развертывания
Чтобы удалить развертывание, удалите развернутые объекты по имени. К таким объектам относятся развертывание, служба и 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 -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>
PV больше не привязан к запросу PVC, поскольку он удален. Поскольку раздел PV был подготовлен при создании общей папки, вам также понадобится удалить общую папку. Выполните следующие действия:
Отключите общую папку. В портал Azure перейдите к общим ресурсам > Azure Stack Edge и выберите общую папку, которую вы хотите отключить. Выберите Отключить и подтвердите операцию. Подождите, пока общий ресурс не будет отключен. При отключении общая папка (и, следовательно, связанный PersistentVolume) удаляется из кластера Kubernetes.
Теперь вы можете выбрать Удалить и подтвердить удаление, чтобы удалить общую папку. Это действие также должно привести к удалению общей папки и соответствующего раздела PV.
Следующие шаги
Сведения о динамической подготовке хранилища см. в статье Развертывание приложения с отслеживанием состояния с помощью динамической подготовки на устройстве Azure Stack Edge Pro.