重磅,百度BEC率先支持Kubernetes等边缘虚机 边缘业务从此更简单

近年来,容器技术快速发展,并呈现出与Kubernetes融合的趋势。

2019年Kubernetes社区的一份指南纲要中,讨论了虚拟机回归的话题,而在生产实践中也发现,以docker为代表的runc容器技术,在安全性、隔离性上有不少隐患。这使得微虚机或者安全容器技术逐渐被业界重视起来,比较有代表性的如Kata Containers,Firecracker和gVisor。

BEC就使用了其中的Kata Container安全容器做为边缘容器方案,实现容器内核隔离,保证非受信工作负载的运行,为客户提供更高的安全性。但是Kata Container也有一定的局限性,比如容器内核版本比较高,内核版本、虚机镜像不支持容器粒度的动态配置等问题。此外,也可支持客户在标准虚机上的使用习惯。

在这个背景下,BEC开启了对边缘虚机的支持。这也和业界的发展趋势相同,随着像Kubevirt这样的开源项目兴起,Kubernetes强大的编排能力可以直接管理标准虚拟机。除了支持标准虚拟机的管理,BEC也实现了安全容器和标准虚机的混部调度,整体架构如下:


重磅,百度BEC率先支持Kubernetes等边缘虚机 边缘业务从此更简单


简明边缘虚机架构


边缘虚机使用了开源的kubevirt方案来实现,通过Kubernetes的自定义资源API(CRD),增加虚机和虚机实例资源,使Kubernetes能够方便地编排管理虚机对象。Kubevirt的整体架构如下:


重磅,百度BEC率先支持Kubernetes等边缘虚机 边缘业务从此更简单


可自定义虚机镜像


BEC通过与百度智能云BCC云服务器产品打通,充分利用中心云产品能力,为用户提供自定义虚机镜像的能力。用户在BEC上启动边缘虚机时,可以选择在BCC中制作的虚机镜像启动。

Kubevirt支持多种存储挂载方式,在BEC中,系统盘的挂载使用的是data volume的方式,结合CDI(Containerized-Data-Importer )工具,完成虚机系统盘的准备。如下图:


重磅,百度BEC率先支持Kubernetes等边缘虚机 边缘业务从此更简单


支持虚机资源整体调度


BEC为了提升性能,边缘使用本地盘作为虚机的系统盘,在系统盘pv准备完成后,importer Pod会被删除,BEC通过设置vm pod的亲和性,保证vmpod会调度到pv所在的节点。但是importer pod删除和vm pod创建过程中可能会有新的pod调度到此节点,并占用资源,会导致vm pod因资源不足而调度失败。

为了解决这个问题,BEC增加了对虚机生命周期过程中所有资源的整体调度能力。重点是保障importer删除后,vm pod可以保证在同节点启动,另外一个是保障虚机关机开机时pod能在同节点重建。

BEC对kube-scheduler组件进行了改造,在原有的节点资源管理模块增加了资源预留机制,为vm的pod预留出资源配额,不参与调度。对应上面提到的importer pod删除或者因vm关机导致的virt-launcher pod删除,对应的资源不会从scheduler的资源缓存中清理,并且通过hook资源同步逻辑,防止缓存被更新,从而保证了vm启动的稳定性。

让边缘业务日志处理更简单


在业务运维中,日志是观察业务运行状态,排查业务问题的重要依据。在边缘服务场景中也是如此,但是边缘侧缺少中心云中完备的平台化日志服务。为了解决这个问题,BEC结合云原生生态,实现了一套业务容器日志推送和监控指标采集的工具。

该工具以sidecar容器的形式与业务容器共同运行在同一pod中,支持通过emptydir的方式与业务容器实现日志共享,也支持采集业务容器的标准输出。控制面通过configmap实现配置热更新下发,整体架构如下:


重磅,百度BEC率先支持Kubernetes等边缘虚机 边缘业务从此更简单


日志指标提取提升可读性


日志指标提取使用的是grok-exporter,grok-exporter是个轻量级的指标提取项目,可以很好对接prometheus。但是成熟度上还有待提升,主要问题有以下几点:

一是原生grok-exporter只能支持从一个文件或一个目录下的日志中提取指标,在生产环境中,客户多个容器的日志存储路径可能是不一致的,为此,BEC对grok-exporter进行了改造,使其支持从多个文件或目录提取指标,并将文件名添加为label用于区分。

二是原生grok-exporter不支持日志文件路径包含软链接或者环境变量,而生产环境中,很多日志文件,特别是标准输出日志,都是以软链接的方式来实现日志轮转,BEC团队对此进行了改造,解决了该问题。

三是提取指标时,对日志的偏移量没有做记录,在进程重启后会从文件开始处再次提取。为此,BEC对该偏移量进行了持久化存储,进程重启后可以重新加载,继续从上一位置开始提取。而且BEC使用“inode+设备号+文件扩展属性”唯一标识一个文件,保证文件删除后,新建的同名文件可以被识别。

此外,之前grok-exporter自身的日志格式不够友好,在组件运维过程中成本较高。为此,BEC更换了日志库,对优化日志格式,提升日志可读性。以配置化方式支持日志轮转,方便日志清理,防止sidecar容器中的日志堆积占用过多资源。

多种日志输出


BEC在日志传输上使用了开源的fluent bit,对接了百度智能云ElasticSearch,除此之外,fluent bit原生还支持kafka、fluentd、http、nats等输出。

基于以上众多业界首发的功能和先进技术,百度智能云以边缘计算开辟全新赛道,完成率先抢跑,充分迎接5G新时代。同时,百度智能云也在和运营商共同探索移动边缘计算,旨在提供用户更下沉的边缘资源,更低延迟的网络响应,更丰富的5G网络能力,面向未来无限可能。


分享到:


相關文章: