Развертывание контейнера 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 для пограничных вычислений в контейнере оркестратор загружает другой экземпляр контейнера, который подключается к тому же постоянному хранилищу.
На предыдущей схеме azure-sql-edge
— это контейнер внутри модуля Pod. Kubernetes управляет ресурсами в кластере. Применение набора реплик гарантирует автоматическое восстановление pod в случае отказа узла. Приложения подключаются к службе. В этом случае служба представляет подсистему балансировки нагрузки, которая содержит IP-адрес, остающийся неизменным в случае отказа azure-sql-edge
.
На следующей схеме в контейнере azure-sql-edge
происходит сбой. Как оркестратор Kubernetes гарантирует правильное количество работоспособных экземпляров в наборе реплик и запускает новый контейнер в соответствии с конфигурацией. Оркестратор запускает новый модуль Pod на том же узле, и azure-sql-edge
повторно подключается к тому же постоянному хранилищу. Служба подключается к повторно созданному azure-sql-edge
.
На следующей схеме сбой затронул узел, на котором размещен контейнер azure-sql-edge
. Оркестратор запускает новый модуль Pod на другом узле, и azure-sql-edge
повторно подключается к тому же постоянному хранилищу. Служба подключается к повторно созданному azure-sql-edge
.
Необходимые компоненты
Кластер 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. Выполните следующие действия:
Создайте манифест, чтобы определить класс хранения и утверждение постоянного тома. В манифесте описана подготовка хранилища, параметры и политика обработки заявок на хранение. Кластер 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).
Создайте утверждение постоянного тома в Kubernetes.
kubectl apply -f <Path to pvc.yaml file> -n <namespace name>
<Path to pvc.yaml file>
— это расположение, в котором сохранен файл.Постоянный том создается автоматически как учетная запись хранения Azure и связывается с утверждением постоянного тома.
Проверьте утверждение постоянного тома.
kubectl describe pvc <PersistentVolumeClaim> -n <name of the namespace>
Утверждение постоянного тома теперь называется
<PersistentVolumeClaim>
.На предыдущем шаге утверждение постоянного тома называется
mssql-data
. Чтобы просмотреть метаданные об утверждении постоянного тома, выполните следующую команду:kubectl describe pvc mssql-data -n <namespace name>
Возвращаемые метаданные содержат значение с именем
Volume
. Это значение сопоставляется с именем большого двоичного объекта.Проверьте постоянный том.
kubectl describe pv -n <namespace name>
kubectl
возвращает метаданные постоянного тома, который создается автоматически и связывается с утверждением постоянного тома.
Создание развертывания
В этом примере контейнер, в котором размещен экземпляр SQL Azure для пограничных вычислений, описан как объект развертывания Kubernetes. При развертывании создается набор реплик. Набор реплик создает pod.
На этом шаге создайте манифест, описывающий контейнер на основе образа SQL Azure для пограничных вычислений в Docker. Манифест ссылается на утверждение постоянного тома mssql-data
и секрет mssql
, который вы уже применили к кластеру Kubernetes. Манифест также описывает службу. Эта служба является подсистемой балансировки нагрузки. Она гарантирует, что IP-адрес будет сохранен после восстановления экземпляра SQL Azure для пограничных вычислений.
Создайте манифест (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
).Создайте развертывание.
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>
.На предыдущем изображении модуль имеет состояние
Running
. Это состояние указывает, что контейнер готов. Это может занять несколько секунд.Примечание.
После создания развертывания может пройти несколько минут, прежде чем будет виден модуль. Задержка связана с тем, что кластер извлекает образ контейнера SQL Azure для пограничных вычислений из центра Docker. После первого извлечения образа последующие развертывания могут выполняться быстрее, если развертывание выполняется на узле, где уже есть кэшированный образ.
Убедитесь в том, что службы запущены. Выполните следующую команду:
kubectl get services -n <namespace name>
Эта команда возвращает службы, которые выполняются, а также внутренние и внешние IP-адреса этих служб. Запишите внешний IP-адрес для службы
mssql-deployment
. Используйте этот IP-адрес для подключения к SQL Azure для пограничных вычислений.Чтобы получить дополнительные сведения о состоянии объектов в кластере Kubernetes, выполните команду:
az aks browse --resource-group <MyResourceGroup> --name <MyKubernetesClustername>
Подключение к экземпляру SQL Azure для пограничных вычислений
Если вы настроили контейнер согласно описанию, вы можете подключиться к приложению извне виртуальной сети Azure. Используйте учетную запись sa
и внешний IP-адрес для службы. Используйте пароль, настроенный в качестве секрета Kubernetes. Дополнительные сведения о подключении к экземпляру SQL Azure для пограничных вычислений см. в статье "Подключение к пограничным серверам SQL Azure".
Проверка сбоя и восстановление
Чтобы проверить сбой и восстановление, можно удалить модуль Pod. Выполните следующие действия:
Перечислите модули Pod, в которых выполняется SQL Azure для пограничных вычислений.
kubectl get pods -n <namespace name>
Запишите имя модуля, на котором выполняется SQL Azure для пограничных вычислений.
Удалите модуль.
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)
- Проверка сбоя и восстановление
Связанный контент
- Введение в Kubernetes
- Машинное обучение и искусственный интеллект с использованием ONNX в SQL для пограничных вычислений
- Создание комплексного решения для Интернета вещей с использованием SQL для пограничных вычислений на основе IoT Edge.
- Потоковая передача данных в SQL Azure для пограничных вычислений