在 Azure Kubernetes Service 中部署应用程序





5.00/5 (2投票s)
如何将应用程序部署到由 arm64-based 虚拟机支持的 Azure Kubernetes 集群。
本文面向读者?
本学习路径专为有兴趣学习如何将应用程序部署到由 arm64 虚拟机驱动的 Azure Kubernetes 集群的开发人员而设计。
您将学到什么?
完成本学习路径后,您将能够
- 使用 Azure Kubernetes 服务创建 Kubernetes 集群。
- 将容器化应用程序部署到 Azure Kubernetes 服务。
必备组件
开始之前,您需要准备以下内容
- Azure 订阅。使用此链接注册免费帐户:https://azure.microsoft.com/en-us/free/。
- 完成本系列的第一篇和第二篇学习路径:第一篇和第二篇。
为什么需要 Kubernetes?
容器化提供了一种绝佳的方式来打包您的应用程序及其所有必需的依赖项。这种方法使您的应用程序具有可移植性。但是,您仍然需要运行、管理和监控正在运行的容器。在实践中,容器可能会变得无响应或失败。在这种情况下,您需要手动重新启动它们。此外,您通常使用容器来启动同一应用程序或服务的多个实例以平衡负载。运行许多容器并行运行需要您在多个物理或虚拟计算机上调度容器。此外,您还需要将传入流量分发到底层容器。
这就是 Kubernetes 发挥作用的地方。具体来说,Kubernetes 的创建是为了帮助自动化许多您本需要手动执行的任务,例如重新启动失败的容器、在不同计算机上调度它们以及负载均衡。
Kubernetes 最初是在 Google 创建的,基于其在多台计算机上运行分布式、容器化工作负载的经验。Kubernetes 被迅速认可为一个方便的工具。由于它是开源的,云提供商也提供托管的 Kubernetes 服务,这可以帮助您相对轻松地使用此技术来管理您的容器化工作负载。
在顶层,Kubernetes 集群由控制平面和计算节点组成。控制平面对集群做出全局决策(例如调度容器),而计算节点是物理或虚拟计算机。这些计算机配备了容器运行时(如 Docker),这是运行容器所必需的。
在本学习路径中,您将学习如何在 Azure 中创建 Kubernetes 集群。该集群将使用 arm64 驱动的虚拟机作为计算节点。然后,您将把容器化后的 People.WebApp
部署到此集群。
目标
您将在 Azure 中创建托管的 Kubernetes 集群,该集群已与 Azure 容器注册表集成。该集群将使用 arm64 VM 作为节点。本教程展示了如何手动创建集群。可选地,您可以使用基于 Terraform 的部署,如下文所述:https://learn.arm.com/learning-paths/servers-and-cloud-computing/aks/cluster_deployment/。
创建 Kubernetes 集群
登录到 Azure 门户,然后在搜索框中键入 **Kubernetes**。然后,查找 Kubernetes 服务
这将打开 Kubernetes 服务,单击 **+ 创建**,然后选择创建 Kubernetes 集群
上一步将激活“创建 Kubernetes 集群”向导,您可以使用该向导按如下方式配置您的集群
- 订阅:**选择您的订阅**
- 资源组:**rg-arm64**
- 集群预设配置:**开发/测试**
- Kubernetes 集群名称:**aks-people**
- 区域:**美国东部**(或任何其他区域)
- 可用性区域:**选择所有(如果可用)**。否则,请保留默认设置。
- AKS 定价层:**免费**
- Kubernetes 版本:**默认**(此处为 1.26.6)
- 自动升级:**启用补丁(推荐)**
- 身份验证和授权:**本地帐户与 Kubernetes RBAC**
此时,您的配置应如下所示
单击 **下一步:节点池 >**。这将打开 **节点池** 选项卡。在 **节点池** 选项卡下,单击代理池的 **节点大小** 列下的 **标准 DS2_v2 (更改)** 超链接
您将看到“更新节点池”向导,您在此处执行以下操作
- 在“缩放方法”下,选择 **手动**。
- 将节点数设置为 **1**。
- 在“节点大小”下单击 **选择大小**。
- 这将打开“选择 VM 大小”屏幕,您可以在其中查找 **D2pds_v5 VM**(您在本学习系列第一部分中使用的 arm64 驱动的 VM)。
- 单击 **选择** 按钮。
您的 **更新节点池** 向导应如下所示
单击 **更新** 按钮。这将带您回到“创建 Kubernetes 集群”向导,然后单击 **下一步:网络 >** 按钮。在 **网络** 选项卡下,向下滚动到网络策略并选择 **无**。然后单击 **下一步:集成 >** 按钮。
在“集成”下,查找容器注册表并选择 **people**(或您的 Azure 容器注册表,如果您使用了不同的名称)
最后,单击 **查看 + 创建** 按钮,等待验证完成。然后,单击 **创建** 按钮
等待片刻以部署集群,然后在确认屏幕中单击 **转到资源** 按钮。
目标
您刚刚在 Microsoft Azure 中创建了 Kubernetes 集群。该集群使用 arm64 驱动的虚拟机作为计算节点。您现在将使用 Azure Cloud Shell 连接到此集群。
连接到集群
要连接到集群,请按以下步骤操作
- 打开 Cloud Shell(有关详细说明,请参阅本学习路径的第二部分)
- 在 Cloud Shell 中,键入
az aks get-credentials -g rg-arm64 -n aks-people
您应该会看到此命令的以下输出
从现在开始,您可以使用 kubectl
管理集群。此工具提供用于控制 Kubernetes 控制平面的命令行界面。此通信通过 REST API 进行。因此,在底层,kubectl
需要知道控制平面的 API 服务器地址。幸运的是,我们不需要显式使用此地址。我们之前使用的 az aks get-credentials
命令已自动为我们配置了此信息。因此,kubectl
命令将与我们创建的集群进行通信。
注意
从这一点开始,您可以使用任何 kubectl
命令,并遵循许多 Kubernetes 教程。
例如,让我们通过键入以下命令显示节点列表
kubectl get nodes
此命令的输出将如下所示
我们有一个节点,现在将使用它来部署应用程序。
目标
现在,您将把容器化应用程序部署到 Azure 中运行的 Kubernetes 集群。
部署应用程序
要将应用程序部署到 Kubernetes 集群,您通常使用包含工作负载声明的 YAML 文件。要部署应用程序,我们将使用包含两个对象的声明:部署和服务。部署将创建特定数量的 Kubernetes pod。这些是 Kubernetes 中最小的可部署单元。单个 pod 包括一个或多个共享卷和网络功能的容器。因此,部署的声明包含以下元素:
- 用于启动容器的容器映像
- 容器实例的数量(容器副本)
- 容器侦听传入请求的端口
为了将 pod 暴露给其他服务和 Internet,我们将使用 Load Balancer 类型的 Service。在底层,Kubernetes 将从 Azure 请求一个公共 IP。我们将使用此 IP 来访问我们的应用程序。
现在,让我们使用此声明将我们的 People.WebApp
部署到 Azure Kubernetes 集群。为此,我们按以下步骤操作
-
打开 Cloud Shell。
-
通过键入以下命令下载声明文件
wget https://raw.githubusercontent.com/dawidborycki/People.WebApp.Declarations/main/Kubernetes/people_aks.yml
- 要编辑文件,请键入
code people_aks.yaml
- 这将打开 Azure 中的代码/文本编辑器
-
检查第 17 行。在我们的例子中,它指向完全限定的容器映像名称 **image: people.azurecr.io/people.webapp:v1**。这包括容器注册表登录服务器、映像名称和映像标签。登录服务器与我们在本学习路径系列的第二部分中创建的相同。如果您为容器注册表或容器名称使用了不同的名称,请相应地更新第 17 行。然后保存到同一个文件 people_aks.yml 的更改(Ctrl+S),并关闭编辑器(Ctrl+Q)。
-
要部署工作负载,请在 Cloud Shell 中键入以下命令
kubectl apply -f people_aks.yml
部署工作负载需要片刻时间。然后,使用以下命令显示 pod 列表
kubectl get pods
确保每个 pod 的状态都是正在运行。然后键入
kubectl get svc
这将显示服务列表,如下所示
注意 **people-web-appsvc** 的 **EXTERNAL-IP** 列下的 IP 地址。这就是您可以找到应用程序的公共 IP。在我的例子中,它是 **4.156.88.80**。通过在 Web 浏览器中键入此 IP,您将看到一个正在运行的应用程序
清理
要删除我们为本教程部署的所有云资源,请打开 Cloud Shell,然后键入以下命令
az group delete -n rg-arm64 --yes --no-wait
摘要
本教程向您展示了如何使用 arm64 驱动的 VM 创建 Azure Kubernetes 集群。然后,您学习了如何将容器化应用程序部署到该集群。最后,您使用 LoadBalancer
服务将应用程序暴露给 Internet。在此过程中,您看到了如何使用 Cloud Shell 内置的代码编辑器来修改 Kubernetes 工作负载声明文件。
想继续学习?请访问 learn.arm.com,查找更多旨在帮助您更快地开发高质量 Arm 软件的教程。