你当前正在访问 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 工具、oc
或 helm
(如果你熟悉这些工具和 Kubernetes yaml/json 的话)。
概述
若要创建 SQL 托管实例,你需要:
- 创建 Kubernetes 机密以安全地存储系统管理员登录名和密码
- 基于
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.password
和 data.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 托管实例名称,则可以将 arc
和 sqlmi
替换为你的名称。
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
排查部署问题
如果在部署过程中遇到任何问题,请参阅故障排除指南。