You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动化部署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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:37:10