你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Kubernetes 工具部署由 Azure Arc 启用的 SQL 托管实例

本文演示如何使用 Kubernetes 工具部署适用于 Azure Arc 的 Azure SQL 托管实例。

先决条件

应已创建一个数据控制器

若要使用 Kubernetes 工具创建 SQL 托管实例,需要安装 Kubernetes 工具。 本文中的示例将使用 kubectl,但类似的方法也可用于 Kubernetes 仪表板等其他 Kubernetes 工具、ochelm(如果你熟悉这些工具和 Kubernetes yaml/json 的话)。

安装 kubectl 工具

概述

若要创建 SQL 托管实例,你需要:

  1. 创建 Kubernetes 机密以安全地存储系统管理员登录名和密码
  2. 基于 SqlManagedInstance 自定义资源定义创建一个 SQL 托管实例自定义资源

在 yaml 文件中定义这两项。

创建 yaml 文件

模板 yaml 文件着手,创建自己的自定义 SQL 托管实例 yaml 文件。 将此文件下载到本地计算机,并在文本编辑器中打开它。 使用文本编辑器,例如支持语法突出显示和对 yaml 文件进行 Lint 分析的 VS Code

注意

从 2022 年 2 月版开始,需要为备份指定支持 ReadWriteMany (RWX) 的存储类。 详细了解访问模式。 如果没有为备份指定存储类,则使用 Kubernetes 中的默认存储类。 如果默认值不支持 RWX,则 SQL 托管实例安装可能不会成功。

yaml 文件示例

请查看以下 yaml 文件示例:

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: sql1-login-secret
type: Opaque
---
apiVersion: sql.arcdata.microsoft.com/v12
kind: SqlManagedInstance
metadata:
  name: sql1
  annotations:
    exampleannotation1: exampleannotationvalue1
    exampleannotation2: exampleannotationvalue2
  labels:
    examplelabel1: examplelabelvalue1
    examplelabel2: examplelabelvalue2
spec:
  dev: true #options: [true, false]
  licenseType: LicenseIncluded #options: [LicenseIncluded, BasePrice].  BasePrice is used for Azure Hybrid Benefits.
  tier: GeneralPurpose #options: [GeneralPurpose, BusinessCritical]
  security:
    adminLoginSecret: sql1-login-secret
  scheduling:
    default:
      resources:
        limits:
          cpu: "2"
          memory: 4Gi
        requests:
          cpu: "1"
          memory: 2Gi
  services:
    primary:
      type: LoadBalancer
  storage:
    #backups:
    #  volumes:
    #  - className: azurefile # Backup volumes require a ReadWriteMany (RWX) capable storage class
    #    size: 5Gi
    data:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    datalogs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi
    logs:
      volumes:
      - className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
        size: 5Gi

自定义登录名和密码

Kubernetes 机密以 base64 编码的字符串形式存储 - 一个用于用户名,另一个用于密码。 你需要对系统管理员登录名和密码进行 base64 编码,并将它们放在 data.passworddata.username 占位符位置。 请勿包含模板中提供的 <> 符号。

注意

为了获得最佳安全性,登录名不允许使用值 sa。 请遵循密码复杂性策略

你可使用联机工具对所需的用户名和密码进行 base64 编码,也可以使用适用于自己平台的 CLI 工具。

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

自定义名称

模板的 name 属性的值为 sql1。 可更改此值,但它必须包含符合 DNS 命名标准的字符。 还必须更改机密名称以使二者相匹配。 例如,如果将 SQL 托管实例的名称更改为 sql2,则必须将机密的名称从 sql1-login-secret 更改为 sql2-login-secret

自定义资源要求

可根据需要更改资源要求(RAM 与核心限制和请求)。

注意

你可以详细了解 Kubernetes 资源治理

资源限制和请求的要求:

  • 出于计费目的,核心限制值是必需的
  • 资源请求和限制的其余部分是可选的。
  • 核心限制和请求必须是正整数值(如果已指定)。
  • 核心请求至少需要 1 个核心(如果已指定)。
  • 内存值格式遵循 Kubernetes 表示法。
  • 内存请求至少需要 2 GB(如果已指定)。
  • 一般指导原则是,对于生产用例,应为每个核心使用 4 GB 的 RAM。

自定义服务类型

如果需要,可将服务类型更改为 NodePort。 随即将分配一个随机端口号。

自定义存储

你可以自定义存储类,使存储与你的环境相匹配。 如果不确定哪些存储类可用,可运行命令 kubectl get storageclass 进行查看。

模板有一个默认值 default

例如

storage:
    data:
      volumes:
      - className: default 

这个示例意味着,存在一个名为 default 的存储类,而不是存在一个默认的存储类。 还可选择更改存储大小。 有关详细信息,请参阅存储配置

创建 SQL 托管实例

自定义 SQL 托管实例 yaml 文件后,可以通过运行以下命令来创建 SQL 托管实例:

kubectl create -n <your target namespace> -f <path to your yaml file>

#Example
#kubectl create -n arc -f C:\arc-data-services\sqlmi.yaml

监视创建状态

创建 SQL 托管实例需要几分钟时间才能完成。 可使用以下命令在另一个终端窗口中监视进度:

注意

下面的示例命令假设你创建了名为 sql1 的 SQL 托管实例以及名为 arc 的 Kubernetes 命名空间。 如果使用了不同的命名空间/SQL 托管实例名称,则可以将 arcsqlmi 替换为你的名称。

kubectl get sqlmi/sql1 --namespace arc
kubectl get pods --namespace arc

还可检查任何特定 Pod 的创建状态。 运行 kubectl describe pod ...。 使用此命令排查任何问题。 例如:

kubectl describe pod/<pod name> --namespace arc

#Example:
#kubectl describe pod/sql1-0 --namespace arc

排查部署问题

如果在部署过程中遇到任何问题,请参阅故障排除指南

连接到由 Azure Arc 启用的 SQL 托管实例