在 Azure Kubernetes 服务群集上部署应用程序
你的公司正在寻找方法来部署基于云的视频呈现服务。 你已选择将 Azure Kubernetes 服务 (AKS) 作为云原生开发平台。 配置群集后,就可以在视频呈现应用程序中部署其中一个组件了。 你决定部署公司网站的静态版本,以探索 Kubernetes 部署过程。
在讨论 Kubernetes 的部署方式之前,我们先来回顾一下将类似应用程序部署到非 Kubernetes 环境所需执行的一些步骤。
假设使用 Azure 虚拟机 (VM) 作为目标平台。 第一步是准备服务器软件以托管应用程序。 你将:
- 安装操作系统。
- 确保将 OS 更新到最新的安全和软件修补程序。
- 安装和配置 Web 服务器软件。
- 部署 Web 应用程序。
如果决定扩展网站以应对客户增加的需求,请对每个新 VM 重复此过程。
一种替代方法是在基于容器的平台(如 Azure 容器实例)上运行网站。 无需担心基本服务器技术,但必须配置和管理多个容器才能手动使用此策略。
Kubernetes 和 AKS 可帮助编排容器。 使用 Kubernetes 容器编排功能可以轻松管理群集上的工作负载。 使用从容器映像构建的容器部署工作负载,以在 AKS 群集中运行应用程序。
本文将介绍如何在 AKS 群集中创建工作负载。
什么是容器注册表?
使用容器注册表可将容器映像安全存储在云中,以供以后部署使用。 可以将容器注册表视为存储多个版本的容器映像的存档文件。 每个存储的映像都分配有用于识别的标记。
例如,你可能具有 contoso-website:latest
映像,它是映像的另一个版本,带有 contoso-website:v1.0.0
标记。
容器注册表可以是公共的,也可以是专用的。 专用注册表需要凭据才能访问和下载映像,这是存储容器映像时要遵循的策略。
Kubernetes 仅允许部署容器注册表中托管的映像。 创建专用容器注册表通常是标准 AKS 部署策略的一部分。
什么是 Kubernetes Pod?
Kubernetes Pod 将容器和应用程序分组为逻辑结构。 这些 Pod 不具智能,由一个或多个应用程序容器组成。 每个应用程序容器都有一个 IP 地址以及多个网络规则和公开的端口。
例如,如果要搜索与 contoso-website
相关的所有工作负载,则将在群集中查询标签为 app
且值为 contoso-website
的 Pod。
什么是 Kubernetes 部署?
Kubernetes 部署由 Pod 演变而来。 部署将 Pod 包装到一个智能对象中,使它们可以横向扩展。无需配置复杂的网络规则,即可轻松地复制和缩放应用程序以支持更多负载。
部署使用户只需更改映像标记即可更新应用程序,而无需任何停机时间。 更新部署时,部署不会删除所有应用,而是逐个关闭在线应用, 然后将它们替换为最新版本。 从这个方面来说,任何部署都可以在其内部更新 Pod,而不会明显影响可用性。
Kubernetes 清单文件
使用 Kubernetes 清单文件,可以以声明方式描述 YAML 格式的工作负载,并简化 Kubernetes 对象管理。
假设必须手动部署工作负载。 你需要考虑和管理几个方面。 需要创建一个容器,选择特定的节点,将节点包装在 Pod 中,运行 Pod,监视执行情况等。
清单文件包含创建和管理所述工作负载必需的全部信息。
什么是 Kubernetes 标签?
使用 Kubernetes 标签可对 Kubernetes 对象进行逻辑分组。 这些标签使系统可以查询群集中与具有特定名称的标签匹配的对象。
清单文件的结构
清单文件的结构因所创建的资源类型而异。 但是,清单文件共享通用说明。 这些说明定义了各个方面,例如要使用的 API 和要创建的工作负载类型。
所有清单文件中的前两个条目都包含两个重要的项:apiVersion
和 kind
。 下面是部署文件的一个示例。
apiVersion: apps/v1 # Where in the API it resides
kind: Deployment # The kind of workload we're creating
apiVersion
项定义用于管理要部署的对象的 API 服务器端点。
kind
项定义此部署创建的工作负载。
所有文件的其他常见项是 metadata
和 name
项。 所有 Kubernetes 资源都必须具有一个名称。 此名称将在 metadata
密钥中。
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website # This will be the name of the deployment
对部署中的对象进行分组
部署利用 label
来查找 Pod 并对其进行分组。 将标签定义为部署清单文件的一部分。
下面是一个示例。 请注意添加到 spec
定义中的 selector
定义中定义的 matchLabels
值。
# deployment.yaml
# ...
spec:
selector:
matchLabels:
app: contoso-website
# ...
从现在开始,所有文件根据要 Kubernetes 创建的资源类型而具有不同的结构。
应用部署文件
使用 kubectl
部署 Kubernetes 部署清单文件。 下面是该命令的示例。
kubectl apply -f ./deployment.yaml