使用 Azure CLI 创建 Kubernetes 群集
适用于:Azure Stack HCI 版本 23H2
本文介绍如何使用 Azure CLI 在 Azure Stack HCI 中创建 Kubernetes 群集。 工作流如下:
- 使用 Azure CLI 在 Azure Stack HCI 23H2 中创建 Kubernetes 群集。 默认情况下,群集已连接 Azure Arc。
- 创建群集时,提供一个Microsoft Entra 组,其中包含具有 Kubernetes 群集管理员访问权限的 Microsoft Entra 用户列表。
- 使用 kubectl 和 Microsoft Entra ID 访问群集。
- 在该群集中运行一个包含 Web 前端和 Redis 实例的示例多容器应用程序。
开始之前
- 在开始之前,请确保本地基础结构管理员具有以下详细信息:
- Azure 订阅 ID - Azure Stack HCI 用于部署和注册的 Azure 订阅 ID。
- 自定义位置 ID - Azure 资源管理器自定义位置的 ID。 自定义位置是在 Azure Stack HCI 群集部署期间配置的。 基础结构管理员应提供自定义位置资源管理器 ID。 若要创建 Kubernetes 群集,需要此参数。 如果基础结构管理员提供自定义位置名称和资源组名称,还可以使用
az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv
获取资源管理器 ID。 - 网络 ID - 执行以下步骤创建的 Azure Stack HCI 逻辑网络的 Azure 资源管理器 ID。 管理员应提供逻辑网络的 ID。 若要创建 Kubernetes 群集,需要此参数。 如果知道在其中创建了逻辑网络的资源组,还可以使用
az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv
Azure 资源管理器 ID。
- 可以在本地开发计算机中运行本文中的步骤,在远程 Azure Stack HCI 部署中创建 Kubernetes 群集。 请确保开发计算机上具有最新版本的 Az CLI 。 还可以选择使用
az upgrade
升级 Az CLI 版本。 - 若要从任意位置连接到 Kubernetes 群集,请创建一个Microsoft Entra 组并向其添加成员。 Microsoft Entra 组中的所有成员都具有群集管理员访问权限。 请务必将自己添加为Microsoft Entra 组的成员。 如果不自行添加,则无法使用 kubectl 访问 Kubernetes 群集。 有关创建Microsoft Entra 组和添加用户的详细信息,请参阅 “管理Microsoft Entra 组和组成员身份。
- 在开发计算机上下载并安装 kubectl 。 借助 Kubernetes 命令行工具 kubectl,可以针对 Kubernetes 群集运行命令。 可以使用 kubectl 部署应用程序、检查和管理群集资源以及查看日志。
安装 Azure CLI 扩展
运行以下命令以安装所需的 Azure CLI 扩展:
az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade
创建 Kubernetes 群集
使用 az aksarc create
命令在 AKS Arc 中创建 Kubernetes 群集。在运行此命令之前,请确保登录到 Azure。 如果有多个 Azure 订阅,请使用 az account set 命令选择相应的订阅 ID。
az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0 --control-plane-ip $controlplaneIP
片刻之后,该命令将会完成,并返回有关群集的 JSON 格式信息。
注意
- SSH 密钥值是用于访问预配群集中的节点的公钥。 默认情况下,此键位于
~/.ssh/id_rsa.pub
. 可以在创建群集期间使用--ssh-key-value
参数指定其他位置。 --generate-ssh-keys
如果本地计算机上没有预先存在的 SSH 密钥,则需要此参数。 如果在创建群集期间不包含此参数,并且不存在 SSH 密钥,则会收到错误消息。- 如果本地计算机上已有 SSH 密钥,AKS 群集将重复使用该密钥。 在这种情况下,指定
--generate-ssh-keys
或省略该参数不起作用。
连接到 Kubernetes 群集
现在,可以通过从开发计算机运行 az connectedk8s proxy
命令连接到 Kubernetes 群集。 在运行此命令之前,请确保登录到 Azure。 如果有多个 Azure 订阅,请使用 az account set 命令选择相应的订阅 ID。
此命令将 Kubernetes 群集的 kubeconfig 下载到开发计算机,并将代理连接通道打开到本地 Kubernetes 群集。 只要命令运行,通道就处于打开状态。 请让此命令保持运行,直到你不再想要访问群集为止。 如果超时,请关闭 CLI 窗口,打开一个新的窗口,然后再次运行该命令。
必须对托管 Kubernetes 群集的资源组具有参与者权限才能成功运行以下命令:
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
预期输出:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.
使此会话保持运行状态,并从其他终端/命令提示符连接到 Kubernetes 群集。 通过运行 kubectl get 命令验证是否可以连接到 Kubernetes 群集。 此命令返回群集节点的列表:
kubectl get node -A --kubeconfig .\aks-arc-kube-config
以下输出示例显示了在前面的步骤中创建的节点。 确保节点状态为 Ready:
NAME STATUS ROLES AGE VERSION
moc-l0ttdmaioew Ready control-plane,master 34m v1.24.11
moc-ls38tngowsl Ready <none> 32m v1.24.11
部署应用程序
Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。
可以使用清单创建运行 Azure Vote 应用程序所需的所有对象。 此清单包含两个 Kubernetes 部署:
- 示例 Azure Vote Python 应用程序。
- 一个 Redis 实例。
还会创建两个 Kubernetes 服务 :
- Redis 实例的内部服务。
- 用于通过 Internet 访问 Azure Vote 应用程序的外部服务。
创建名为 azure-vote.yaml 的文件,并在以下清单中复制:
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: <path to image>/oss/bitnami/redis:6.0.8
env:
- name: ALLOW_EMPTY_PASSWORD
value: "yes"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
使用 kubectl apply 命令部署应用程序,并指定 YAML 的名称:
kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config
以下示例输出显示已成功创建了部署和服务:
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
测试应用程序
应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。
使用带参数的 kubectl get service 命令 --watch
监视进度。
kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config
azure-vote-front 服务的 EXTERNAL-IP 输出最初显示为 挂起。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
当 EXTERNAL-IP 地址从 挂起 更改为实际的公共 IP 地址后,使用 CTRL-C 停止 kubectl 监视过程。 以下示例输出显示向服务分配了有效的公共 IP 地址:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
若要查看 Azure Vote 应用的实际效果,请打开 Web 浏览器并转到服务的外部 IP 地址。
删除群集
az aksarc delete
运行以下命令以清理创建的群集:
az aksarc delete --resource-group $aksclustername --name $resource_group