如何自动化部署Azure Arc数据控制器与Azure Arc SQL托管实例?
自动化部署Azure Arc数据控制器与SQL托管实例方案
ARM模板部署
Azure Arc数据控制器和SQL托管实例支持ARM模板部署,以下是核心模板片段示例:
数据控制器ARM模板片段
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.AzureArcData/dataControllers", "apiVersion": "2021-06-01-preview", "name": "[parameters('dataControllerName')]", "location": "[parameters('location')]", "properties": { "provisioningState": "Succeeded", "controllerType": "SqlServerContainer", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]", "kubernetesNamespace": "[parameters('namespace')]", "kubernetesCluster": { "resourceId": "[parameters('clusterResourceId')]" }, "storage": { "data": { "className": "[parameters('dataStorageClass')]", "accessMode": "ReadWriteOnce", "size": "10Gi" }, "logs": { "className": "[parameters('logsStorageClass')]", "accessMode": "ReadWriteOnce", "size": "10Gi" } }, "servicePrincipal": { "clientId": "[parameters('spClientId')]", "clientSecret": "[parameters('spClientSecret')]", "tenantId": "[parameters('tenantId')]" } } } ] }
SQL托管实例ARM模板片段
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.AzureArcData/sqlManagedInstances", "apiVersion": "2021-06-01-preview", "name": "[parameters('sqlMiName')]", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('Microsoft.AzureArcData/dataControllers', parameters('dataControllerName'))]" ], "properties": { "adminUsername": "[parameters('sqlAdminUsername')]", "adminPassword": "[parameters('sqlAdminPassword')]", "dataControllerId": "[resourceId('Microsoft.AzureArcData/dataControllers', parameters('dataControllerName'))]", "sku": { "name": "GeneralPurpose", "tier": "GeneralPurpose", "capacity": 2 }, "storage": { "data": { "className": "[parameters('sqlDataStorageClass')]", "accessMode": "ReadWriteOnce", "size": "20Gi" }, "logs": { "className": "[parameters('sqlLogsStorageClass')]", "accessMode": "ReadWriteOnce", "size": "10Gi" } } } } ] }
部署前需确保已安装arcdata Azure CLI扩展,且目标K8s集群已完成Azure Arc连接配置。
Terraform部署
使用AzureRM Provider可实现自动化部署,以下是核心配置示例:
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.0.0" } } } provider "azurerm" { features {} } # Azure Arc数据控制器 resource "azurerm_arc_data_controller" "example" { name = "arc-dc" location = "eastus" resource_group_name = azurerm_resource_group.example.name admin_username = "adminuser" admin_password = "P@ssw0rd123!" kubernetes_namespace = "arc" kubernetes_cluster_id = azurerm_kubernetes_cluster.example.id storage_data { class_name = "default" access_mode = "ReadWriteOnce" size_gb = 10 } storage_logs { class_name = "default" access_mode = "ReadWriteOnce" size_gb = 10 } service_principal { client_id = var.sp_client_id client_secret = var.sp_client_secret tenant_id = var.tenant_id } } # Azure Arc SQL托管实例 resource "azurerm_arc_sql_managed_instance" "example" { name = "arc-sql-mi" location = "eastus" resource_group_name = azurerm_resource_group.example.name data_controller_id = azurerm_arc_data_controller.example.id admin_username = "sqladmin" admin_password = "SqlP@ssw0rd123!" sku_name = "GeneralPurpose" capacity = 2 storage_data { class_name = "default" access_mode = "ReadWriteOnce" size_gb = 20 } storage_logs { class_name = "default" access_mode = "ReadWriteOnce" size_gb = 10 } }
需确保Terraform AzureRM Provider版本≥3.0.0,且已完成Azure认证配置。
Ansible部署
通过azure.azcollection集合中的模块可实现自动化,以下是Playbook示例:
- name: Deploy Azure Arc Data Controller and SQL Managed Instance hosts: localhost connection: local vars: resource_group: "arc-rg" location: "eastus" dc_name: "arc-dc" sql_mi_name: "arc-sql-mi" namespace: "arc" sp_client_id: "{{ lookup('env', 'AZURE_SP_CLIENT_ID') }}" sp_client_secret: "{{ lookup('env', 'AZURE_SP_CLIENT_SECRET') }}" tenant_id: "{{ lookup('env', 'AZURE_TENANT_ID') }}" tasks: - name: Create Azure Arc Data Controller azure.azcollection.azure_rm_arcdatacontroller: resource_group: "{{ resource_group }}" name: "{{ dc_name }}" location: "{{ location }}" admin_username: "adminuser" admin_password: "P@ssw0rd123!" kubernetes_namespace: "{{ namespace }}" kubernetes_cluster_id: "/subscriptions/xxx/resourceGroups/xxx/providers/Microsoft.Kubernetes/connectedClusters/xxx" storage_data: class_name: "default" access_mode: "ReadWriteOnce" size_gb: 10 storage_logs: class_name: "default" access_mode: "ReadWriteOnce" size_gb: 10 service_principal: client_id: "{{ sp_client_id }}" client_secret: "{{ sp_client_secret }}" tenant_id: "{{ tenant_id }}" state: present - name: Create Azure Arc SQL Managed Instance azure.azcollection.azure_rm_arcsqlmanagedinstance: resource_group: "{{ resource_group }}" name: "{{ sql_mi_name }}" location: "{{ location }}" data_controller_id: "/subscriptions/xxx/resourceGroups/{{ resource_group }}/providers/Microsoft.AzureArcData/dataControllers/{{ dc_name }}" admin_username: "sqladmin" admin_password: "SqlP@ssw0rd123!" sku_name: "GeneralPurpose" capacity: 2 storage_data: class_name: "default" access_mode: "ReadWriteOnce" size_gb: 20 storage_logs: class_name: "default" access_mode: "ReadWriteOnce" size_gb: 10 state: present
部署前需安装azure.azcollection集合:ansible-galaxy collection install azure.azcollection,并配置Azure认证环境变量。
Azure CLI部署问题排查
若CLI命令无法运行,可从以下几点排查:
- 确认已安装最新版
arcdata扩展:az extension add --name arcdata --upgrade - 验证Azure登录状态与订阅选择:
az account show、az account set --subscription <sub-id> - 检查目标K8s集群是否已连接Azure Arc:
az connectedk8s list - 确保命令参数与集群实际配置匹配(如命名空间、存储类名称)
内容的提问来源于stack exchange,提问作者GokuLc
相关产品推荐
相关产品推荐

