能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中( 二 )


能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

为了解决这种问题 , 我们实现了镜像缓存的功能 。 即用户的实际镜像拉取在第一次拉取中 , 会缓存在我们的镜像缓存中心 , 而后的镜像加载是直接通过NBD的形式直接挂载到Cube容器里 , 这样就可以实现Cube的快速启动 , 从而跳过了镜像拉取的时间 。 对于特别大的镜像 , 用户也可以选择预先加载的形式直接加载到我们的镜像缓存中心 , 从而进一步降低了启动时间 。
网络实现
和标准的docker网络实现有些不同 , 我们知道一个Cube的 pod相当于一个虚拟机 , 因此Cube的pod可以直接利用原先底层SDN网络为虚拟机提供的能力 , 实现VPC内Cube和VPC内所有资源的二层互通 , 以及不同VPC内资源的互相隔离 。 另外从满足用户需求的角度出发 , 我们也实现了Cube固定内网IP的功能 , 即在Cube实例更新的过程中 , 我们可以保持容器pod IP不变 。
能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

Cube的外网连通性也可以很好利用现有云平台的网络架构 , 对于入向流量 , 我们可以将Cube挂在ULB背后 , 利用多个Cube实例实现高可用和弹性伸缩;对于出向流量 , 我们也可以通过NETGW来实现Cube对外的访问需求 。 另外对于需要固定外网IP的情况 , 我们也可以将单个EIP绑定Cube 。
存储实现
能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

Cube的存储也可以很好的对标K8S , 主要分为以下几类:一种是K8S内置的Config map Secret和EmptyDir , 这些都是作为K8S标准的功能 , 我们也在Cube实现的CRI中纷纷予以了支持;对于云厂商提供的文件存储、对象存储 , 我们是通过agent的挂载来实现的 , 其中文件存储主要是通过agent自动挂载了NFS协议 , 而对象存储是通过agent挂载了S3fuse的协议;块存储是我们改动比较大的地方 , 为了提高性能 , 我们改动了Cube所使用的虚拟机IO路径 。 通过vhost-user协议 , 对接到SPDK实现了Cube上高性能RSSD云盘的挂载 。
监控和日志的实现
能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

监控和日志这二者的架构比较类似 , 都是将容器内的信息反馈给用户的一种形式 。 其中监控信息是通过我们自研的Cubelet组件 , 将监控信息汇集后上报给prometheus , 最终再转发给UCloud API的 。 而日志信息是通过Promtail采集后转发给Loki Log Cluster集群 , 再转交给UCloud API , 另外对于长期日志 , 我们还提供了自动转存至对象存储US3的功能 。
典型使用场景 能力|优刻得拥抱云原生Serverless技术还能这样用在容器服务中
文章图片

最后 , 张苗磊分享了一个 Cube比较典型的使用场景 , 从这个图中我们可以看到所有的计算功能都可以通过Cube容器的实例来提供 , 而入向流量通过ULB来实现 , 后接的存储、数据库都可以通过云上原生提供的mysql或者UFS来实现 , 这样架构可以很好的提供计算、存储分离 , 并且能够提供快速横向扩展和弹性资源使用的能力 。 关于这个架构具体的使用情况可以通过B站观看详情 。
除此之外 , Cube在互联网削峰场景、数据采集、实时音视频转码等场景均可以发挥免服务器运维、秒级启动、自愈性、秒级计费等多重优势 , 助力企业在容器化应用部署过程中进一步降本增效 。


推荐阅读