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

使用 Kubernetes 工具创建启用 Azure Arc 的数据控制器

数据控制器为 Kubernetes 群集管理已启用 Azure Arc 的数据服务。 本文介绍如何使用 Kubernetes 工具创建数据控制器。

创建数据控制器的大致步骤如下所示:

  1. 创建命名空间和引导程序服务
  2. 创建数据控制器

注意

为简单起见,以下步骤假定你是 Kubernetes 群集管理员。 对于生产部署或更安全的环境,建议在部署数据控制器时遵循“最低特权”安全最佳做法,方法是仅向部署过程中涉及的用户和服务帐户授予特定权限。

有关详细说明,请参阅主题使用最低特权操作已启用 Arc 的数据服务

先决条件

请参阅规划启用了 Azure Arc 的数据服务部署主题,了解概述信息。

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

安装 kubectl 工具

创建命名空间和引导程序服务

启动程序服务处理用于创建、编辑和删除自定义资源(例如数据控制器)的传入请求。

保存 bootstrapper-unified.yaml 的副本,并将文件中所有位置的占位符 {{NAMESPACE}} 替换为所需的命名空间名称,例如:arc

重要

bootstrapper-unified.yaml 模板文件默认从 Microsoft Container Registry (MCR) 中拉取引导程序容器映像。 如果环境无法直接访问 Microsoft 容器注册表,可以执行以下操作:

运行以下命令,使用编辑后的文件创建命名空间和引导程序服务。

kubectl apply --namespace arc -f bootstrapper-unified.yaml

使用以下命令验证引导程序 Pod 是否正在运行。

kubectl get pod --namespace arc -l app=bootstrapper

如果状态不是“正在运行”,请多次运行命令,直到状态变为“正在运行”

创建数据控制器

现在,可开始创建数据控制器。

首先,在计算机上本地创建模板文件的副本,以便可以修改某些设置。

创建指标和日志仪表板用户名和密码

在该文件开头,你可以作为管理员指定用于向指标和日志仪表板进行身份验证的用户名和密码。 请选择安全的密码,并只与需要拥有这些特权的人共享。

Kubernetes 机密以 base64 编码的字符串形式存储 - 一个用于用户名,另一个用于密码。

可使用联机工具对所需的用户名和密码进行 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

为日志和指标仪表板创建证书

(可选)你可以为日志和指标仪表板创建 SSL/TLS 证书。 按照在部署 Kubernetes 原生工具期间指定 SSL/TLS 证书中的说明操作。

编辑数据控制器配置

根据需要编辑数据控制器配置:

必需

  • location:将其更改为存储有关数据控制器的元数据的 Azure 位置。 请参阅可用区域列表
  • resourceGroup:在 Azure 资源管理器中,要在其中创建数据控制器 Azure 资源的 Azure 资源组。 通常,此资源组应该已经存在,但在将数据上传到 Azure 之前,不需要此资源组。
  • subscription:要在其中创建 Azure 资源的订阅的 Azure 订阅 GUID

建议查看并在可能的情况下更改默认值

  • storage..className:用于数据控制器数据和日志文件的存储类。 如果不确定 Kubernetes 群集中可用的存储类,可以运行以下命令:kubectl get storageclass。 默认值为 default,它假定存在一个被命名为 default 的存储类,而不是存在一个默认的存储类。 注意:需要将两个 className 设置设为所需的存储类 - 一个用于数据,一个用于日志。
  • serviceType:如果使用的不是 LoadBalancer,请将服务类型更改为 NodePort
  • Security:对于 Azure Red Hat OpenShift 或 Red Hat OpenShift 容器平台,将 security: 设置替换为数据控制器 yaml 文件中的以下值
  security:
    allowDumps: false
    allowNodeMetricsCollection: false
    allowPodMetricsCollection: false

可选

  • name:数据控制器的默认名称为 arc,但可以根据需要对其进行更改
  • displayName:将此值设置为与文件顶部的 name 特性相同的值
  • logsui-certificate-secret:在 Kubernetes 群集上为日志 UI 证书创建的机密的名称。
  • metricsui-certificate-secret:在 Kubernetes 群集上为指标 UI 证书创建的机密的名称。

下面的示例显示了一个完整的数据控制器 yaml 文件。

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.29.0_2024-04-09
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

将编辑后的文件保存在本地计算机上,并运行以下命令以创建数据控制器:

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

监视创建状态

创建控制器需要几分钟才能完成。 可使用以下命令在另一个终端窗口中监视进度:

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

还可运行如下命令来检查任何特定 Pod 的创建状态或日志。 这对于排查问题特别有用。

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

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

排查创建问题

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