Поделиться через


Использование kubectl для запуска приложения Kubernetes с отслеживанием состояния с помощью PersistentVolume на устройстве Azure Stack Edge Pro

ОБЛАСТЬ ПРИМЕНЕНИЯ: Да для SKU GPU ProAzure Stack Edge Pro — GPUДа для SKU Pro 2Azure Stack Edge Pro 2Да для SKU R ProAzure Stack Edge Pro RДа для номера SKU Mini 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 узлом.

Для клиента, получающего доступ к устройству

  • У вас есть система клиента 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 используется только с одной репликой. Он подходит для разработки и тестирования.
  1. Выберите какую папку нужно создать: общую папку Edge или локальную общую папку Edge. Следуйте инструкциям в разделе Добавление общей папки, чтобы создать общую папку. Убедитесь, что установлен флажок Использовать общую папку с пограничными вычислениями.

    Экран

    1. Если вы решили использовать существующую общую папку, а не создавать новую, существующую папку понадобится подключить.

      На портале Azure на странице своего ресурса Azure Stack Edge перейдите в раздел Общие папки. В существующем списке общих папок выберите и щелкните общую папку, которую хотите использовать.

      Экран

    2. Выберите Подключить и при появлении запроса подтвердите подключение.

      Экран

  2. Запишите имя созданной общей папки. При создании этой общей папки в кластере Kubernetes автоматически будет создан объект постоянного тома, соответствующий созданной вами общей папке SMB.

Развертывание MySQL

Теперь вы сможете запустить приложение с отслеживанием состояния, создав развертывание Kubernetes и подключив его к PV, созданному на предыдущем шаге, с помощью PersistentVolumeClaim (PVC).

Все команды kubectl, используемые для создания развертываний приложений с отслеживанием состояния и управления ими, должны указывать пространство имен, связанное с конфигурацией. Чтобы указать пространство имен в команде kubectl, используйте kubectl <command> -n <your-namespace>.

  1. Получите список модулей 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) не найдены, поскольку в кластере не выполняются никакие приложения.

  2. Вы будете использовать следующие файлы 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
    
  3. Скопируйте и сохраните данные в виде файла 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
    
  4. Разверните файл 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. Оно потребуется вам на следующем шаге.

  5. Разверните содержимое файла 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
    
  6. Отобразите сведения о развертывании.

    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>
    
  7. Создайте список модулей 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>
    
  8. Проверьте 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 был подготовлен при создании общей папки, вам также понадобится удалить общую папку. Выполните следующие действия:

  1. Отключите общую папку. В портал Azure перейдите к общим ресурсам > Azure Stack Edge и выберите общую папку, которую вы хотите отключить. Выберите Отключить и подтвердите операцию. Подождите, пока общий ресурс не будет отключен. При отключении общая папка (и, следовательно, связанный PersistentVolume) удаляется из кластера Kubernetes.

    Экран

  2. Теперь вы можете выбрать Удалить и подтвердить удаление, чтобы удалить общую папку. Это действие также должно привести к удалению общей папки и соответствующего раздела PV.

    Экран

Следующие шаги

Сведения о динамической подготовке хранилища см. в статье Развертывание приложения с отслеживанием состояния с помощью динамической подготовки на устройстве Azure Stack Edge Pro.