目录
前言
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用(就像canary deployments)。
AKS改善K8S运维体验
Azure Kubernetes Service (AKS)
Azure Kubernetes 服务 (AKS) 管理托管的 Kubernetes 环境,使用户无需具备容器业务流程专业知识即可快速、轻松地部署和管理容器化的应用程序。 它还通过按需预配、升级和缩放资源,消除了正在进行的操作和维护的负担,而无需使应用程序脱机。
Kubernetes 群集体系结构
Kubernetes 群集分为两个组件:
- 控制平面节点提供Kubernetes 核心服务和应用程序工作负载的业务流程 。
- 节点运行应用程序工作负荷。
控制面板
创建 AKS 群集时,系统会自动创建和配置控制平面。 并将此控制平面作为提取自用户的 Azure 托管资源提供。 控制平面不产生费用,仅属于 AKS 群集的节点产生费用。
控制平面包括以下 Kubernetes 核心组件:
- kube-apiserver – API 服务器,用于公开基础 Kubernetes API。 此组件为管理工具(如 kubectl 或 Kubernetes 仪表板)提供交互。
- etcd – 可维护 Kubernetes 群集和配置的状态,高可用性 etcd 是 Kubernetes 中的键值存储 。
- kube-scheduler – 创建或缩放应用程序时,计划程序可确定哪些节点可以运行工作负荷并启动这些节点。
- kube-controller-manager – 控制器管理器可监视许多较小的控制器,这些控制器执行 Pod 复制和节点处理等操作。
AKS 提供单租户控制平面、专用 API 服务器、计划程序等。你定义节点的数量和大小,Azure 平台配置控制平面和节点之间的安全通信。 通过 Kubernetes API(例如 kubectl 或 Kubernetes 仪表板)与控制平面进行交互。
这种托管控制平面意味着无需配置高可用性 etcd 存储等组件,但也意味着无法直接访问控制平面 。 通过 Azure CLI 或 Azure 门户安排 Kubernetes 升级,先升级控制平面,再升级节点。 要解决可能出现的问题,可以通过 Azure Monitor 日志查看控制平面日志。
如果需要以特定方式配置控制平面或直接访问它,可以使用 aks-engine 部署自己的 Kubernetes 群集。
节点和节点池
要运行应用程序和支持服务,需要 Kubernetes 节点 。 一个 AKS 群集有一个或多个节点,这是运行 Kubernetes 节点组件和容器运行时的 Azure 虚拟机 (VM):
kubelet 是 Kubernetes 代理,用于处理来自控制平面的业务流程请求并计划运行请求的容器。
虚拟网络由每个节点上的 kube-proxy 处理 。 代理路由流量并管理服务和 Pod 的 IP 地址。
容器运行时是允许容器化应用程序运行并与其他资源(如虚拟网络和存储)进行交互的组件。 在 AKS 中,Moby 用作容器运行时。
最佳实践
若要在 Azure Kubernetes 服务 (AKS) 中成功地生成并运行应用程序,需要了解并实施一些关键的注意事项。 此方面的内容包括多租户和计划程序功能、群集和 Pod 安全性,或者业务连续性和灾难恢复。 以下最佳做法已分组,目的是帮助群集操作员和开发人员了解每个方面的注意事项,并实现相应的功能。
群集操作员最佳做法
作为群集操作员,需要与应用程序所有者和开发人员一起协作,了解他们的需求, 然后就可以根据以下最佳做法来按需配置 AKS 群集。
多租户
- 群集隔离的最佳做法
- 包括可与命名空间配合使用的多租户核心组件和逻辑隔离。
- 有关基本计划程序功能的最佳做法
- 包括资源配额和 Pod 中断预算。
- 有关高级计划程序功能的最佳做法
- 包括使用排斥 (taint) 和容许 (toleration)、节点选择器和关联,以及 pod 间关联与反关联。
- 身份验证和授权的最佳做法
- 包括与 Azure Active Directory 集成、使用基于角色的访问控制 (RBAC),以及 Pod 标识。
安全性
- 有关群集安全性和升级的最佳做法
- 包括保护对 API 服务器的访问、限制容器访问权限,以及管理升级和节点重启。
- 容器映像管理和安全性的最佳做法
- 包括保护映像和运行时以及在更新基础映像时自动生成。
- Pod 安全性的最佳做法
- 包括保护对资源的访问、限制凭据公开,以及使用 Pod 标识和数字密钥保管库。
网络和存储
- 网络连接的最佳做法
- 包括使用不同的网络模型、使用入口和 Web 应用程序防火墙 (WAF),以及保护节点 SSH 访问。
- 存储和备份的最佳做法
- 包括选择适当的存储类型和节点大小、动态预配卷,以及数据备份。
运行企业就绪型工作负荷
- 业务连续性和灾难恢复的最佳做法
- 包括使用区域对、通过 Azure 流量管理器管理多个群集,以及对容器映像进行异地复制。
开发人员最佳做法
作为开发人员或应用程序所有者,你可以简化开发体验并定义必要的应用程序性能需求。
- 应用程序开发人员资源管理最佳做法
- 包括定义 Pod 资源请求和限制、配置开发工具,以及检查应用程序问题。
- Pod 安全性的最佳做法
- 包括保护对资源的访问、限制凭据公开,以及使用 Pod 标识和数字密钥保管库。
Azure Kubernetes 服务 (AKS) 中的配额、虚拟机大小限制和适用地区
所有 Azure 服务都设置针对资源和功能的默认限制和配额。 某些虚拟机 (VM) SKU 也被限制使用。
本文详述了 Azure Kubernetes 服务 (AKS) 资源的默认资源限制,以及 Azure 区域中 AKS 的可用性。
Resource | 默认限制 |
每个订阅的最大群集数 | 100 |
每个群集的最大节点数 | 100 |
每个节点的最大 Pod 数:带 Kubenet 的基本网络 | 110 |
每个节点的最大 Pod 数:通过 Azure 容器联网界面进行高级联网 | Azure CLI 部署:301 Azure 资源管理器模板:301 门户部署:30 |
受限制的 VM 大小
AKS 群集中的每个节点都包含固定数量的计算资源,例如 vCPU 和内存。 如果某个 AKS 节点包含的计算资源不足,则 Pod 可能无法正常运行。 若要确保所需的 kube-system Pod 和你的应用程序能够可靠地调度,请勿在 AKS 中使用以下 VM SKU:
Standard_A0
Standard_A1
Standard_A1_v2
Standard_B1s
Standard_B1ms
Standard_F1
Standard_F1s
容器技术优势分析
快速部署:
使用容器能够利用镜像快速部署运行服务,能够实现业务的快速交付,缩短业务的上线周期,极大地方便运维人员的上线部署工作。
弹性伸缩:
使用容器技术,当遇到高并发、高流量的大活动,容器做到根据业务的负载进行弹性扩容,以提供更好的服务。当访问量降低后,容器平台能够自动缩容,及时释放空闲资源。
可移植性:
容器可以运行于Linux、Unix、Window的操作系统之上,可以利用容器将服务移植到不同的操作系统环境下运行。
轻量:
相比传统虚拟机,容器更加轻量,资源消耗更低,镜像体积更小。
高可用:
容器运行的业务通常由一组容器来提供服务,容器平台的服务发现功能可以保证容器实例的副本数量即使在某个主机宕机的情况下也能维持不变。保证服务能够正常提供服务。
资源利用率高:
容器较传统虚拟化有更低资源使用粒度,在一台物理机上可运行上百个容器服务,从而提高服务器硬件资源的利用率。
快速构建开发环境:
开发应用除去自身编码工作之外,还需要额外的数据库、缓存或消息队列等组件在本地进行测试,使用容器技术可以快速完成构建,省去了设备申请、采购的流程,简化了开发者组件安装工作,提高了开发效率。
提供一致性的开发环境:
采用容器镜像技术,只需要一次构建就可以实现在不同的项目成员之间快速复制出一套完全一致的开发环境,从而消除因环境异构而导致的不一致性,降低软件缺陷出现的概率。 同时,在开发环境和测试环境中使用同样的镜像,也能保证开发和测试环境的一致性,提前发现软件缺陷,减少对因环境不一致而导致的缺陷的调查成本。
方便开发环境版本管理:
通过对应用程序镜像的版本化管理,可以实现同一套应用程序的多版本共存,尤其是存在对某些组件多版本支持的情况下,通过容器技术,可以轻松支持该组件的多个版本。 对应用程序容器的版本化,在应用程序本身存在多版本的情况下,开发者还能在快速进行版本回溯,提高问题调查和缺陷修复的效率;在发布失败时,也能快速回滚。
Azure Kubernetes Service应用场景
使用 Kubernetes 将现有的应用程序迁移到云中、生成使用机器学习的复杂应用程序或利用微服务体系结构提供的敏捷性。
概述
轻松地将现有应用程序迁移到容器,并在 Azure 托管 Kubernetes 服务 (AKS) 中运行。通过与 Azure Active Directory 集成控制访问,并使用 OSBA (Open Service Broker for Azure) 访问提供 SLA 保障的 Azure 服务(如 Azure Database for MySQL)来满足数据需求。
流
1 用户可将现有应用程序转换为容器,还可将容器映像发布到 Azure 容器注册表
2 借助 Azure 门户或命令行,用户可将容器部署到 AKS 群集
3 Azure Active Directory 用于控制对 AKS 资源的访问
4 使用 OSBA (Open Service Broker for Azure) 轻松访问提供 SLA 保障的 Azure 服务,例如 Azure Database for MySQL
5 或者,可使用 VNET 虚拟网络来部署 AKS
概述
使用 AKS 简化基于微服务的体系结构的部署和管理。AKS 简化了水平缩放、自我修复、负载均衡、机密管理。
流
1 开发人员使用 IDE(如 Visual Studio)将更改提交到 GitHub
2 GitHub 在 Azure DevOps 上触发新生成
3 Azure DevOps 将微服务打包为容器,并将这些容器推送到 Azure 容器注册表
4 容器部署到 AKS 群集中
5 用户通过应用和网站访问服务
6 Azure Active Directory 用于保护对资源的访问
7 微服务使用数据库来存储和检索信息
8 管理员通过单独的管理门户进行访问
概述
DevOps 与 Kubernetes 相得益彰。在 Azure 上同时实现安全的 DevOps 与 Kubernetes,可达到速度与安全性之间的最佳平衡,并能够快速交付大规模的代码。利用动态策略控件为使用 CI/CD 的开发过程提供保护,并使用持续监视来缩短反馈周期。使用 Azure Pipelines 实现快速交付,同时利用 Azure Policy 确保关键策略的实施。Azure 使用户能够实时监察生成和发布管道的情况,并能轻松应用合规性审核和重新进行配置。
流
1 开发人员可在同一个 Kubernetes 群集中快速循环访问、测试和调试 应用程序的不同部分
2 代码合并到 GitHub 存储库中,之后由 Azure Pipelines 运行 自动生成和测试
3 在 Azure 容器注册表注册容器映像
4 Kubernetes 群集使用 Terraform 等工具进行预配; Terraform 安装的 Helm 图表定义了所需的应用资源和配置的状态
5 开发人员实施策略以管理 AKS 群集的部署
6 每次代码更改时,发布管道都会自动执行预定义的 部署策略
7 使用 Azure Policy 将策略实施和审核添加到 CI/CD 管道
8 使用 Azure Monitor 获取应用遥测、容器运行状况监视和 实时日志分析
9 见解用于解决问题并提供给下一个冲刺 (sprint) 计划
概述
使用 AKS 虚拟节点在 ACI 内部预配在几秒内启动的 Pod。这使 AKS 的运行容量能达到平均工作负载的要去。由于 AKS 群集中的容量不足,请在 ACI 中扩展额外的 Pod,但无需管理任何其他服务器。
流
1 用户在 Azure 容器注册表中注册容器
2 从 Azure 容器注册表中拉取容器映像
3 AKS 虚拟节点是一种虚拟 Kubelet 实现,可在流量达到峰值时通过 AKS 在 ACI 内部预配 Pod。
4 AKS 和 ACI 容器向共享数据存储写入内容
概述
IoT 方案可能涉及成百上千台 IoT 设备。AKS 可为在云中或本地运行的 IoT 解决方案按需提供可缩放的计算资源。
流
1 用户使用 Helm Chart 启动 AKS 部署
2 IoT Edge 连接器虚拟节点通过 IoT 中心部署到 Edge 设备。
3 在 Edge 设备上更新部署
概述
使用大型数据集培训模型是一项复杂的资源密集型任务。使用熟悉的工具(如 TensorFlow 和 Kubeflow)简化机器学习模型的培训。ML 模型将在支持 GPU 的 VM 支持的 AKS 群集中运行。
流
1 将 ML 模型打包到容器,并发布到 ACR
2 Azure Blob 存储承载正在训练的数据集和已训练的模型
3 使用 Kubeflow 将训练作业部署到 AKS,分布到 AKS 的训练作业包括参数服务器和 Worker 节点
4 使用 Kubeflow 为生产模型提供服务,在测试、控制和生产环节打造一致的环境
5 AKS 支持启用 GPU 的 VM
6 开发人员可构建查询 AKS 群集中运行的模型的功能
概述
使用 AKS 轻松引入并处理实时数据流,其中包含数百万个通过传感器收集的数据点。执行快速分析和计算,以快速形成对复杂场景的见解。
流
1 传感器数据已生成并流式传输到 Azure API 管理。
2 AKS 群集运行部署为服务网格之后的容器的微服务。容器是使用 DevOps 流程构建的,并存储在 Azure 容器注册表中。
3 引入服务将数据存储在 Azure Cosmos DB 中
4 分析服务以异步方式接收数据并将其流式传输到 Apache Kafka 和 Azure HDInsight。
5 数据科学家可以使用 Splunk 分析用于机器学习模型的大型数据。
6 数据由处理服务处理,该服务将结果存储在 Azure Database for PostgreSQL 中,并将数据缓存在 Azure Redis 缓存中。
7 Azure 应用服务中运行的 Web 应用可用于直观显示结果。
容器服务在行业客户中落地要素
容器服务在企业中的落地在普及中,企业对于容器服务的接受度在提升。容器服务在行业客户中落地的有四大要素:
价值
容器服务在企业中落地最终要体现价值,因为只有能够为企业带来价值,企业才有足够的动力去推动。
生态
容器服务在企业中普及开来,围绕容器服务的生态构建是关键。特别是传统行业用户,它们的业务应用大部分是传统应用,如何让容器服务适配这些应用是未来落地的重要因素。
技术成熟度
器服务的技术成熟度也是未来发展的一个关键,容器服务能否在支撑企业应用方面替代目前虚拟化的位置。目前我们看到容器服务的应用场景大部分还是集中于CI/CD(持续集成和持续开发)、轻量级的PaaS平台。不过容器服务在拓展更多应用场景,比如灾备双活、离线大数据计算等。
解决的问题
使用容器服务的主要目的是解决成本和效率问题。企业的IT管理层往往困扰于IT资产的巨额浪费,而IT执行层则受困于低效的发布和交付流程。容器服务给这些问题的解决提供了契机。