快速入门:将现有 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 群集。 如果没有群集,你可以使用以下任意选项创建群集:
使用 Docker for Mac 或 Docker for Windows 创建 Kubernetes 群集
使用群集 API 的自托管 Kubernetes 群集
注意
群集至少需要有一个操作系统节点和体系结构类型
linux/amd64
和/或linux/arm64
。 有关 ARM64 方案的详细信息,请参阅群集要求。
部署在群集上的 Arc 代理至少有 850 MB 可用空间,其容量大约可供使用单个 CPU 的 7% 的计算能力。
指向群集的 kubeconfig 文件和上下文。 有关详细信息,请参阅配置对多个群集的访问。
为已启用 Azure Arc 的 Kubernetes 注册提供程序
输入以下命令:
az provider register --namespace Microsoft.Kubernetes az provider register --namespace Microsoft.KubernetesConfiguration az provider register --namespace Microsoft.ExtendedLocation
监视注册过程。 注册可能最多需要 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 ChinaEast2 --output table
输出:
Location Name
---------- ------------
chinaeast2 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": "chinaeast2",
"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>
。
重要
如果部署因超时错误而失败,请参阅故障排除指南,以详细了解如何解决此问题。
使用出站代理服务器进行连接
如果群集位于出站代理服务器后面,则必须通过出站代理服务器路由请求。
在部署计算机上,设置 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>
在 Kubernetes 群集上,运行指定了
proxy-https
和proxy-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 连接。
对于出站代理服务器,如果仅提供受信任的证书,只需指定 --proxy-cert
参数即可运行 az connectedk8s connect
:
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
如果有多个受信任的证书,则需要将证书链(叶证书、中间证书、根证书)组合成在 --proxy-cert
参数中传递的单个文件。
注意
--custom-ca-cert
是--proxy-cert
的别名。 这两个参数可互换使用。 如果在同一命令中传递两个参数,将采用最后传递的那个参数。
验证群集连接
运行以下命令:
az connectedk8s list --resource-group AzureArcTest --output table
输出:
Name Location ResourceGroup
------------- ---------- ---------------
AzureArcTest1 chinaeast2 AzureArcTest
如需解决连接问题的帮助,请参阅诊断已启用 Azure Arc 的 Kubernetes 群集的连接问题。
注意
加入群集后,大约需要十分钟,群集元数据(例如群集版本和节点数)才会出现在 Azure 门户中已启用 Azure Arc 的 Kubernetes 资源的“概述”页上。
查看适用于 Kubernetes 的 Azure Arc 代理
已启用 Azure Arc 的 Kubernetes 会将几个代理部署到 azure-arc
命名空间中。
使用以下命令查看这些部署和 Pod:
kubectl get deployments,pods -n azure-arc
验证所有 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 资源、任何关联的配置资源以及在群集上运行的任何代理:
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 门户中的资源。
后续步骤
- 了解如何使用 GitOps with Flux v2 部署配置。
- 排查已启用 Azure Arc 的 Kubernetes 的常见问题。
- 使用 Azure Arc 快速入门体验已启用 Azure Arc 的 Kubernetes 自动化方案。