Развертывание кластера больших данных SQL Server в Azure Red Hat OpenShift (ARO) с помощью скрипта Python
Область применения: 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 с накопительным пакетом обновления 5 (CU5).
Совет
ARO — это единственный вариант размещения Kubernetes для кластера больших данных. Дополнительные сведения о других вариантах развертывания, а также о настройке параметров развертывания см. в статье "Как развернуть SQL Server Кластеры больших данных в Kubernetes".
Предупреждение
Для постоянных томов, созданных с помощью встроенных классов хранения managed-premium, применяется политика освобождения Удалить. Поэтому при удалении кластера больших данных SQL Server утверждения постоянных томов удаляются, а затем удаляются и сами тома. Вы должны создавать пользовательские классы хранения с помощью средства подготовки azure-disk с политикой освобождения Сохранить, как показано в разделе Классы хранилищ. В приведенном ниже скрипте используется класс хранения managed-premium. Дополнительные сведения см. в статье о сохраняемости данных.
Используемое здесь развертывание кластера больших данных по умолчанию состоит из главного экземпляра SQL, одного экземпляра пула вычислительных ресурсов, двух экземпляров пула данных и двух экземпляров пула носителей. Данные сохраняются с помощью постоянных томов Kubernetes, использующих классы хранения ARO по умолчанию. Конфигурация по умолчанию, применяемая в этом руководстве, подходит для сред разработки и тестирования.
Необходимые компоненты
- Подписка Azure.
- OpenShift CLI (oc)
- Минимальная версия Python — 3.0
az
CLI- Интерфейс командной строки Azure Data (
azdata
) - Azure Data Studio
Вход в учетную запись Azure
Скрипт использует Azure CLI для автоматизации создания кластера ARO. Перед выполнением скрипта необходимо по крайней мере один раз войти в учетную запись Azure с помощью Azure CLI. В командной строке выполните следующую команду:
az login
Instructions
Скачайте скрипт Python
deploy-sql-big-data-aro.py
и файл YAMLbdc-scc.yaml
.Эти файлы приводятся в данной статье в следующих разделах:
Запустите скрипт с помощью следующей команды:
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 будет пространством имен 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