如何在 Kubernetes 上部署 SQL Server 大数据群集

适用范围:SQL Server 2019 (15.x)

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章Microsoft SQL Server 平台上的大数据选项

SQL Server 大数据群集在 Kubernetes 群集上部署为 docker 容器。 下面概述了设置和配置步骤:

  • 在 Azure Kubernetes 服务 (AKS)、Red Hat OpenShift 或 Azure Red Hat OpenShift (ARO) 中的单个 VM、VM 群集上设置 Kubernetes 群集。
  • 在自己的客户端计算机上安装群集配置工具 Azure Data CLI (azdata)。
  • 在 Kubernetes 群集中部署 SQL Server 大数据群集。

已测试的配置

有关经过验证可用于部署 SQL Server 大数据群集的各种 Kubernetes 平台的完整列表,请参阅已测试的配置

SQL Server 版本

版本 说明
Enterprise
Standard
开发人员
大数据群集版本由 SQL Server 主实例的版本确定。 在部署时会默认部署开发人员版。 可在部署后更改版本。 请参阅配置 SQL Server 主实例

Kubernetes

Kubernetes 群集设置

如果已拥有满足上述必备条件的 Kubernetes 群集,则可以直接跳至部署步骤。 本节假定你对 Kubernetes 概念有基本的了解。 有关 Kubernetes 的详细信息,请参阅 Kubernetes 文档

可以选择通过以下方式部署 Kubernetes:

部署 Kubernetes 的位置: 说明 链接
Azure Kubernetes 服务 (AKS) Azure 中的托管 Kubernetes 容器服务。 说明
一台或多台计算机 (kubeadm) 在使用 kubeadm 的物理计算机或虚拟机上部署的 Kubernetes 群集 说明
Azure Red Hat OpenShift 在 Azure 中运行的 OpenShift 托管产品/服务。 说明
Red Hat OpenShift 混合云企业 Kubernetes 应用程序平台。 说明

提示

还可以将 AKS 和大数据群集的部署脚本编写成一个步骤。 有关详细信息,请参阅 python 脚本或 Azure Data Studio 笔记本,了解如何实现此操作。

验证 Kubernetes 配置

运行 kubectl 命令以查看群集配置。 确保 kubectl 指向正确的群集上下文。

kubectl config view

重要

如果要在使用 kubeadm 启动的多节点 Kuberntes 群集上进行部署,在启动大数据群集部署之前,请确保部署所针对的所有 Kubernetes 节点上的时钟同步。 大数据群集具有各种时间敏感型服务的内置运行状况属性,并且时钟偏差可能导致不正确的状态。

配置 Kubernetes 群集后,可以继续部署新的 SQL Server 大数据群集。 如果要从以前的版本升级,请参阅如何升级 SQL Server 大数据群集

确保已配置存储

大多数大数据群集部署应具有永久存储。 此时,需要在部署之前制定计划,确定如何在 Kubernetes 群集上提供永久性存储。

  • 如果在 AKS 中进行部署,则无需进行任何存储设置。 AKS 通过动态预配提供内置的存储类。 可以在部署配置文件中自定义存储类(defaultmanaged-premium)。 内置配置文件使用 default 存储类。
  • 如果要在使用 kubeadm 部署的 Kubernetes 群集上进行部署,则需要确保有足够的存储来存储所需规模的群集,并对其进行配置以供使用。 如果想要自定义存储的使用方式,应该在继续操作之前执行此操作。 请参阅 Kubernetes 上的 SQL Server 大数据群集的数据暂留

安装 SQL Server 2019 大数据工具

请先安装大数据工具,然后再部署 SQL Server 2019 大数据群集:

部署概述

大多数大数据群集设置都在 JSON 部署配置文件中定义。 在设置期间可以为使用 kubeadm 创建的 AKS 和 Kubernetes 群集使用默认部署配置文件,也可以自定义自己的部署配置文件。 出于安全原因,身份验证设置通过环境变量传递。

以下部分详细介绍了如何配置大数据群集部署并提供了常见自定义示例。 此外,你始终可以使用 VS Code 等编辑器编辑自定义部署配置文件。

默认配置

JSON 配置文件中定义了大数据群集部署选项。 可以从 Azure Data CLI (azdata) 中提供的内置部署配置文件开始自定义群集部署。

注意

大数据群集部署所需的容器映像在 mssql/bdc 存储库中的 Microsoft 容器注册表 (mcr.microsoft.com) 上托管。 默认情况下,这些设置已包含在 Azure 数据 CLI (azdata) 随附的每个部署配置文件的 control.json 配置文件中。 此外,每个版本的容器映像标记也在相同的配置文件中进行预填充。 如果需要将容器映像提取到自己的专用容器注册表中,或修改容器注册表/存储库设置,请按照脱机安装一文中的说明进行操作

运行此命令以查找可用模板:

azdata bdc config list -o table 

从 SQL Server 2019 CU5 开始,以下模板可用:

部署配置文件 Kubernetes 环境
aks-dev-test 在 Azure Kubernetes 服务 (AKS) 上部署 SQL Server 大数据群集
aks-dev-test-ha 在 Azure Kubernetes 服务 (AKS) 上部署 SQL Server 大数据群集。 配置任务关键型服务(如 SQL Server 主实例和 HDFS 名称节点)以实现高可用性。
aro-dev-test 在 Azure Red Hat OpenShift 上部署 SQL Server 大数据群集,以进行开发和测试。

在 SQL Server 2019 CU5 中引入。
aro-dev-test-ha 在 Red Hat OpenShift 群集上部署具有高可用性的 SQL Server 大数据群集,以进行开发和测试。

在 SQL Server 2019 CU5 中引入。
kubeadm-dev-test 使用单个或多个物理计算机或虚拟机在使用 kubeadm 创建的 Kubernetes 群集上部署 SQL Server 大数据群集。
kubeadm-prod 使用单个或多个物理计算机或虚拟机在使用 kubeadm 创建的 Kubernetes 群集上部署 SQL Server 大数据群集。 使用此模板使大数据群集服务与 Active Directory 集成。 任务关键型服务(如 SQL Server 主实例和 HDFS 名称节点)通过高可用配置部署。
openshift-dev-test 在 Red Hat OpenShift 群集上部署 SQL Server 大数据群集,以进行开发和测试。

在 SQL Server 2019 CU5 中引入。
openshift-prod 在 Red Hat OpenShift 群集上部署具有高可用性的 SQL Server 大数据群集。

在 SQL Server 2019 CU5 中引入。

可以通过运行 azdata bdc create 部署大数据群集。 此操作会提示你选择其中某个默认配置,然后指导你完成部署。

第一次运行 Azure Data CLI (azdata) 时,必须包含 --accept-eula=yes 才能接受最终用户许可协议 (EULA)。

azdata bdc create --accept-eula=yes

在这种情况下,系统会提示你输入不属于默认配置(如密码)的任何设置。

重要

大数据群集的默认名称为 mssql-cluster。 要运行任何使用 -n 参数指定 Kubernetes 命名空间的 kubectl 命令,必须了解这一点。

自定义配置

还可以自定义部署以适应计划运行的工作负载。 不能在部署后更改大数据群集服务的规模(副本数)或存储设置,因此,必须仔细规划部署配置以避免容量问题。 要自定义部署,请按以下步骤操作:

  1. 首先从与 Kubernetes 环境匹配的标准部署配置文件开始。 可以使用 azdata bdc config list 命令来列出它们:

    azdata bdc config list
    
  2. 要自定义部署,请使用 azdata bdc config init 命令创建部署配置文件的副本。 例如,下列命令在名为 custom 的目标目录中创建 aks-dev-test 部署配置文件的副本:

    azdata bdc config init --source aks-dev-test --target custom
    

    提示

    --target 根据 --source 参数指定包含配置文件、bdc.jsoncontrol.json 的目录。

  3. 若要自定义部署配置文件中的设置,可以在适用于编辑 VS Code 等 JSON 文件的工具中编辑部署配置文件。 对于脚本式自动化,也可以使用 azdata bdc config 命令编辑自定义部署配置文件。 例如,以下命令更改自定义部署配置文件,将部署群集的名称从默认 (mssql-cluster) 更改为 test-cluster

    azdata bdc config replace --config-file custom/bdc.json --json-values "metadata.name=test-cluster"
    

    提示

    也可以通过在 azdata create bdc 命令中使用 --name 参数,在部署时传入群集名称。 命令中的参数优先于配置文件中的值。

    用于查找 JSON 路径的实用工具是 JSONPath Online Evaluator

    除了传递键值对之外,还可以提供内联 JSON 值或传递 JSON 补丁文件。 有关详细信息,请参阅配置大数据群集资源和服务的部署设置

  4. 将自定义配置文件传递给 azdata bdc create。 请注意,必须设置所需的环境变量,否则终端将提示输入相应值:

    azdata bdc create --config-profile custom --accept-eula yes
    

警告

需要在部署配置文件 control.json 文件中将参数 imagePullPolicy 设置为 "Always"

有关部署配置文件结构的详细信息,请参阅部署配置文件参考。 有关更多配置示例,请参阅配置大数据群集的部署设置

环境变量

以下环境变量用于未存储在部署配置文件中的安全设置。 请注意,可以在配置文件中设置除凭据之外的 Docker 设置。

环境变量 要求 说明
AZDATA_USERNAME 必需 SQL Server 大数据群集管理员的用户名。 具有相同名称的 sysadmin 登录名在 SQL Server 主实例中创建。 最佳安全做法是禁用 sa 帐户。

从 SQL Server 2019 (15.x) CU 5 开始,当使用基本身份验证部署新群集时,所有终结点(包括网关)都使用 AZDATA_USERNAMEAZDATA_PASSWORD。 升级到 CU 5 的群集上的终结点继续使用 root 作为用户名连接到网关终结点。 此更改不适用于使用 Active Directory 身份验证的部署。 请参阅发行说明中的通过网关终结点访问服务所用的凭据
AZDATA_PASSWORD 必选 上面创建的用户帐户的密码。 在 SQL Server 2019 CU5 之前部署的群集上,root 用户使用相同的密码来保护 Knox 网关和 HDFS。
ACCEPT_EULA 首次使用 Azure Data CLI (azdata) 时为必需项 设置为“是”。 设置为环境变量时,它将 EULA 同时应用于 SQL Server 和 Azure Data CLI (azdata)。 如果未设置为环境变量,则可以在第一次使用 Azure Data CLI (azdata) 命令时将 --accept-eula=yes 包含在内。
DOCKER_USERNAME 可选 当容器映像存储在专用存储库中时,用于访问容器映像的用户名。 有关如何使用专用 Docker 存储库部署大数据群集的更多详细信息,请参阅脱机部署主题。
DOCKER_PASSWORD 可选 用于访问上述专用存储库的密码。

必须先设置这些环境变量,才能调用 azdata bdc create。 如果未设置任何变量,则系统会提示输入变量。

以下示例介绍如何设置适用于 Linux (bash) 和 Windows (PowerShell) 的环境变量:

export AZDATA_USERNAME=admin
export AZDATA_PASSWORD=<password>
export ACCEPT_EULA=yes
SET AZDATA_USERNAME=admin
SET AZDATA_PASSWORD=<password>

注意

在 SQL Server 2019 CU5 之前部署的群集上,必须以 root 用户身份使用上述密码来保护 Knox 网关。 root 是在此基本身份验证(用户名/密码)中唯一受支持的用户。

从 SQL Server 2019 (15.x) CU 5 开始,当使用基本身份验证部署新群集时,所有终结点(包括网关)都使用 AZDATA_USERNAMEAZDATA_PASSWORD。 升级到 CU 5 的群集上的终结点继续使用 root 作为用户名连接到网关终结点。 此更改不适用于使用 Active Directory 身份验证的部署。 请参阅发行说明中的通过网关终结点访问服务所用的凭据

若要通过基本身份验证连接到 SQL Server,请使用与 AZDATA_USERNAME 和 AZDATA_PASSWORD 环境变量相同的值。

设置环境变量后,必须运行 azdata bdc create 才能触发部署。 本示例使用上面创建的群集配置文件:

azdata bdc create --config-profile custom --accept-eula yes

请注意以下原则:

  • 如果密码中含有任何特殊字符,请确保使用双引号将密码括起来。 可以将 AZDATA_PASSWORD 设置为自己喜欢的任意形式,但请确保密码足够复杂,且请勿使用 !&' 字符。 请注意,双引号分隔符仅适用于 bash 命令。
  • AZDATA_USERNAME 登录名是安装过程中在 SQL Server 主实例上创建的系统管理员。 创建 SQL Server 容器后,通过在容器中运行 echo $AZDATA_PASSWORD,可发现指定的 AZDATA_PASSWORD 环境变量。 出于安全目的,最好更改密码。

无人参与安装

对于无人参与的部署,必须设置所有所需的环境变量,使用配置文件,并使用 --accept-eula yes 参数调用 azdata bdc create 命令。 上述部分中的示例介绍了无人参与安装的语法。

监视部署

在群集启动过程中,客户端命令窗口返回部署状态。 在部署过程中,应该看到一系列消息正在等待控制器 Pod:

Waiting for cluster controller to start.

15 到 30 分钟后,你应该会收到控制器 Pod 正在运行的消息:

Cluster controller endpoint is available at 11.111.111.11:30080.
Cluster control plane is ready.

重要

由于下载大数据群集组件的容器映像需要一定的时间,整个部署可能需要很长时间。 但是,这个过程应不会长达几个小时。 有关部署问题,请参阅监视 SQL Server 大数据群集并对其进行故障排除

部署完成后,输出会通知你成功:

Cluster deployed successfully.

提示

除非通过自定义配置进行修改,否则部署的大数据群集的默认名称为 mssql-cluster

检索终结点

部署脚本成功完成后,可以使用以下步骤获取大数据群集的外部终结点的地址。

  1. 部署完成后,可以从部署标准输出中查找控制器终结点的 IP 地址,也可以通过查看以下 kubectl 命令的 EXTERNAL-IP 输出来查找:

    kubectl get svc controller-svc-external -n <your-big-data-cluster-name>
    

    提示

    如果在部署过程中未更改默认名称,请在上一个命令中使用 -n mssql-clustermssql-cluster 是大数据群集的默认名称。

  2. 使用 azdata login 登录大数据群集。 将 --endpoint 参数设置为控制器终结点的外部 IP 地址。

    azdata login --endpoint https://<ip-address-of-controller-svc-external>:30080 --username <user-name>
    

    指定在部署过程中为大数据群集管理员配置的用户名和密码(AZDATA_USERNAME 和 AZDATA_PASSWORD)。

    提示

    如果你是 Kubernetes 群集管理员并且有权访问群集配置文件(kube 配置文件),则可以将当前上下文配置为指向目标 Kubernetes 群集。 在这种情况下,可以使用 azdata login -n <namespaceName> 登录,其中 namespace 是大数据群集名称。 如果登录命令中未指定凭据,则系统会提示输入凭据。

  3. 运行 azdata bdc endpoint list 以获取一个列表,其中包含每个终结点的描述及其对应的 IP 地址和端口值。

    azdata bdc endpoint list -o table
    

    以下列表显示了此命令的示例输出:

    Description                                             Endpoint                                                   Ip              Name               Port    Protocol
    ------------------------------------------------------  ---------------------------------------------------------  --------------  -----------------  ------  ----------
    Gateway to access HDFS files, Spark                     https://11.111.111.111:30443                               11.111.111.111  gateway            30443   https
    Spark Jobs Management and Monitoring Dashboard          https://11.111.111.111:30443/gateway/default/sparkhistory  11.111.111.111  spark-history      30443   https
    Spark Diagnostics and Monitoring Dashboard              https://11.111.111.111:30443/gateway/default/yarn          11.111.111.111  yarn-ui            30443   https
    Application Proxy                                       https://11.111.111.111:30778                               11.111.111.111  app-proxy          30778   https
    Management Proxy                                        https://11.111.111.111:30777                               11.111.111.111  mgmtproxy          30777   https
    Log Search Dashboard                                    https://11.111.111.111:30777/kibana                        11.111.111.111  logsui             30777   https
    Metrics Dashboard                                       https://11.111.111.111:30777/grafana                       11.111.111.111  metricsui          30777   https
    Cluster Management Service                              https://11.111.111.111:30080                               11.111.111.111  controller         30080   https
    SQL Server Master Instance Front-End                    11.111.111.111,31433                                       11.111.111.111  sql-server-master  31433   tcp
    HDFS File System Proxy                                  https://11.111.111.111:30443/gateway/default/webhdfs/v1    11.111.111.111  webhdfs            30443   https
    Proxy for running Spark statements, jobs, applications  https://11.111.111.111:30443/gateway/default/livy/v1       11.111.111.111  livy               30443   https
    

也可以通过运行以下 kubectl 命令获取为群集部署的所有服务终结点:

kubectl get svc -n <your-big-data-cluster-name>

验证群集状态

部署完成后,可以通过 azdata bdc status show 命令检查群集的状态。

azdata bdc status show

提示

要运行状态命令,必须先用前面的终结点部分中所示的 azdata login 命令登录。

以下显示了此命令的示例输出:

Bdc: ready                                                                                                                                                                                                          Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Services: ready                                                                                                                                                                                                     Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Servicename    State    Healthstatus    Details

 sql            ready    healthy         -
 hdfs           ready    healthy         -
 spark          ready    healthy         -
 control        ready    healthy         -
 gateway        ready    healthy         -
 app            ready    healthy         -


 Sql Services: ready                                                                                                                                                                                                 Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 master          ready    healthy         StatefulSet master is healthy
 compute-0       ready    healthy         StatefulSet compute-0 is healthy
 data-0          ready    healthy         StatefulSet data-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy


 Hdfs Services: ready                                                                                                                                                                                                Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 nmnode-0        ready    healthy         StatefulSet nmnode-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy
 sparkhead       ready    healthy         StatefulSet sparkhead is healthy


 Spark Services: ready                                                                                                                                                                                               Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 sparkhead       ready    healthy         StatefulSet sparkhead is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy


 Control Services: ready                                                                                                                                                                                             Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 controldb       ready    healthy         -
 control         ready    healthy         -
 metricsdc       ready    healthy         DaemonSet metricsdc is healthy
 metricsui       ready    healthy         ReplicaSet metricsui is healthy
 metricsdb       ready    healthy         StatefulSet metricsdb is healthy
 logsui          ready    healthy         ReplicaSet logsui is healthy
 logsdb          ready    healthy         StatefulSet logsdb is healthy
 mgmtproxy       ready    healthy         ReplicaSet mgmtproxy is healthy


 Gateway Services: ready                                                                                                                                                                                             Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 gateway         ready    healthy         StatefulSet gateway is healthy


 App Services: ready                                                                                                                                                                                                 Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 appproxy        ready    healthy         ReplicaSet appproxy is healthy

还可以使用以下命令获取更详细的状态:

azdata bdc control status show

示例输出:

Control: ready                                                                                                                                                                                                      Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Resources: ready                                                                                                                                                                                                    Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 controldb       ready    healthy         -
 control         ready    healthy         -
 metricsdc       ready    healthy         DaemonSet metricsdc is healthy
 metricsui       ready    healthy         ReplicaSet metricsui is healthy
 metricsdb       ready    healthy         StatefulSet metricsdb is healthy
 logsui          ready    healthy         ReplicaSet logsui is healthy
 logsdb          ready    healthy         StatefulSet logsdb is healthy
 mgmtproxy       ready    healthy         ReplicaSet mgmtproxy is healthy
  • azdata bdc sql status show 返回具有 SQL Server 服务的所有资源的运行状况状态
azdata bdc sql status show

示例输出:

Sql: ready                                                                                                                                                                                                          Health Status:  healthy
 ===========================================================================================================================================================================================================================================
 Resources: ready                                                                                                                                                                                                    Health Status:  healthy
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Resourcename    State    Healthstatus    Details

 master          ready    healthy         StatefulSet master is healthy
 compute-0       ready    healthy         StatefulSet compute-0 is healthy
 data-0          ready    healthy         StatefulSet data-0 is healthy
 storage-0       ready    healthy         StatefulSet storage-0 is healthy

重要

使用 --all 参数时,这些命令的输出包含 Kibana 和 Grafana 仪表板的 URL,可用于更详细的分析。

除了使用 Azure Data CLI (azdata) 之外,还可以使用 Azure Data Studio 查找终结点和状态信息。 有关通过 Azure Data CLI (azdata) 和 Azure Data Studio 查看群集状态的详细信息,请参阅如何查看大数据群集的状态

连接到群集

有关如何连接到大数据群集的详细信息,请参阅使用 Azure Data Studio 连接到 SQL Server 大数据群集

后续步骤

若要详细了解 SQL Server 大数据群集部署,请参阅下列资源: