本指南介绍如何使用推送到Azure 容器注册表的自定义容器映像将数据 API 生成器(DAB)部署到Azure Kubernetes 服务 (AKS)。 AKS 提供托管的 Kubernetes,具有内置的扩展、健康检查和密钥管理功能。
先决条件
- 拥有有效订阅的 Azure 帐户。 免费创建帐户。
- 已安装 Azure CLI
- 已安装 kubectl
- 已安装 Docker
- 数据 API 生成器 CLI。 安装 CLI
- 现有的 AKS 群集。 创建 AKS 群集
- 可从 AKS 访问的现有受支持数据库
生成配置文件
为配置文件创建本地目录。
使用
dab init.. 初始化基本配置文件。 使用@env()函数处理连接字符串,以便在运行时注入密钥,而不是将其嵌入到镜像中。dab init \ --database-type mssql \ --connection-string "@env('DATABASE_CONNECTION_STRING')"使用
dab add添加至少一个实体。 对要公开的每个表或视图重复上述操作。dab add Books \ --source dbo.Books \ --permissions "anonymous:read"在继续之前查看
dab-config.json。
生成和推送自定义容器映像
生成包含 dab-config.json 位置 /App/dab-config.json的映像。
如果还没有 Azure 容器注册表,请创建一个。
az acr create \ --resource-group <resource-group> \ --name <registry-name> \ --sku Basic \ --admin-enabled true在与
Dockerfile相同的目录中创建一个dab-config.json。FROM mcr.microsoft.com/azure-databases/data-api-builder:latest COPY dab-config.json /App/dab-config.json使用 ACR 任务生成和推送映像。
az acr build \ --registry <registry-name> \ --image dab:latest \ .请注意完整的图像参考:
<registry-name>.azurecr.io/dab:latest。
将 AKS 连接到 ACR
授予 AKS 群集对注册表进行镜像拉取操作的权限。
az aks update \
--name <cluster-name> \
--resource-group <resource-group> \
--attach-acr <registry-name>
将连接字符串存储为 Kubernetes 机密
将数据库连接字符串存储为 Kubernetes 机密,因此它永远不会在清单文件中。
kubectl create secret generic dab-secrets \
--from-literal=DATABASE_CONNECTION_STRING="<your-connection-string>"
警告
切勿直接在 Kubernetes 清单文件或容器映像中放置连接字符串。 使用机密或 Azure 密钥保管库。
创建 Kubernetes 清单
创建包含以下内容的名为 dab-deployment.yaml 的文件。 将 <registry-name> 替换为您的 ACR 名称。
apiVersion: apps/v1
kind: Deployment
metadata:
name: dab
labels:
app: dab
spec:
replicas: 2
selector:
matchLabels:
app: dab
template:
metadata:
labels:
app: dab
spec:
containers:
- name: dab
image: <registry-name>.azurecr.io/dab:latest
ports:
- containerPort: 5000
env:
- name: DATABASE_CONNECTION_STRING
valueFrom:
secretKeyRef:
name: dab-secrets
key: DATABASE_CONNECTION_STRING
readinessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 15
periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
name: dab-service
spec:
selector:
app: dab
ports:
- protocol: TCP
port: 80
targetPort: 5000
type: LoadBalancer
注释
readinessProbe和 livenessProbe 使用 DAB /health 终结点。 有关详细信息,请参阅 运行状况检查。
部署到 AKS
获取群集的认证凭据。
az aks get-credentials \ --resource-group <resource-group> \ --name <cluster-name>应用配置文件。
kubectl apply -f dab-deployment.yaml请持续观察部署过程,直到 Pod 准备就绪。
kubectl rollout status deployment/dab获取分配给服务的外部 IP 地址。
kubectl get service dab-service该
EXTERNAL-IP列显示公共 IP 地址。 等待负载均衡器预配大约一分钟。
验证部署
浏览到
http://<external-ip>/health。 正常的响应如下所示:{ "status": "healthy", "version": "2.0.0", "app-name": "dab_oss_2.0.0" }测试实体终结点。
curl http://<external-ip>/api/Books
调整部署规模
更改副本数量以实现水平扩展。
kubectl scale deployment/dab --replicas=4
或更新spec.replicas在dab-deployment.yaml中并重新应用。
清理资源
不再需要部署和服务时,请将其删除。
kubectl delete -f dab-deployment.yaml
kubectl delete secret dab-secrets
若要删除 AKS 群集和注册表,请删除资源组。
az group delete \
--name <resource-group> \
--yes --no-wait