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


Развертывание контейнера SQL Azure для пограничных вычислений в Kubernetes

Внимание

Azure SQL Edge будет прекращена 30 сентября 2025 г. Дополнительные сведения и параметры миграции см. в уведомлении о выходе на пенсию.

Примечание.

Azure SQL Edge больше не поддерживает платформу ARM64.

Azure SQL Edge можно развернуть в кластере Kubernetes как в модуле IoT Edge с помощью Azure IoT Edge, работающего в Kubernetes, так и в виде автономного модуля контейнера. В оставшейся части этой статьи мы сосредоточимся на автономном развертывании контейнеров в кластере Kubernetes. Сведения о развертывании Azure IoT Edge в Kubernetes см. в статье Azure IoT Edge в Kubernetes (предварительная версия).

В этом руководстве показано, как настроить высокодоступный экземпляр SQL Azure в контейнере в кластере Kubernetes.

  • Создание пароля SA
  • Создать хранилище
  • Создание развертывания
  • Подключение в SQL Server Management Studio (SSMS)
  • Проверка сбоя и восстановление

В Kubernetes версии 1.6 и более поздних поддерживаются классы хранилища, утверждения постоянного тома, а также тип тома диска Azure. Поддерживается создание собственных экземпляров SQL Azure для пограничных вычислений в собственном коде Kubernetes и управление ими. В примере, приведенном в этой статье, показано, как создать развертывание для достижения высокой доступности, аналогичной экземпляру отказоустойчивого кластера общего диска. В этой конфигурации Kubernetes играет роль оркестратора кластера. При сбое экземпляра SQL Azure для пограничных вычислений в контейнере оркестратор загружает другой экземпляр контейнера, который подключается к тому же постоянному хранилищу.

Схема пограничных вычислений SQL Azure в кластере Kubernetes.

На предыдущей схеме azure-sql-edge — это контейнер внутри модуля Pod. Kubernetes управляет ресурсами в кластере. Применение набора реплик гарантирует автоматическое восстановление pod в случае отказа узла. Приложения подключаются к службе. В этом случае служба представляет подсистему балансировки нагрузки, которая содержит IP-адрес, остающийся неизменным в случае отказа azure-sql-edge.

На следующей схеме в контейнере azure-sql-edge происходит сбой. Как оркестратор Kubernetes гарантирует правильное количество работоспособных экземпляров в наборе реплик и запускает новый контейнер в соответствии с конфигурацией. Оркестратор запускает новый модуль Pod на том же узле, и azure-sql-edge повторно подключается к тому же постоянному хранилищу. Служба подключается к повторно созданному azure-sql-edge.

Схема пограничных вычислений SQL Azure в кластере Kubernetes после сбоя pod.

На следующей схеме сбой затронул узел, на котором размещен контейнер azure-sql-edge. Оркестратор запускает новый модуль Pod на другом узле, и azure-sql-edge повторно подключается к тому же постоянному хранилищу. Служба подключается к повторно созданному azure-sql-edge.

Схема пограничных вычислений SQL Azure в кластере Kubernetes после сбоя узла.

Необходимые компоненты

  • Кластер Kubernetes

    • Для работы с этим руководством требуется кластер Kubernetes. В шагах для управления кластером используется kubectl.

    • В этом руководстве мы используем Служба Azure Kubernetes для развертывания SQL Azure Edge. См. раздел Развертывание кластера службы Azure Kubernetes (AKS) для создания кластера Kubernetes с одним узлом в AKS с помощью kubectl.

    Примечание.

    Для защиты от сбоя узла кластер Kubernetes требует наличия нескольких узлов.

  • Azure CLI

    • Инструкции в этом учебнике проверены на соответствие Azure CLI 2.10.1.

Создание пространства имен Kubernetes для развертывания SQL Edge

Создайте пространство имен в кластере Kubernetes. Это пространство имен используется для развертывания SQL Edge и всех необходимых артефактов. Дополнительные сведения о пространствах имен Kubernetes см. в разделе "Пространства имен".

kubectl create namespace <namespace name>

Создание пароля SA

Создайте пароль SA в кластере Kubernetes. Kubernetes может управлять конфиденциальными сведениями о конфигурации, например паролями, в качестве секретов.

Следующая команда создает пароль для учетной записи SA:

kubectl create secret generic mssql --from-literal=MSQL_SA_PASSWORD="MyC0m9l&xP@ssw0rd" -n <namespace name>

Замените MyC0m9l&xP@ssw0rd надежным паролем.

Создать хранилище

Настройте постоянный том и утверждение постоянного тома в кластере Kubernetes. Выполните следующие действия:

  1. Создайте манифест, чтобы определить класс хранения и утверждение постоянного тома. В манифесте описана подготовка хранилища, параметры и политика обработки заявок на хранение. Кластер Kubernetes использует этот манифест для создания постоянного хранилища.

    В следующем примере на языке YAML определяется класс хранения и утверждение постоянного тома. Подготовка класса хранилища — azure-disk, так как этот кластер Kubernetes находится в Azure. Тип учетной записи хранения — Standard_LRS. Утверждение постоянного тома называется mssql-data. Метаданные утверждения постоянного тома содержат заметку, которая относит его к классу хранения.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
         name: azure-disk
    provisioner: kubernetes.io/azure-disk
    parameters:
      storageaccounttype: Standard_LRS
      kind: managed
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mssql-data
      annotations:
        volume.beta.kubernetes.io/storage-class: azure-disk
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
    

    Сохраните файл (например, pvc.yaml).

  2. Создайте утверждение постоянного тома в Kubernetes.

    kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
    

    <Path to pvc.yaml file> — это расположение, в котором сохранен файл.

    Постоянный том создается автоматически как учетная запись хранения Azure и связывается с утверждением постоянного тома.

    Снимок экрана: команда утверждения постоянного тома.

  3. Проверьте утверждение постоянного тома.

    kubectl describe pvc <PersistentVolumeClaim>  -n <name of the namespace>
    

    Утверждение постоянного тома теперь называется <PersistentVolumeClaim>.

    На предыдущем шаге утверждение постоянного тома называется mssql-data. Чтобы просмотреть метаданные об утверждении постоянного тома, выполните следующую команду:

    kubectl describe pvc mssql-data  -n <namespace name>
    

    Возвращаемые метаданные содержат значение с именем Volume. Это значение сопоставляется с именем большого двоичного объекта.

    Снимок экрана: возвращенные метаданные, включая том.

  4. Проверьте постоянный том.

    kubectl describe pv -n <namespace name>
    

    kubectl возвращает метаданные постоянного тома, который создается автоматически и связывается с утверждением постоянного тома.

Создание развертывания

В этом примере контейнер, в котором размещен экземпляр SQL Azure для пограничных вычислений, описан как объект развертывания Kubernetes. При развертывании создается набор реплик. Набор реплик создает pod.

На этом шаге создайте манифест, описывающий контейнер на основе образа SQL Azure для пограничных вычислений в Docker. Манифест ссылается на утверждение постоянного тома mssql-data и секрет mssql, который вы уже применили к кластеру Kubernetes. Манифест также описывает службу. Эта служба является подсистемой балансировки нагрузки. Она гарантирует, что IP-адрес будет сохранен после восстановления экземпляра SQL Azure для пограничных вычислений.

  1. Создайте манифест (YAML-файл) для описания развертывания. В следующем примере описывается развертывание, включая контейнер, основанный на образе контейнера SQL Azure для пограничных вычислений.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sqledge-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sqledge
      template:
        metadata:
          labels:
            app: sqledge
        spec:
          volumes:
            - name: sqldata
              persistentVolumeClaim:
                claimName: mssql-data
          containers:
            - name: azuresqledge
              image: mcr.microsoft.com/azure-sql-edge:latest
              ports:
                - containerPort: 1433
              volumeMounts:
                - name: sqldata
                  mountPath: /var/opt/mssql
              env:
                - name: MSSQL_PID
                  value: "Developer"
                - name: ACCEPT_EULA
                  value: "Y"
                - name: MSSQL_SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: MSSQL_SA_PASSWORD
                - name: MSSQL_AGENT_ENABLED
                  value: "TRUE"
                - name: MSSQL_COLLATION
                  value: "SQL_Latin1_General_CP1_CI_AS"
                - name: MSSQL_LCID
                  value: "1033"
          terminationGracePeriodSeconds: 30
          securityContext:
            fsGroup: 10001
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sqledge-deployment
    spec:
      selector:
        app: sqledge
      ports:
        - protocol: TCP
          port: 1433
          targetPort: 1433
          name: sql
      type: LoadBalancer
    

    Скопируйте приведенный выше код в новый файл с именем sqldeployment.yaml. Измените следующие значения:

    • value: "Developer"MSSQL_PID. Задает контейнер для запуска выпуска Azure SQL Edge Developer. Выпуск Developer Edition не лицензирован для рабочих данных. Если развертывание предназначено для использования в рабочей среде, задайте выпуск Premium.

      Примечание.

      Дополнительные сведения см. в статье о лицензировании SQL Azure для пограничных вычислений.

    • persistentVolumeClaim: для этого значения требуется запись, которая claimName: сопоставляется с именем, используемым для утверждения постоянного тома. В этом учебнике используется mssql-data.

    • name: MSSQL_SA_PASSWORD: настраивает образ контейнера для задания пароля SA, как определено в этом разделе.

      valueFrom:
        secretKeyRef:
          name: mssql
          key: MSSQL_SA_PASSWORD
      

      Когда Kubernetes развертывает контейнер, он обращается к секрету с именем mssql, чтобы получить значение пароля.

    Примечание.

    Используя тип службы LoadBalancer, экземпляр SQL Azure для пограничных вычислений будет доступен удаленно (через Интернет) через порт 1433.

    Сохраните файл (например, sqledgedeploy.yaml).

  2. Создайте развертывание.

    kubectl apply -f <Path to sqledgedeploy.yaml file> -n <namespace name>
    

    <Path to sqldeployment.yaml file> — это расположение, в котором сохранен файл.

    Снимок экрана: команда развертывания.

    Развертывание и служба будут созданы. Экземпляр SQL Azure для пограничных вычислений находится в контейнере, подключенном к постоянному хранилищу.

    Для просмотра состояния модуля Pod введите kubectl get pod -n <namespace name>.

    Снимок экрана: команда get pod.

    На предыдущем изображении модуль имеет состояние Running. Это состояние указывает, что контейнер готов. Это может занять несколько секунд.

    Примечание.

    После создания развертывания может пройти несколько минут, прежде чем будет виден модуль. Задержка связана с тем, что кластер извлекает образ контейнера SQL Azure для пограничных вычислений из центра Docker. После первого извлечения образа последующие развертывания могут выполняться быстрее, если развертывание выполняется на узле, где уже есть кэшированный образ.

  3. Убедитесь в том, что службы запущены. Выполните следующую команду:

    kubectl get services -n <namespace name>
    

    Эта команда возвращает службы, которые выполняются, а также внутренние и внешние IP-адреса этих служб. Запишите внешний IP-адрес для службы mssql-deployment. Используйте этот IP-адрес для подключения к SQL Azure для пограничных вычислений.

    Снимок экрана: команда get service.

    Чтобы получить дополнительные сведения о состоянии объектов в кластере Kubernetes, выполните команду:

    az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
    

Подключение к экземпляру SQL Azure для пограничных вычислений

Если вы настроили контейнер согласно описанию, вы можете подключиться к приложению извне виртуальной сети Azure. Используйте учетную запись sa и внешний IP-адрес для службы. Используйте пароль, настроенный в качестве секрета Kubernetes. Дополнительные сведения о подключении к экземпляру SQL Azure для пограничных вычислений см. в статье "Подключение к пограничным серверам SQL Azure".

Проверка сбоя и восстановление

Чтобы проверить сбой и восстановление, можно удалить модуль Pod. Выполните следующие действия:

  1. Перечислите модули Pod, в которых выполняется SQL Azure для пограничных вычислений.

    kubectl get pods -n <namespace name>
    

    Запишите имя модуля, на котором выполняется SQL Azure для пограничных вычислений.

  2. Удалите модуль.

    kubectl delete pod sqledge-deployment-7df66c9999-rc9xl
    

    sqledge-deployment-7df66c9999-rc9xl — это значение, возвращенное на предыдущем шаге для имени Pod.

Kubernetes автоматически повторно создает модуль pod для восстановления экземпляра SQL Azure для пограничных вычислений и подключения к постоянному хранилищу. Используйте kubectl get pods для проверки развертывания нового Pod. Используйте kubectl get services для проверки того, что IP-адрес контейнера не изменился.

Итоги

Их этого учебника вы узнали, как развертывать контейнеры SQL Azure для пограничных вычислений в кластере Kubernetes для обеспечения высокой доступности.

  • Создание пароля SA
  • Создать хранилище
  • Создание развертывания
  • Подключение в SQL Azure для пограничных вычислений Management Studio (SSMS)
  • Проверка сбоя и восстановление