1.Kubernetes —— Pod 自动水平伸缩源码剖析(上)
2.初级Kubernetes技术如何学习?
3.vivo 容器平台资源运营实践
Kubernetes —— Pod 自动水平伸缩源码剖析(上)
ReplicaSet 控制器负责维持指定数量的 Pod 实例正常运行,这个数量通常由声明的工作负载资源对象如 Deployment 中的.spec.replicas字段定义。手动伸缩适用于对应用程序进行预调整,如在电商促销活动前对应用进行扩容,活动结束后缩容。然而,棋牌源码网盘这种方式不适合动态变化的应用负载。
Kubernetes 提供了 Pod 自动水平伸缩(HorizontalPodAutoscaler,简称HPA)能力,允许定义动态应用容量,容量可根据负载情况变化。例如,当 Pod 的平均 CPU 使用率达到 %,且最大 Pod 运行数不超过 个时,HPA 会触发水平扩展。
HPA 控制器负责维持资源状态与期望状态一致,访客 源码即使出现错误也会继续处理,直至状态一致,称为调协。控制器依赖 MetricsClient 获取监控数据,包括 Pod 的 CPU 和内存使用情况等。
MetricsClient 接口定义了获取不同度量指标类别的监控数据的能力。实现 MetricsClient 的客户端分别用于集成 API 组 metrics.k8s.io,处理集群内置度量指标,自定义度量指标和集群外部度量指标。
HPA 控制器创建并运行,依赖 Scale 对象客户端、HorizontalPodAutoscalersGetter、Metrics 客户端、HPA Informer 和 Pod Informer 等组件。Pod 副本数计算器根据度量指标监控数据和 HPA 的gated源码理想资源使用率,决策 Pod 副本容量的伸缩。
此篇介绍了 HPA 的基本概念和相关组件的创建过程,后续文章将深入探讨 HPA 控制器的调协逻辑。感谢阅读,欢迎指正。
初级Kubernetes技术如何学习?
一、初级
1. 了解Kubernetes 基础架构与核心组件功能
2. 了解Docker基本概念和用法
3. 理解Docker与Kubernetes的基本关系
4. 能够安装、部署与配置 Kubernetes 集群
5. 熟练使用 kubectl 命令操作各种 Kubernetes 资源对象,了解基本概念和使用方法
6. 能够在 Kubernetes 上部署、运行、管理工作负载并了解其调度算法
7. 能够使用 Service、Ingress 等访问工作负载
8. 深入理解Pod相关的配置及使用
9. 了解Kubernetes生态相关工具及其作用
二、中级
1. 理解Kubernetes的资源管理,资源分配、优先级、coq源码QoS等
2. 能够使用 Flannel、Calico、Macvlan 等常用 CNI 插件配置集群网络
3. 能够排查 Kubernetes 集群系统组件、网络、日志、监控告警与存储的故障
4. 能够使用 EFK 搭建容器日志系统
5. 能够使用 Prometheus、AlertManager 等搭建容器监控告警系统
6. 能够配置应用使用持久性存储并了解 Ceph、NFS、GlusterFS 等常见存储工作原理
7. 应用生命周期管理
8. 理解Kubernetes容器调度的基本流程和使用方法
9. Kubernetes集群日常维护
. 理解并使用Kubernetes的用户认证及授权体系(RBAC)
. 理解弹性伸缩(HPA)的基本原理
三、高级
1. 理解Kubernets核心组件的工作原理,并能够进行问题定位及提供解决方案
2. 掌握Kubernetes的admission 控制器,audit,镜像gc,Pod驱赶行为等相关工作原理
3. 可以扩展和定制Kubernetes调度器
4. 能够用 Operator/CRD 对 Kubernetes 作定制化开发
5. 理解 Kubernetes 多可用区/多集群管理模式
6. 灵活掌握Kubernetes的扩展机制,可以按需定制,11010111源码包括CNI、CSI、Ingress、自定义控制器等扩展定制
7. 可以解决日志、监控等核心组件的问题定位以及进行性能调优
四、专家
1. 能够对 Kubernetes 集群、操作系统、镜像、应用做安全加固
2. 能够排查 Linux 内核、Docker 容器运行时故障
3. 能够基于 Kubernetes、Jenkins等工具构建云原生DevOps方案
4. 理解Kubernetes生态主要工具的作用及优缺点,可以在不同场景下灵活运用相关工具并确定最 佳实施方案
5. 具备对大规模集群支持的相关经验,包括架构设计、性能调优等稳定性保障
6. 理解Kubernetes社区运作模式,能够为社区提供PR
7. 理解Kubernetes各组件源代码,并能排查、分析相关问题
作为国内领 先的全栈云原生技术服务提供商,时速云特别推出了Kubernetes培训课程,对于刚接触Kubernetes技术、企业计划使用容器及Kubernetes集群、以及计划考取CKA证书的人群会是一个不错的选择。
vivo 容器平台资源运营实践
vivo互联网服务器团队的Chen Han分享了针对业务资源申请值偏大的运营问题,通过实施静态超卖和动态超卖两种技术方案,以实现业务资源申请值的合理化,提高平台资源装箱率和资源利用率。具体分析如下:
容器平台在Kubernetes技术的基础上提供内部业务的容器服务,内部业务在CICD平台中部署和管理容器资源,通过caas-openapi组件实现与CICD的交互。平台资源分为测试池、共享池、专有池、混部池等逻辑层面。
业务在部署时要求设置资源请求值request和最大值limit,其中request在调度时更为重要,而limit在运行时更为关键。然而,实际使用中,业务在共享池中设置request值时,常见两种情况:一是请求值过低,导致资源浪费,加剧节点热点问题;二是请求值过高,导致账单成本增加,重调度时资源分配困难,影响平台资源利用率。
为了解决资源规格设置不合理的现状,提出了静态超卖方案和动态超卖方案。静态超卖方案通过caas-openapi组件自动调整request值,根据平台运营经验设置不同系数,实现首次部署时的资源申请值调整。动态超卖方案则通过开发caas-recommender组件,基于业务监控数据的真实资源使用情况,动态调整request值,实现资源的高效利用。
动态超卖方案进一步细化为半衰期滑动窗口模型和指数直方图计算推荐值。半衰期滑动窗口模型能够根据数据时效性动态调整权重,满足实时性需求。指数直方图计算推荐值,通过收集容器资源使用数据,构建直方图并计算出推荐的资源值,以实现资源的精细化管理。
为了确保资源超卖功能与HPA自动扩缩容功能兼容,平台修改了kube-controller-manager源码,实现了基于limit维度的利用率计算逻辑。同时,考虑到专有池的特殊性,平台允许用户根据需求选择是否开启超卖能力。
实施上述方案后,测试集群和生产集群均取得了显著效果。测试集群内存装箱率降低%,共享池生产集群CPU利用率提升8%,有效缓解了资源瓶颈问题,降低了业务成本,提高了资源利用率。
展望未来,vivo容器平台将继续探索资源超卖方案的优化,包括内存资源超卖的实施、更多维度资源的纳管、以及基于动态超卖推荐值的用户画像构建,以实现更高效、更智能的资源调度与管理。