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

快速入门:将现有 Kubernetes 群集连接到 Azure Arc

通过使用 Azure CLI 或 Azure PowerShell 将现有 Kubernetes 群集连接到 Azure Arc,开始使用已启用 Azure Arc 的 Kubernetes。

有关将群集连接到 Azure Arc 的概念,请参阅已启用 Azure Arc 的 Kubernetes 代理概述。 若要在示例/练习体验中尝试某些操作,请访问 Azure Arc Jumpstart

先决条件

重要

除了这些先决条件外,请确保满足已启用 Azure Arc 的 Kubernetes 的所有网络要求

  • 具有活动订阅的 Azure 帐户。 免费创建帐户

  • 基本了解 Kubernetes 核心概念

  • 标识(用户或服务主体),可用于登录到 Azure CLI,并将群集连接到 Azure Arc。

  • 最新版本的 Azure CLI

  • 最新版本的 connectedk8s Azure CLI 扩展,可通过运行以下命令进行安装:

    az extension add --name connectedk8s
    
  • 已启动并正在运行的 Kubernetes 群集。 如果没有群集,你可以使用以下任意选项创建群集:

  • 部署在群集上的 Arc 代理至少有 850 MB 可用空间,其容量大约可供使用单个 CPU 的 7% 的计算能力。

  • 指向群集的 kubeconfig 文件和上下文。 若要详细了解 kubeconfig 文件是什么以及如何设置上下文以指向群集,请参阅此文

为已启用 Azure Arc 的 Kubernetes 注册提供程序

  1. 输入以下命令:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.KubernetesConfiguration
    az provider register --namespace Microsoft.ExtendedLocation
    
  2. 监视注册过程。 注册可能最多需要 10 分钟。

    az provider show -n Microsoft.Kubernetes -o table
    az provider show -n Microsoft.KubernetesConfiguration -o table
    az provider show -n Microsoft.ExtendedLocation -o table
    

    注册后,应会看到这些命名空间的 RegistrationState 状态更改为 Registered

创建资源组

运行以下命令:

az group create --name AzureArcTest --location EastUS --output table

输出:

Location    Name
----------  ------------
eastus      AzureArcTest

连接现有的 Kubernetes 群集

运行以下命令以连接到群集。 此命令将 Azure Arc 代理部署到群集,并将 Helm v. 3.6.3 安装到部署计算机的 .azure 文件夹中。 此 Helm 3 安装仅用于 Azure Arc,它不会删除或更改计算机上以前安装的任何 Helm 版本。

在此示例中,群集的名称为 AzureArcTest1。

az connectedk8s connect --name AzureArcTest1 --resource-group AzureArcTest

输出:

Helm release deployment succeeded

    {
      "aadProfile": {
        "clientAppId": "",
        "serverAppId": "",
        "tenantId": ""
      },
      "agentPublicKeyCertificate": "xxxxxxxxxxxxxxxxxxx",
      "agentVersion": null,
      "connectivityStatus": "Connecting",
      "distribution": "gke",
      "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1",
      "identity": {
        "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "type": "SystemAssigned"
      },
      "infrastructure": "gcp",
      "kubernetesVersion": null,
      "lastConnectivityTime": null,
      "location": "eastus",
      "managedIdentityCertificateExpirationTime": null,
      "name": "AzureArcTest1",
      "offering": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "AzureArcTest",
      "tags": {},
      "totalCoreCount": null,
      "totalNodeCount": null,
      "type": "Microsoft.Kubernetes/connectedClusters"
    }

提示

上面未指定位置参数的命令会在资源组所在位置创建已启用 Azure Arc 的 Kubernetes 资源。 若要在其他位置创建已启用 Azure Arc 的 Kubernetes 资源,请在运行 az connectedk8s connect 命令时指定 --location <region>-l <region>

重要

如果部署因超时错误而失败,请参阅故障排除指南,以详细了解如何解决此问题。

使用出站代理服务器进行连接

如果群集位于出站代理服务器后面,则必须通过出站代理服务器路由请求。

  1. 在部署计算机上,设置 Azure CLI 使用出站代理服务器所需的环境变量:

    export HTTP_PROXY=<proxy-server-ip-address>:<port>
    export HTTPS_PROXY=<proxy-server-ip-address>:<port>
    export NO_PROXY=<cluster-apiserver-ip-address>:<port>
    
  2. 在 Kubernetes 群集上,运行指定了 proxy-httpsproxy-http 参数的连接命令。 如果代理服务器同时设置了 HTTP 和 HTTPS,请确保对 HTTP 代理使用 --proxy-http,对 HTTPS 代理使用 --proxy-https。 如果代理服务器仅使用 HTTP,则可以将该值用于这两个参数。

    az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR> --proxy-cert <path-to-cert-file>
    

注意

  • 某些网络请求(例如涉及群集内服务间通信的请求)需要与通过代理服务器路由进行出站通信的流量分开。 --proxy-skip-range 参数可用于以逗号分隔的方式指定 CIDR 范围和终结点,以便代理与这些终结点之间的任何通信不会通过出站代理进行。 群集中服务的 CIDR 范围至少应指定为此参数的值。 例如,假设 kubectl get svc -A 返回一个服务列表,其中所有服务在 10.0.0.0/16 范围内都有 ClusterIP 值。 则要为 --proxy-skip-range 指定的值为 10.0.0.0/16,kubernetes.default.svc,.svc.cluster.local,.svc
  • 大多数出站代理环境预期使用 --proxy-http--proxy-https--proxy-skip-range。 仅在需要将代理预期的受信任证书插入代理 Pod 的受信任证书存储中时,才需要 --proxy-cert
  • 必须将出站代理配置为允许 WebSocket 连接。

对于仅需要提供受信任证书而不需要代理服务器终结点输入的出站代理服务器,只需指定 az connectedk8s connect 输入即可运行 --proxy-cert。 如果需要多个受信任证书,可以使用 --proxy-cert 参数在单个文件中提供组合证书链。

注意

  • --custom-ca-cert--proxy-cert 的别名。 这两个参数可互换使用。 如果在同一命令中传递两个参数,将采用最后传递的那个参数。

运行指定了 --proxy-cert 参数的连接命令:

az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>

验证群集连接

运行以下命令:

az connectedk8s list --resource-group AzureArcTest --output table

输出:

Name           Location    ResourceGroup
-------------  ----------  ---------------
AzureArcTest1  eastus      AzureArcTest

注意

加入群集后,大约需要 5 到 10 分钟,群集元数据(群集版本、代理版本、节点数等)才会出现在 Azure 门户中已启用 Azure Arc 的 Kubernetes 资源的“概述”页上。

提示

如需帮助解决连接群集时出现的问题,请参阅诊断已启用 Azure Arc 的 Kubernetes 群集的连接问题

查看适用于 Kubernetes 的 Azure Arc 代理

已启用 Azure Arc 的 Kubernetes 会将几个代理部署到 azure-arc 命名空间中。

  1. 使用以下命令查看这些部署和 Pod:

    kubectl get deployments,pods -n azure-arc
    
  2. 验证所有 Pod 是否处于 Running 状态。

    输出:

     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
     deployment.apps/cluster-metadata-operator   1/1     1            1           13d
     deployment.apps/clusterconnect-agent        1/1     1            1           13d
     deployment.apps/clusteridentityoperator     1/1     1            1           13d
     deployment.apps/config-agent                1/1     1            1           13d
     deployment.apps/controller-manager          1/1     1            1           13d
     deployment.apps/extension-manager           1/1     1            1           13d
     deployment.apps/flux-logs-agent             1/1     1            1           13d
     deployment.apps/kube-aad-proxy              1/1     1            1           13d
     deployment.apps/metrics-agent               1/1     1            1           13d
     deployment.apps/resource-sync-agent         1/1     1            1           13d
    
     NAME                                            READY   STATUS    RESTARTS   AGE
     pod/cluster-metadata-operator-9568b899c-2stjn   2/2     Running   0          13d
     pod/clusterconnect-agent-576758886d-vggmv       3/3     Running   0          13d
     pod/clusteridentityoperator-6f59466c87-mm96j    2/2     Running   0          13d
     pod/config-agent-7cbd6cb89f-9fdnt               2/2     Running   0          13d
     pod/controller-manager-df6d56db5-kxmfj          2/2     Running   0          13d
     pod/extension-manager-58c94c5b89-c6q72          2/2     Running   0          13d
     pod/flux-logs-agent-6db9687fcb-rmxww            1/1     Running   0          13d
     pod/kube-aad-proxy-67b87b9f55-bthqv             2/2     Running   0          13d
     pod/metrics-agent-575c565fd9-k5j2t              2/2     Running   0          13d
     pod/resource-sync-agent-6bbd8bcd86-x5bk5        2/2     Running   0          13d
    

有关这些代理的详细信息,请参阅已启用 Azure Arc 的 Kubernetes 代理概述

清理资源

可以使用以下命令删除已启用 Azure Arc 的 Kubernetes 资源、任何关联的配置资源以及使用 Azure CLI 在群集上运行的任何代理:

az connectedk8s delete --name AzureArcTest1 --resource-group AzureArcTest

如果删除过程失败,请使用以下命令强制删除(如果要绕过确认提示则添加 -y):

az connectedk8s delete -n AzureArcTest1 -g AzureArcTest --force

如果你在创建新的群集部署时遇到问题(由于之前创建的资源未完全删除),也可以使用此命令。

注意

使用 Azure 门户删除已启用 Azure Arc 的 Kubernetes 资源将删除任何关联的配置资源,但不会删除群集上运行的任何代理。 最佳做法是使用 az connectedk8s delete 删除已启用 Azure Arc 的 Kubernetes 资源,而不是删除 Azure 门户中的资源。

后续步骤