新闻动态
技术中心
技术中心
当前位置:科达自控 >> 服务支持 >> 技术中心 >> 浏览文章
云原生应用如何做到低成本高稳定
作者:黄涛 日期:2019年11月18日 来源:研发部 浏览:

内容导读:云原生应用的设计理念已经被越来越多的开发者接受与认可,而Kubernetes 做为云原生的标准接口实现,已经成为了整个 stack 的中心,云服务的能力可以通过 Cloud Provider、CRD Controller、Operator 等等的方式从 Kubernetes 的标准接口向业务层透出。

云原生应用的设计理念已经被越来越多的开发者接受与认可,而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 供开发者一键集成。此外,我们还在如下三个层次作了增强:

1、存储、性能增强:支持了产品级的存储能力支持(TSDB、InfluxDB),提供更持久、更高效的监控存储与查询。

2、采集指标的增强:修复了部分由于 Prometheus 自身设计缺欠造成的监控不准的问题,提供了 GPU 单卡、多卡、共享分片的 exporter。

3、提供上层可观测性的增强:支持场景化的 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演示:应用主体是 apiservice,apiservice 会通 sub-apiservice 调用 database,接入层通过 ingress 进行管理。我们通过PTS模拟上层产生的流量,并通过 SLS 采集接入层的日志,ARMS 采集应用的性能指标,并通过 alibaba-cloud-metrics-adapster 暴露 external metrics 触发 HPA 重新计算工作负载的副本,当伸缩的 Pod 占满集群资源时,触发 virtual-kubelet-autoscaler 生成 ECI 承载超过集群容量 规划的负载。
在阿里云容器服务 Kubernetes 上使用监控和弹性的能力是非常简单的,开发者只需一键安装相应的组件 Chart 即可完成接入,通过多维度的监控、弹性能力,可以让云原生应用在最低的成本下获得更高的稳定性和鲁棒性。

上一篇文章:PCB制作过程中异形孔的导出 下一篇文章:没有了
相关链接
发表评论
用户评论
版权所有 山西科达自控股份有限公司 晋ICP备09004627号    晋公网安备 14019202000008号     
官方微信
新浪官方微博
腾讯官方微博