云原生应用 Kubernetes 监控与弹性实践

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 前言   云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider、CRD Controller、Operator等等的方式从Kubernetes的标准接口向业务层透出。

前言  

1

云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider、CRD Controller、Operator等等的方式从Kubernetes的标准接口向业务层透出。开发者可以基于Kubernetes来构建自己的云原生应用与平台,Kubernetes成为了构建平台的平台。今天我们会向大家介绍一个云原生应用该如何在Kubernetes中无缝集成监控和弹性能力。

本文整理自由阿里云容器平台技术专家 刘中巍(莫源)在 KubeCon 分享的《Cloud Native Application monitoring and autoscaling in kubernetes》演讲。获取 KubeCon 全部阿里演讲PPT,关注阿里巴巴云原生公众号,微信菜单栏点击 PPT下的“获取PPT”

阿里云容器服务Kubernetes的监控总览

2

云服务集成  

阿里云容器服务Kubernetes目前已经和四款监控云服务进行了打通,分别是SLS(日志服务)、ARMS(应用性能监控)、AHAS(架构感知监控服务)、Cloud Monitor(云监控)。

SLS主要负责日志的采集、分析。在阿里云容器服务Kubernetes中,SLS可以采集三种不同类型的日志

  • APIServer等核心组件的日志
  • Service Mesh/Ingress等接入层的日志
  • 应用的标准日志  

除了采集日志的标准链路外,SLS还提供了上层的日志分析能力,默认提供了基于APIServer的审计分析能力、接入层的可观测性展现、应用层的日志分析。在阿里云容器服务Kubernetes中,日志组件已经默认安装,开发者只需要通过在集群创建时勾选即可。
3

ARMS主要负责采集、分析、展现应用的性能指标。目前主要支持Java与PHP两种语言的集成,可以采集虚拟机(JVM)层的指标,例如GC的次数、应用的慢SQL、调用栈等等。对于后期性能调优可以起到非常重要的作用。
4

AHAS是架构感知监控,通常在Kubernetes集群中负载的类型大部分为微服务,微服务的调用拓扑也会比较复杂,因此当集群的网络链路出现问题时,如何快速定位问题、发现问题、诊断问题则成为了最大的难题。AHAS通过网络的流量和走向,将集群的拓扑进行展现,提供更高层次的问题诊断方式。
5

开源方案集成

开源方案的兼容和集成也是阿里云容器服务Kubernetes监控能力的一部分。主要包含如下两个部分:

Kubernetes内置监控组件的增强与集成  

在kubernetes社区中,heapster/metrics-server是内置的监控方案,而且例如Dashboard、HPA等核心组件会依赖于这些内置监控能力提供的metrics。由于Kubernetes生态中组件的发布周期和Kubernetes的release不一定保证完整的同步,这就造成了部分监控能力的消费者在Kubernetes中存在监控问题。因此阿里云就这个问题做了metrics-server的增强,实现版本的兼容。此外针对节点的诊断能力,阿里云容器服务增强了NPD的覆盖场景,支持了FD文件句柄的监测、NTP时间同步的校验、出入网能力的校验等等,并开源了eventer,支持离线Kubernetes的事件数据到SLS、kafka以及钉钉,实现ChatOps。

Prometheus生态的增强与集成   

Promethes作为Kubernetes生态中三方监控的标准,阿里云容器服务也提供了集成的Chart供开发者一键集成。此外,我们还在如下三个层次作了增强:

  • 存储、性能增强:支持了产品级的存储能力支持(TSDB、InfluxDB),提供更持久、更高效的监控存储与查询。
  • 采集指标的增强:修复了部分由于Prometheus自身设计缺欠造成的监控不准的问题,提供了GPU单卡、多卡、共享分片的exporter。
  • 提供上层可观测性的增强:支持场景化的CRD监控指标集成,例如argo、spark、tensorflow等云原生的监控能力,支持多租可观测性。

阿里云容器服务Kubernetes的弹性总览  

6

阿里云容器服务Kubernetes主要包含如下两大类弹性组件:调度层弹性组件与资源层弹性组件。

调度层弹性组件  

调度层弹性组件是指所有的弹性动作都是和Pod相关的,并不关心具体的资源情况。

  • HPA

HPA是Pod水平伸缩的组件,除了社区支持的Resource Metrics和Custom Metrics,阿里云容器服务Kubernetes还提供了external-metrics-adapter,支持云服务的指标作为弹性伸缩的判断条件。目前已经支持例如:Ingress的QPS、RT,ARMS中应用的GC次数、慢SQL次数等等多个产品不同维度的监控指标。

  • VPA 

VPA是Pod的纵向伸缩的组件,主要面向有状态服务的扩容和升级场景。   

  • cronHPA 

cronHPA是定时伸缩组件,主要面向的是周期性负载,通过资源画像可以预测有规律的负载周期,并通过周期性伸缩,实现资源成本的节约。

  • Resizer

Resizer是集群核心组件的伸缩控制器,可以根据集群的CPU核数、节点的个数,实现线性和梯度两种不同的伸缩,目前主要面对的场景是核心组件的伸缩,例如:CoreDNS。

资源层弹性组件

资源层弹性组件是指弹性的操作都是针对于Pod和具体资源关系的。

  • Cluster-Autoscaler 

Cluster-Autoscaler是目前比较成熟的节点伸缩组件,主要面向的场景是当Pod资源不足时,进行节点的伸缩,并将无法调度的Pod调度到新弹出的节点上。

  • virtual-kubelet-autoscaler 

virtual-kubelet-autoscaler是阿里云容器服务Kubernetes开源的组件,和Cluster-Autoscaler的原理类似,当Pod由于资源问题无法调度时,此时弹出的不是节点,而是将Pod绑定到虚拟节点上,并通过ECI的方式将Pod进行启动。

Demo Show Case 

7

最后给大家进行一个简单的Demo演示:应用主体是apiservice,apiservice会通sub-apiservice调用database,接入层通过ingress进行管理。我们通过PTS模拟上层产生的流量,并通过SLS采集接入层的日志,ARMS采集应用的性能指标,并通过alibaba-cloud-metrics-adapster暴露external metrics触发HPA重新计算工作负载的副本,当伸缩的Pod占满集群资源时,触发virtual-kubelet-autoscaler生成ECI承载超过集群容量规划的负载。

总结  

在阿里云容器服务Kubernetes上使用监控和弹性的能力是非常简单的,开发者只需一键安装相应的组件Chart即可完成接入,通过多维度的监控、弹性能力,可以让云原生应用在最低的成本下获得更高的稳定性和鲁棒性。
若有收获,就赏束稻谷吧

0 颗稻谷
莫源
今天 08:13
1
0

前言  

8

云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes做为云原生的标准接口实现,已经成为了整个stack的中心,云服务的能力可以通过Cloud Provider、CRD Controller、Operator等等的方式从Kubernetes的标准接口向业务层透出。开发者可以基于Kubernetes来构建自己的云原生应用与平台,Kubernetes成为了构建平台的平台。今天我们会向大家介绍一个云原生应用该如何在Kubernetes中无缝集成监控和弹性能力。

阿里云容器服务Kubernetes的监控总览

9

云服务集成  

阿里云容器服务Kubernetes目前已经和四款监控云服务进行了打通,分别是SLS(日志服务)、ARMS(应用性能监控)、AHAS(架构感知监控服务)、Cloud Monitor(云监控)。

SLS主要负责日志的采集、分析。在阿里云容器服务Kubernetes中,SLS可以采集三种不同类型的日志

  • APIServer等核心组件的日志
  • Service Mesh/Ingress等接入层的日志
  • 应用的标准日志  

除了采集日志的标准链路外,SLS还提供了上层的日志分析能力,默认提供了基于APIServer的审计分析能力、接入层的可观测性展现、应用层的日志分析。在阿里云容器服务Kubernetes中,日志组件已经默认安装,开发者只需要通过在集群创建时勾选即可。
10

ARMS主要负责采集、分析、展现应用的性能指标。目前主要支持Java与PHP两种语言的集成,可以采集虚拟机(JVM)层的指标,例如GC的次数、应用的慢SQL、调用栈等等。对于后期性能调优可以起到非常重要的作用。
11

AHAS是架构感知监控,通常在Kubernetes集群中负载的类型大部分为微服务,微服务的调用拓扑也会比较复杂,因此当集群的网络链路出现问题时,如何快速定位问题、发现问题、诊断问题则成为了最大的难题。AHAS通过网络的流量和走向,将集群的拓扑进行展现,提供更高层次的问题诊断方式。
12

开源方案集成

开源方案的兼容和集成也是阿里云容器服务Kubernetes监控能力的一部分。主要包含如下两个部分:

Kubernetes内置监控组件的增强与集成  

在kubernetes社区中,heapster/metrics-server是内置的监控方案,而且例如Dashboard、HPA等核心组件会依赖于这些内置监控能力提供的metrics。由于Kubernetes生态中组件的发布周期和Kubernetes的release不一定保证完整的同步,这就造成了部分监控能力的消费者在Kubernetes中存在监控问题。因此阿里云就这个问题做了metrics-server的增强,实现版本的兼容。此外针对节点的诊断能力,阿里云容器服务增强了NPD的覆盖场景,支持了FD文件句柄的监测、NTP时间同步的校验、出入网能力的校验等等,并开源了eventer,支持离线Kubernetes的事件数据到SLS、kafka以及钉钉,实现ChatOps。

Prometheus生态的增强与集成   

Promethes作为Kubernetes生态中三方监控的标准,阿里云容器服务也提供了集成的Chart供开发者一键集成。此外,我们还在如下三个层次作了增强:

  • 存储、性能增强:支持了产品级的存储能力支持(TSDB、InfluxDB),提供更持久、更高效的监控存储与查询。
  • 采集指标的增强:修复了部分由于Prometheus自身设计缺欠造成的监控不准的问题,提供了GPU单卡、多卡、共享分片的exporter。
  • 提供上层可观测性的增强:支持场景化的CRD监控指标集成,例如argo、spark、tensorflow等云原生的监控能力,支持多租可观测性。

阿里云容器服务Kubernetes的弹性总览  

13

阿里云容器服务Kubernetes主要包含如下两大类弹性组件:调度层弹性组件与资源层弹性组件。

调度层弹性组件  

调度层弹性组件是指所有的弹性动作都是和Pod相关的,并不关心具体的资源情况。

  • HPA

HPA是Pod水平伸缩的组件,除了社区支持的Resource Metrics和Custom Metrics,阿里云容器服务Kubernetes还提供了external-metrics-adapter,支持云服务的指标作为弹性伸缩的判断条件。目前已经支持例如:Ingress的QPS、RT,ARMS中应用的GC次数、慢SQL次数等等多个产品不同维度的监控指标。

  • VPA 

VPA是Pod的纵向伸缩的组件,主要面向有状态服务的扩容和升级场景。   

  • cronHPA 

cronHPA是定时伸缩组件,主要面向的是周期性负载,通过资源画像可以预测有规律的负载周期,并通过周期性伸缩,实现资源成本的节约。

  • Resizer

Resizer是集群核心组件的伸缩控制器,可以根据集群的CPU核数、节点的个数,实现线性和梯度两种不同的伸缩,目前主要面对的场景是核心组件的伸缩,例如:CoreDNS。

资源层弹性组件

资源层弹性组件是指弹性的操作都是针对于Pod和具体资源关系的。

  • Cluster-Autoscaler 

Cluster-Autoscaler是目前比较成熟的节点伸缩组件,主要面向的场景是当Pod资源不足时,进行节点的伸缩,并将无法调度的Pod调度到新弹出的节点上。

  • virtual-kubelet-autoscaler 

virtual-kubelet-autoscaler是阿里云容器服务Kubernetes开源的组件,和Cluster-Autoscaler的原理类似,当Pod由于资源问题无法调度时,此时弹出的不是节点,而是将Pod绑定到虚拟节点上,并通过ECI的方式将Pod进行启动。

Demo Show Case 

14

最后给大家进行一个简单的Demo演示:应用主体是apiservice,apiservice会通sub-apiservice调用database,接入层通过ingress进行管理。我们通过PTS模拟上层产生的流量,并通过SLS采集接入层的日志,ARMS采集应用的性能指标,并通过alibaba-cloud-metrics-adapster暴露external metrics触发HPA重新计算工作负载的副本,当伸缩的Pod占满集群资源时,触发virtual-kubelet-autoscaler生成ECI承载超过集群容量规划的负载。

总结  

在阿里云容器服务Kubernetes上使用监控和弹性的能力是非常简单的,开发者只需一键安装相应的组件Chart即可完成接入,通过多维度的监控、弹性能力,可以让云原生应用在最低的成本下获得更高的稳定性和鲁棒性。
若有收获,就赏束稻谷吧

0 颗稻谷
莫源
今天 08:13
1
0

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
21天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
108 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
28天前
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
1月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
13天前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
27天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
27天前
|
Cloud Native 安全 Java
杭州铭师堂的云原生升级实践
在短短 2-3 年间,杭州铭师堂完整经历了云计算应用的四个关键阶段:从“启动上云”到“全量上云”,再到“全栈用云”,最终达到“精益用云”。也从云计算的第一次浪潮,迈过了第二次浪潮,顺利的进入到了 第三次浪潮 AI + 云。
105 12
|
1月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
1月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
13天前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
34 0

相关产品

  • 容器服务Kubernetes版