内容简介:云原生应用的设计理念已经被越来越多的开发者接受与认可,而 Kubernetes 做为云原生的标准接口实现,已经成为了整个 stack 的中心,云服务的能力可以通过 Cloud Provider、CRD Controller、Operator 等等的方式从 Kubernetes 的标准接口向业务层透出。开发者可以基于 Kubernetes 来构建自己的云原生应用与平台,Kubernetes 成为了构建平台的平台。今天我们会向大家介绍一个云原生应用该如何在 Kubernetes 中无缝集成监控和弹性能力。
划重点
-
阿里云容器服务 K8s 监控总览
-
阿里云容器服务 K8s 弹性总览
-
Demo 演示
在刚刚结束的云原生领域顶会 KubeCon + CloudNativeCon + Open Source Summit(简称 KubeCon) 上,阿里云 为全球用户分享阿里巴巴超大规模云原生落地实践 、国内首个开放云原生应用中心Cloud Native App Hub、正式宣布开源重量级项目OpenKruise,将基于阿里经济体多年大规模应用部署、发布与管理最佳实践沉淀的能力开放给业界,还重磅发布了边缘容器(ACK@Edge)和云原生应用管理与交付体系。
接下来我们将通过一系列文章对阿里在 KubeCon 的演讲议题进行回顾,让我们一起品读那些在 KubeCon 上令人印象深刻的技术观点。
本文整理自由阿里云容器平台技术专家 刘中巍(莫源)在 KubeCon 分享的《
Cloud Native Application monitoring and autoscaling in kubernetes》演讲。
获取 KubeCon 全部阿里演讲PPT,微信菜单栏点击 PPT下的“获取PPT”
前言
云原生应用的设计理念已经被越来越多的开发者接受与认可,而 Kubernetes 做为云原生的标准接口实现,已经成为了整个 stack 的中心,云服务的能力可以通过 Cloud Provider、CRD Controller、Operator 等等的方式从 Kubernetes 的标准接口向业务层透出。开发者可以基于 Kubernetes 来构建自己的云原生应用与平台,Kubernetes 成为了构建平台的平台。今天我们会向大家介绍一个云原生应用该如何在 Kubernetes 中无缝集成监控和弹性能力。
阿里云容器服务 Kubernetes 的监控总览
云服务集成
阿里云容器服务 Kubernetes 目前已经和四款监控云服务进行了打通,分别是SLS(日志服务)、ARMS(应用性能监控)、AHAS(架构感知监控服务)、Cloud Monitor(云监控)。
SLS 主要负责日志的采集、分析。在阿里云容器服务 Kubernetes 中,SLS 可以采集三种不同类型的日志:
-
APIServer 等核心组件的日志
-
Service Mesh/Ingress 等接入层的日志
-
应用的标准日志
除了采集日志的标准链路外,SLS 还提供了上层的日志分析能力,默认提供了基于 APIServer 的审计分析能力、接入层的可观测性展现、应用层的日志分析。在阿里云容器服务 Kubernetes 中,日志组件已经默认安装,开发者只需要通过在集群创建时勾选即可。
ARMS 主要负责采集、分析、展现应用的性能指标。目前主要支持 Java 与 PHP 两种语言的集成,可以采集虚拟机(JVM)层的指标,例如 GC 的次数、应用的慢 SQL 、调用栈等等。对于后期性能调优可以起到非常重要的作用。
AHAS 是架构感知监控,通常在 Kubernetes 集群中负载的类型大部分为微服务,微服务的调用拓扑也会比较复杂,因此当集群的网络链路出现问题时,如何快速定位问题、发现问题、诊断问题则成为了最大的难题。AHAS 通过网络的流量和走向,将集群的拓扑进行展现,提供更高层次的问题诊断方式。
开源方案集成
开源方案的兼容和集成也是阿里云容器服务 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 的弹性总览
阿里云容器服务 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
最后给大家进行一个简单的 Demo演示:应用主体是 apiservice,apiservice 会通 sub-apiservice 调用 database,接入层通过 ingress 进行管理。我们通过PTS模拟上层产生的流量,并通过 SLS 采集接入层的日志,ARMS 采集应用的性能指标,并通过 alibaba-cloud-metrics-adapster 暴露 external metrics 触发 HPA 重新计算工作负载的副本,当伸缩的 Pod 占满集群资源时,触发 virtual-kubelet-autoscaler 生成 ECI 承载超过集群容量 规划的负载。
总结
在阿里云容器服务 Kubernetes 上使用监控和弹性的能力是非常简单的,开发者只需一键安装相应的组件 Chart 即可完成接入,通过多维度的监控、弹性能力,可以让云原生应用在最低的成本下获得更高的稳定性和鲁棒性。
KubeCon China 亮点全回顾
本周课程推荐
阿里云与 CNCF(Cloud Native Computing Foundation) 共同开发的《CNCF x Alibaba 云原生技术公开课》。
点击“ 阅读原文 ”观看《CNCF x Alibaba 云原生技术公开课》
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。