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


Использование скрипта Python для развертывания кластера больших данных SQL Server в Azure Red Hat OpenShift (ARO)

Область применения: SQL Server 2019 (15.x)

Это важно

Надстройка "Кластеры больших данных Microsoft SQL Server 2019" будет прекращена. Поддержка кластеров больших данных SQL Server 2019 завершится 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на этой платформе, а программное обеспечение будет продолжать поддерживаться с помощью накопительных обновлений для SQL Server до этого времени. Для получения дополнительной информации см. запись блога об объявлении и параметры работы с большими данными на платформе Microsoft SQL Server.

В этом руководстве вы используете пример скрипта развертывания Python для развертывания кластеров больших данных SQL Server 2019 в Azure Red Hat OpenShift (ARO). Этот вариант развертывания поддерживается начиная с SQL Server 2019 CU5.

Подсказка

ARO — это только один вариант размещения Kubernetes для кластера больших данных. Дополнительные сведения о других вариантах развертывания, а также о настройке параметров развертывания см. в статье "Как развернуть кластеры больших данных SQL Server в Kubernetes".

Предупреждение

Постоянные тома, созданные с помощью встроенного класса хранилища managed-premium, имеют политику восстановления Delete. При удалении кластера больших данных SQL Server запросы на постоянные тома, так же как и сами постоянные тома, также удаляются. Необходимо создать пользовательские классы хранилища с помощью средства подготовки дисков Azure с политикой восстановления хранения, как описано в разделе "Основные понятия". Приведенный ниже сценарий использует класс хранилища managed-Premium . Дополнительные сведения см. в разделе о сохраняемости данных .

Развертывание кластера больших данных по умолчанию, используемое здесь, состоит из экземпляра SQL Master, одного экземпляра пула вычислений, двух экземпляров пула данных и двух экземпляров пула носителей. Данные сохраняются с помощью постоянных томов Kubernetes, использующих классы хранения по умолчанию ARO. Конфигурация по умолчанию, используемая в этом руководстве, подходит для сред разработки и тестирования.

Предпосылки

Вход в учетную запись Azure

Скрипт использует Azure CLI для автоматизации создания кластера ARO. Перед выполнением скрипта необходимо войти в учетную запись Azure с помощью Azure CLI по крайней мере один раз. Выполните следующую команду из командной строки.

az login

Инструкции

  1. Скачайте скрипт deploy-sql-big-data-aro.py Python и файл yaml bdc-scc.yaml.

    Эти файлы находятся в этой статье в следующих разделах:

  2. Запустите скрипт с помощью:

python deploy-sql-big-data-aro.py

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

  • azure_region
  • vm_size для рабочих узлов OpenShift. Для оптимальной работы при проверке основных сценариев рекомендуется по крайней мере 8 виртуальных ЦП и 64 ГБ памяти на всех рабочих узлах кластера. Сценарий использует Standard_D8s_v3 и три рабочих узла по умолчанию. Конфигурация размера по умолчанию для кластеров больших данных также использует около 24 дисков для запросов на постоянный том во всех компонентах.
  • Конфигурация сети для развертывания кластера OpenShift. Дополнительные сведения о каждом параметре см. в статье по развертыванию ARO .
  • cluster_name — это значение используется как для кластера ARO, так и для кластера больших данных SQL Server, созданного на основе ARO. Имя SQL Big Data Cluster будет именем пространства в Kubernetes.
  • username — это имя пользователя для учетных записей, подготовленных во время развертывания для учетной записи администратора контроллера, учетной записи главного экземпляра SQL Server и шлюза. sa Учетная запись SQL Server автоматически отключается для вас, как рекомендуется.
  • password — одно и то же значение будет использоваться для всех учетных записей.

Кластер больших данных SQL Server теперь развернут в ARO. Теперь azure Data Studio можно использовать для подключения к кластеру. Дополнительные сведения см. в статье "Подключение к кластеру больших данных SQL Server с помощью Azure Data Studio".

Очистка

При тестировании кластеров больших данных SQL Server в Azure следует удалить кластер ARO, чтобы избежать непредвиденных расходов. Не удаляйте кластер, если планируется продолжить его использование.

Предупреждение

Следующие шаги удаляют кластер ARO, который также удаляет кластер больших данных SQL Server. Если у вас есть базы данных или данные HDFS, которые вы хотите сохранить, создайте резервную копию данных перед удалением кластера.

Выполните следующую команду Azure CLI, чтобы удалить кластер больших данных и службу ARO в Azure (замените <resource group name>группу ресурсов Azure , указанную в скрипте развертывания):

az group delete -n <resource group name>

deploy-SQL-big-data-aro.py

Сценарий в этом разделе развертывает кластер больших данных SQL Server в Azure Red Hat OpenShift. Скопируйте скрипт на рабочую станцию и сохраните его под именем deploy-sql-big-data-aro.py перед началом развертывания.

#
# Prerequisites: 
# 
# Azure CLI, Azure Data CLI (`azdata`), OpenShift CLI (oc)  
#
# Run `az login` at least once BEFORE running this script
#

from subprocess import check_output, CalledProcessError, STDOUT, Popen, PIPE, getoutput
from time import sleep
import os
import getpass
import json

def executeCmd (cmd):
    if os.name=="nt":
        process = Popen(cmd.split(),stdin=PIPE, shell=True)
    else:
        process = Popen(cmd.split(),stdin=PIPE)
    stdout, stderr = process.communicate()
    if (stderr is not None):
        raise Exception(stderr)

#
# MUST INPUT THESE VALUES!!!!!
#
SUBSCRIPTION_ID = input("Provide your Azure subscription ID:").strip()
GROUP_NAME = input("Provide Azure resource group name to be created:").strip()
#
# This password will be use for Controller user, Gateway user and SQL Server Master SA accounts
AZDATA_USERNAME=input("Provide username to be used for Controller, SQL Server and Gateway endpoints - Press ENTER for using  `admin`:").strip() or "admin"
AZDATA_PASSWORD = getpass.getpass("Provide password to be used for Controller user, Gateway user and SQL Server Master accounts:")
#
# Optionally change these configuration settings
#
AZURE_REGION=input("Provide Azure region - Press ENTER for using `westus2`:").strip() or "westus2"
# MASTER_VM_SIZE=input("Provide VM size for master nodes for the ARO cluster - Press ENTER for using  `Standard_D2s_v3`:").strip() or "Standard_D2s_v3"
WORKER_VM_SIZE=input("Provide VM size for the worker nodes for the ARO cluster - Press ENTER for using  `Standard_D8s_v3`:").strip() or "Standard_D8s_v3"
OC_NODE_COUNT=input("Provide number of worker nodes for ARO cluster - Press ENTER for using  `3`:").strip() or "3"
VNET_NAME=input("Provide name of Virtual Network for ARO cluster - Press ENTER for using  `aro-vnet`:").strip() or "aro-vnet"
VNET_ADDRESS_SPACE=input("Provide Virtual Network Address Space for ARO cluster - Press ENTER for using  `10.0.0.0/16`:").strip() or "10.0.0.0/16"
MASTER_SUBNET_NAME=input("Provide Master Subnet Name for ARO cluster - Press ENTER for using  `master-subnet`:").strip() or "master-subnet"
MASTER_SUBNET_IP_RANGE=input("Provide address range of Master Subnet for ARO cluster - Press ENTER for using  `10.0.0.0/23`:").strip() or "10.0.0.0/23"
WORKER_SUBNET_NAME=input("Provide Worker Subnet Name for ARO cluster - Press ENTER for using  `worker-subnet`:").strip() or "worker-subnet"
WORKER_SUBNET_IP_RANGE=input("Provide address range of Worker Subnet for ARO cluster - Press ENTER for using  `10.0.2.0/23`:").strip() or "10.0.2.0/23"
#
# This is both Kubernetes cluster name and SQL Big Data cluster name
CLUSTER_NAME=input("Provide name of OpenShift cluster and SQL big data cluster - Press ENTER for using  `sqlbigdata`:").strip() or "sqlbigdata"
#
# Deploy the ARO cluster
#  
print ("Set azure context to subscription: "+SUBSCRIPTION_ID)
command = "az account set -s "+ SUBSCRIPTION_ID
executeCmd (command)
print ("Creating azure resource group: "+GROUP_NAME)
command="az group create --name "+GROUP_NAME+" --location "+AZURE_REGION
executeCmd (command)
command = "az network vnet create --resource-group "+GROUP_NAME+" --name "+VNET_NAME+" --address-prefixes "+VNET_ADDRESS_SPACE
print("Creating Virtual Network: "+VNET_NAME)
executeCmd(command)
command = "az network vnet subnet create --resource-group "+GROUP_NAME+" --vnet-name "+VNET_NAME+" --name "+MASTER_SUBNET_NAME+" --address-prefixes "+MASTER_SUBNET_IP_RANGE+" --service-endpoints Microsoft.ContainerRegistry"
print("Creating Master Subnet: "+MASTER_SUBNET_NAME)
executeCmd(command)
command = "az network vnet subnet create --resource-group "+GROUP_NAME+" --vnet-name "+VNET_NAME+" --name "+WORKER_SUBNET_NAME+" --address-prefixes "+WORKER_SUBNET_IP_RANGE+" --service-endpoints Microsoft.ContainerRegistry"
print("Creating Worker Subnet: "+WORKER_SUBNET_NAME)
executeCmd(command)
command = "az network vnet subnet update --name "+MASTER_SUBNET_NAME+" --resource-group "+GROUP_NAME+" --vnet-name "+VNET_NAME+" --disable-private-link-service-network-policies true"
print("Updating Master Subnet by disabling Private Link Policies")
executeCmd(command)
command = "az aro create --resource-group "+GROUP_NAME+" --name "+CLUSTER_NAME+" --vnet "+VNET_NAME+" --master-subnet "+MASTER_SUBNET_NAME+" --worker-subnet "+WORKER_SUBNET_NAME+" --worker-count "+OC_NODE_COUNT+" --worker-vm-size "+WORKER_VM_SIZE +" --only-show-errors"
print("Creating OpenShift cluster: "+CLUSTER_NAME)
executeCmd (command)
#
# Login to oc console
#
command = "az aro list-credentials --name "+CLUSTER_NAME+" --resource-group "+GROUP_NAME +" --only-show-errors"
output=json.loads(getoutput(command))
OC_CLUSTER_USERNAME = str(output['kubeadminUsername'])
OC_CLUSTER_PASSWORD = str(output['kubeadminPassword'])
command = "az aro show --name "+CLUSTER_NAME+" --resource-group "+GROUP_NAME +" --only-show-errors"
output=json.loads(getoutput(command))
APISERVER = str(output['apiserverProfile']['url'])
command = "oc login "+ APISERVER+ " -u " + OC_CLUSTER_USERNAME + " -p "+ OC_CLUSTER_PASSWORD
executeCmd (command)
#
# Setup pre-requisites for deploying BDC on OpenShift
#
#
#Creating new project/namespace
command = "oc new-project "+ CLUSTER_NAME
executeCmd (command)
#
# create custom SCC for BDC
command = "oc apply -f bdc-scc.yaml"
executeCmd (command)
#
#Bind the custom scc with service accounts in the BDC namespace
command = "oc create clusterrole bdc-role --verb=use --resource=scc --resource-name=bdc-scc -n " + CLUSTER_NAME
executeCmd (command)
command = "oc create rolebinding bdc-rbac --clusterrole=bdc-role --group=system:serviceaccounts:" + CLUSTER_NAME
executeCmd (command)
#
# Deploy big data cluster
#
print ('Set environment variables for credentials')
os.environ['AZDATA_PASSWORD'] = AZDATA_PASSWORD
os.environ['AZDATA_USERNAME'] = AZDATA_USERNAME
os.environ['ACCEPT_EULA']="Yes"
#
#Creating azdata configuration with aro-dev-test profile
command = "azdata bdc config init --source aro-dev-test --target custom --force"
executeCmd (command)
command="azdata bdc config replace -c custom/bdc.json -j ""metadata.name=" + CLUSTER_NAME + ""
executeCmd (command)
#
# Create BDC
command = "azdata bdc create --config-profile custom --accept-eula yes"
executeCmd(command)
#login into big data cluster and list endpoints
command="azdata login -n " + CLUSTER_NAME
executeCmd (command)
print("")
print("SQL Server big data cluster endpoints: ")
command="azdata bdc endpoint list -o table"
executeCmd(command)

bdc-scc.yaml

Следующий манифест YAML определяет пользовательское ограничение контекста безопасности (SCC) для развертывания кластера больших данных. Скопируйте его в тот же каталог, что и deploy-sql-big-data-aro.py.

allowHostDirVolumePlugin: false
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
  - SETUID
  - SETGID
  - CHOWN
  - SYS_PTRACE
apiVersion: security.openshift.io/v1
defaultAddCapabilities: null
fsGroup:
  type: RunAsAny
kind: SecurityContextConstraints
metadata:
  annotations:
    kubernetes.io/description: SQL Server BDC custom scc is based on 'nonroot' scc plus additional capabilities required by BDC.
  generation: 2
  name: bdc-scc
readOnlyRootFilesystem: false
requiredDropCapabilities:
  - KILL
  - MKNOD
runAsUser:
  type: MustRunAsNonRoot
seLinuxContext:
  type: MustRunAs
supplementalGroups:
  type: RunAsAny
volumes:
  - configMap
  - downwardAPI
  - emptyDir
  - persistentVolumeClaim
  - projected
  - secret