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

部署并管理已启用 Azure Arc 的 Kubernetes 群集扩展

你可以在已启用 Arc 的 Kubernetes 群集中创建扩展实例,设置必需和可选的参数,包括与更新和配置相关的选项。 你还可以查看、列出、更新和删除扩展实例。

在开始之前,请阅读启用了 Arc 的 Kubernetes 群集扩展的概念概述,并查看当前可用扩展的列表

先决条件

  • 最新版本的 Azure CLI

  • 最新版本的 connectedk8sk8s-extension Azure CLI 扩展。 运行以下命令安装这些扩展:

    az extension add --name connectedk8s
    az extension add --name k8s-extension
    

    如果已安装 connectedk8sk8s-extension 扩展,请确保使用以下命令将其更新到最新版本:

    az extension update --name connectedk8s
    az extension update --name k8s-extension
    
  • 一个现有的已启用 Azure Arc 的 Kubernetes 连接群集,其中至少包含一个操作系统和体系结构类型为 linux/amd64 的节点。 如果部署 Flux (GitOps),则可以在没有 linux/amd64 节点的情况下使用基于 ARM64 的群集。

创建扩展实例

若要创建新的扩展实例,请使用 k8s-extension create 并传递必需参数的值。

此示例在已启用 Azure Arc 的 Kubernetes 群集上创建一个 Azure Monitor 容器见解扩展实例:

az k8s-extension create --name azuremonitor-containers  --extension-type Microsoft.AzureMonitor.Containers --scope cluster --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

输出:

{
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": null,
  "configurationSettings": {
    "logAnalyticsWorkspaceResourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/defaultresourcegroup-eus/providers/microsoft.operationalinsights/workspaces/defaultworkspace-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eus"
  },
  "creationTime": "2021-04-02T12:13:06.7534628+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.azuremonitor.containers",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/demo/providers/Microsoft.Kubernetes/connectedClusters/demo/providers/Microsoft.KubernetesConfiguration/extensions/azuremonitor-containers",
  "identity": null,
  "installState": "Pending",
  "lastModifiedTime": "2021-04-02T12:13:06.753463+00:00",
  "lastStatusTime": null,
  "name": "azuremonitor-containers",
  "releaseTrain": "Stable",
  "resourceGroup": "demo",
  "scope": {
    "cluster": {
      "releaseNamespace": "azuremonitor-containers"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": null,
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "2.8.2"
}

注意

服务无法将敏感信息保留 48 小时以上。 如果已启用 Azure Arc 的 Kubernetes 代理保持网络连接的时间不超过 48 小时,且无法确定是否要在群集上创建扩展,则扩展会转换为 Failed 状态。 一旦发生这种情况,就需要再次运行 k8s-extension create 以创建全新的扩展 Azure 资源。

Azure Monitor 容器见解是单一实例扩展(在每个群集上只需要一个)。 需要清理所有以前的 Azure Monitor 容器见解(不带扩展)Helm 图表安装,才能通过扩展安装同一组件。 在运行 az k8s-extension create 之前,请按照删除 Helm 图表中的说明进行操作。

必需的参数

使用 az k8s-extension create 创建扩展实例时,以下参数是必需的。

参数名称 说明
--name 扩展实例的名称
--extension-type 要在群集上安装的扩展类型。 例如:Microsoft.AzureMonitor.Containers、microsoft.azuredefender.kubernetes
--scope 扩展的安装范围clusternamespace
--cluster-name 必须在其上创建扩展实例的已启用 Azure Arc 的 Kubernetes 资源的名称
--resource-group 包含已启用 Azure Arc 的 Kubernetes 资源的资源组
--cluster-type 必须要在其上创建扩展实例的群集类型。 对于大多数方案,请使用与已启用 Azure Arc 的 Kubernetes 群集对应的 connectedClusters

可选参数

根据方案的需要,使用这些可选参数中的一个或多个,以及必需的参数。

注意

可以通过将 auto-upgrade-minor-version 设置为 true,将扩展实例自动升级到最新的次要版本和修补程序版本,或者,也可以改用 --version 参数手动设置扩展实例的版本。 建议启用次要版本和修补程序版本自动升级,以便始终获得最新的安全修补程序和功能。

由于主要版本升级可能包括中断性变更,因此不支持自动升级扩展实例的新主要版本。 可以选择何时手动将扩展程序实例升级到新的主要版本。

参数名称 说明
--auto-upgrade-minor-version 用于确定是否自动升级扩展次要版本的布尔属性。 默认设置为 true。 如果此参数设置为 true,则你不能设置 version 参数,因为版本将动态更新。 如果设置为 false,则扩展不会自动升级,甚至包括其修补程序版本。
--version 要安装的扩展版本(要将扩展实例固定到的特定版本)。 如果 auto-upgrade-minor-version 设置为 true,则不得提供此参数。
--configuration-settings 可传入到扩展以控制其功能的设置。 需在参数名称的后面以空格分隔的 key=value 对形式传入这些设置。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-settings-file
--configuration-settings-file 包含 key=value 对的 JSON 文件的路径,该文件用于将配置设置传入扩展。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-settings
--configuration-protected-settings 无法使用 GET API 调用或 az k8s-extension show 命令检索的设置。 通常用于传入敏感设置。 需在参数名称的后面以空格分隔的 key=value 对形式传入这些设置。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-protected-settings-file
--configuration-protected-settings-file 包含 key=value 对的 JSON 文件的路径,该文件用于将敏感设置传入扩展。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-protected-settings
--release-namespace 此参数指示要在其中创建版本的命名空间。 仅当 scope 设置为 cluster 时才相关。
--release-train 扩展作者可以在不同的版本序列(例如 StablePreview 等)中发布版本。如果未显式设置此参数,则默认将使用 Stable
--target-namespace 指示要在其中创建版本的命名空间。 为此扩展实例创建的系统帐户的权限将限于此命名空间。 仅当 scope 设置为 namespace 时才相关。

显示扩展详细信息

若要查看当前安装的扩展实例的详细信息,请使用 k8s-extension show 并传入必需参数的值。

az k8s-extension show --name azuremonitor-containers --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

输出:

{
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": null,
  "configurationSettings": {
    "logAnalyticsWorkspaceResourceID": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/defaultresourcegroup-eus/providers/microsoft.operationalinsights/workspaces/defaultworkspace-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eus"
  },
  "creationTime": "2021-04-02T12:13:06.7534628+00:00",
  "errorInfo": {
    "code": null,
    "message": null
  },
  "extensionType": "microsoft.azuremonitor.containers",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/demo/providers/Microsoft.Kubernetes/connectedClusters/demo/providers/Microsoft.KubernetesConfiguration/extensions/azuremonitor-containers",
  "identity": null,
  "installState": "Installed",
  "lastModifiedTime": "2021-04-02T12:13:06.753463+00:00",
  "lastStatusTime": "2021-04-02T12:13:49.636+00:00",
  "name": "azuremonitor-containers",
  "releaseTrain": "Stable",
  "resourceGroup": "demo",
  "scope": {
    "cluster": {
      "releaseNamespace": "azuremonitor-containers"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": null,
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "2.8.2"
}

列出群集上安装的所有扩展

若要查看群集上安装的所有扩展的列表,请使用 k8s-extension list 并传入必需参数的值。

az k8s-extension list --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

输出:

[
  {
    "autoUpgradeMinorVersion": true,
    "creationTime": "2020-09-15T02:26:03.5519523+00:00",
    "errorInfo": {
      "code": null,
      "message": null
    },
    "extensionType": "Microsoft.AzureMonitor.Containers",
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myRg/providers/Microsoft.Kubernetes/connectedClusters/myCluster/providers/Microsoft.KubernetesConfiguration/extensions/myExtInstanceName",
    "identity": null,
    "installState": "Pending",
    "lastModifiedTime": "2020-09-15T02:48:45.6469664+00:00",
    "lastStatusTime": null,
    "name": "myExtInstanceName",
    "releaseTrain": "Stable",
    "resourceGroup": "myRG",
    "scope": {
      "cluster": {
        "releaseNamespace": "myExtInstanceName1"
      }
    },
    "statuses": [],
    "type": "Microsoft.KubernetesConfiguration/extensions",
    "version": "0.1.0"
  },
  {
    "autoUpgradeMinorVersion": true,
    "creationTime": "2020-09-02T00:41:16.8005159+00:00",
    "errorInfo": {
      "code": null,
      "message": null
    },
    "extensionType": "microsoft.azuredefender.kubernetes",
    "id": "/subscriptions/0e849346-4343-582b-95a3-e40e6a648ae1/resourceGroups/myRg/providers/Microsoft.Kubernetes/connectedClusters/myCluster/providers/Microsoft.KubernetesConfiguration/extensions/defender",
    "identity": null,
    "installState": "Pending",
    "lastModifiedTime": "2020-09-02T00:41:16.8005162+00:00",
    "lastStatusTime": null,
    "name": "microsoft.azuredefender.kubernetes",
    "releaseTrain": "Stable",
    "resourceGroup": "myRg",
    "scope": {
      "cluster": {
        "releaseNamespace": "myExtInstanceName2"
      }
    },
    "type": "Microsoft.KubernetesConfiguration/extensions",
    "version": "0.1.0"
  }
]

更新除扩展实例

注意

参阅特定扩展类型的文档,以了解 --configuration-settings--configuration-protected-settings 中可更新的特定设置。 对于 --configuration-protected-settings,应提供所有设置,即使只更新一个设置。 如果省略其中的任何一个设置,则会将这些设置视为已过时并将其删除。

若要更新现有的扩展实例,请使用 k8s-extension update 并传入必需参数和可选参数的值。 必需参数和可选参数与用于创建扩展实例的参数略有不同。

此示例将 Azure 机器学习扩展实例的 auto-upgrade-minor-version 设置更新为 true

az k8s-extension update --name azureml --extension-type Microsoft.AzureML.Kubernetes --scope cluster --cluster-name <clusterName> --resource-group <resourceGroupName> --auto-upgrade-minor-version true --cluster-type managedClusters

要更新的必需参数

参数名称 说明
--name 扩展实例的名称
--cluster-name 必须在其中创建扩展实例的群集的名称
--resource-group 包含群集的资源组
--cluster-type 必须要在其上创建扩展实例的群集类型。 对于已启用 Azure Arc 的 Kubernetes 群集,请使用 connectedClusters。 对于 AKS 群集,请使用 managedClusters

要更新的可选参数

参数名称 说明
--auto-upgrade-minor-version 用于指定是否自动升级扩展次要版本的布尔属性。 默认设置为 true。 如果此参数设置为 true,则你不能设置 version 参数,因为版本将动态更新。 如果设置为 false,则扩展不会自动升级,甚至包括其修补程序版本。
--version 要安装的扩展版本(要将扩展实例固定到的特定版本)。 如果 auto-upgrade-minor-version 设置为 true,则不可提供此参数。
--configuration-settings 可传入到扩展以控制其功能的设置。 需在参数名称的后面以空格分隔的 key=value 对形式传入这些设置。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-settings-file。 只需要提供需要更新的设置。 提供的设置将替换为指定的值。
--configuration-settings-file 包含 key=value 对的 JSON 文件的路径,该文件用于将配置设置传入扩展。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-settings
--configuration-protected-settings 无法使用 GET API 调用或 az k8s-extension show 命令检索的设置。 通常用于传入敏感设置。 需在参数名称的后面以空格分隔的 key=value 对形式传入这些设置。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-protected-settings-file。 更新某个受保护设置时,应指定所有受保护设置。 如果省略其中的任何一个设置,则会将这些设置视为已过时并将其删除。
--configuration-protected-settings-file 包含 key=value 对的 JSON 文件的路径,该文件用于将敏感设置传入扩展。 如果在命令中使用此参数,则不能在同一命令中使用 --configuration-protected-settings
--scope 扩展的安装范围 - clusternamespace
--release-train 扩展作者可以在不同的版本序列(例如 StablePreview 等)中发布版本。如果未显式设置此参数,则默认将使用 Stable

升级扩展实例

如前所述,如果将 auto-upgrade-minor-version 设置为 true,则在发布新的次要版本时,扩展将自动升级。 在大多数情况下,我们建议启用自动升级。 将 auto-upgrade-minor-version 设置为 false 后,如果你需要更新的版本,必须手动升级扩展。

此外,需要手动升级才能获得扩展的新主要实例。 你可以选择升级时间,以避免主要版本升级导致任何意外的中断性变更。

若要手动升级扩展实例,请使用 k8s-extension update,并设置 version 参数以指定版本。

此示例将 Azure 机器学习扩展实例更新为版本 x.y.z:

az k8s-extension update --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters --name azureml --version x.y.z

删除扩展实例

若要删除群集上的扩展实例,请使用 k8s-extension delete 并传入必需参数的值:

az k8s-extension delete --name azuremonitor-containers --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type connectedClusters

注意

代表此扩展的 Azure 资源将会立即删除。 仅当 Kubernetes 群集上运行的代理已建立网络连接,并且可以再次访问 Azure 服务以获取所需状态时,才会删除群集上与此扩展关联的 Helm 版本。

后续步骤