写点什么

一个实例解析 PaaS 平台 LAIN 的 9 大杀手级功能

  • 2020-02-11
  • 本文字数:3036 字

    阅读完需:约 10 分钟

一个实例解析PaaS平台LAIN的9大杀手级功能

一、基于 Docker 的 PaaS 平台 LAIN

在金融的场景下,LAIN 是为解放各个团队和业务线的生产力而设计的一个云平台。LAIN 正式上线已经大约两年,基本已经成熟,为宜信大数据创新中心各个团队提供了统一的测试和生产环境,简化了服务的部署与上线流程,也降低了运维人员对系统管理的复杂度。


LAIN 规范了一个应用的开发、测试、上线工作流,提供了为应用做的容器编排、权限控制、SDN、流量管理、监控报警、备份、日志等 devops 问题的整体解决方案。(扩展阅读:宜信开源|详解PaaS平台LAIN的功能和架构


在 LAIN 上,应用是一个基本的概念,某个应用的开发者只需要定义一个 lain.yaml 即可定义应用的编译和运行方式,对应用代码侵入性很低。LAIN 基于容器技术,面向多样化的技术栈,并且天然隔离系统和应用的依赖。


当 LAIN 用户创建一个应用(服务)时,可以到 LAIN 上注册该应用,当前的用户自动成为了该应用的维护者,拥有了进一步操作该应用的权限。构建应用的环境需要 docker 和 lain 命令行工具,为了方便,我们创建了一个 vagrant box 即 lain-box. 在构建应用时,除了工程代码外,还需要一个 Docker 镜像作为基础镜像,即编译的环境。如果是二进制的工程,如 golang,则可以在运行时换掉一个底,否则会使用 build 镜像为 release 镜像。准备好镜像和编译/运行的脚本后,就可以编辑 lain.yaml 了。


具体来说,lain.yaml 主要做了如下四件事:


1、应用名称的确定,体现一个应用的边界


2、应用的基础技术栈,即编译和运行的镜像


3、构建过程(如何编译)


4、微服务拆分及服务内部配置(如何运行、运维)


关于第 4 点,LAIN 上有一个 Proc 的概念,即每个应用都有一个或多个 Proc,Proc 在应用内有唯一的名字和类型,Proc 在底层对应于一组容器,一个应用之间的各个 Proc 的各个容器的网络是互通的,所以应用就是可以互相信任的几个 Proc,对外表现为现实中的某项功能。Proc 的类型是 LAIN 内置的,worker 类型是最简单的类型,LAIN 处理其它的 Proc 类型会做一些额外的事情。


在应用的层面上,LAIN 除了用 lain.yaml 将一个应用的依赖和行为固化外,还有以下几大亮点:


1、SDN 网络安全隔离


  • 使用 calico 项目构建 SDN 网络

  • 高效率的应用内网络互通

  • 应用间网络默认隔离

  • 显式声明应用间的服务互访


2、应用权限的控制


  • sso 单点登录,统一认证

  • 利用 sso 的组管理,console 进行应用维护者的权限管理,包括 registry 的镜像的权限和应用维护的权限


接下来,我们以一个最简单的 web 服务为例,来说明 LAIN 的工作原理。

二、通过实例看 LAIN 的 9 大功能

首先,用 go 写一个简单的 web 服务,hello.go


1558336463014000125.png


下一步,编辑 lain.yaml 文件:


1558336476586082813.png


可以看出,lain.yaml 定义了如何编译,发布,测试一个应用。注意到 hello 应用只有一个 Proc,web 是 web.web 的简写形式,即 Proc 类型和名字都是 web. 对于每一个 Proc,LAIN 提供了几个杀手级功能:


1、动态扩容缩容


可以在 lain.yaml 中定义一个 Proc 的实例数量,即 num_instances,可以定义每个实例所用的内存,也可以在命令行或 console 的 UI 上动态对实例个数以及所用内存大小进行调整。动态扩容缩容会自动注入一些 swarm 的 filters,保证同一个 Proc 的实例调度到不同的节点上。


2、volumes


即 docker 的 volume,如果配置了该字段,每一个实例都对应拥有一个节点上的文件目录。虽然大部分情况下,加入 volume 意味着加入了状态,不利于 HA,但有些特殊情况比如数据库容器化时,volume 还是必须的。LAIN 的 volume 的精彩之处是可以配置一个备份策略,lain 有一个组件可以支持自定义备份,在备份过程前后还可以自定义脚本,这些自定义脚本何时运行的配置类同 crontab 的调度策略,相当于可以在容器里定义一些 cron job。


3、cloud_volumes


由于某些数据需要高可用,另外 Proc 中不同的实例可能需要共享一个 volume,LAIN 集成了分布式文件系统,比方说 ceph 和 MooseFS,cloud_volume 比普通的 volume 多一种使用方式,即所有的 instance 共享同一个分布式文件系统目录。


4、logs


本质上还是 docker volume,但是定义在 logs 字段下目录包含的文件会被 lain 的日志收集系统收集,效果等同于输出到标准输入输出。这样我们可以统一管理、查询所有应用的日志。


5、secret_files


考虑到一次编译要在不同集群(如测试、生产集群)上运行,那必然会导致一个问题,就是如何加载某些配置,如数据库用户名和密码,将这些配置写入代码仓库会带来明显的安全问题,也不方便自动集成和不同集群上的部署,LAIN 通过内置的 lvault 组件实现了代码与配置的分离,每一个 LAIN 集群都有一个自带的配置中心 lvault,加密存储着所有该集群应用的配置文件。只有应用管理者有权限管理应用的配置文件。这样,用户将不同集群的配置分别写到对应的 lvault 中,即可用将同一个镜像推送到不同的集群中并部署运行。


6、web 类型的 Proc


  • 相关 nginx 配置的自动化:web 类型的 Proc 的流量会由一个基于 nginx 的组件 webrouter 做负载均衡,对于不同的 Proc,集群有默认的 mount point,也可以自定义新的 mount point,即 servername 或 baseurl; 也可以定义 health check 等诸多实践上必须的功能。

  • watcher 会自动刷新 nginx 配置

  • 日志系统会自动收集 nginx 日志


7、虚 IP


虚 IP 是为了保证某个 Proc 的高可用而设计的一套机制。


  • Proc 可以注册一个或多个虚 IP,应用可以通过虚 IP 对外服务,比如 webrouter 可以用虚 IP 机制去除 nginx 的单点

  • networkd 动态维护虚 IP:在 etcd 配置虚 ip 后,各个节点的 networkd 会得到通知,如果对应的 Proc 的实例调度到本节点上,则 networkd 会激活该节点配置 vip 和 iptables 规则,保证流量可以到达实例容器。如果一个 Proc 注册了多个虚 IP,networkd 会尽量将不同的虚 IP 分配到不同的节点上,由于容器是默认分散到不同的节点上的,所以这样可以保证很严格的高可用。


8、Filters


LAIN 支持 swarm 的 constraint 和 affinity 等容器调度的参数,使得容器的调度更加合理,比方说默认同一个 Proc 的容器尽量调度到不同的节点上,最新的 LAIN 还支持用户自定义 Proc 的 label 以及 Filters。


9、容器的监控和报警


利用自己开发的 collectd 插件,监控容器的基本运行时数据,集成了 Carbon,Whisper,Graphite-Web,Grafana,icinga2 等开源组件,团队开发了 hedwig,hagrid 两个组件,提供了一整套监控报警系统。


对集群而言,一个应用的部署大致经过这么几个阶段:


1、console 通过 lain-sdk 对 lain.yaml 进行解析,为应用创建 network,创建 calico profile, 创建 sso 的应用维护者组.


2、console 调用 deployd 的接口,deployd 完成容器的编排,也提供了应用在线扩容缩容等 API,进行自动维持和灾难恢复,并将一些重要的数据写入 etcd 中


3、lainlet 监听 etcd,networkd 和 webrouter 里的 watcher 通过 lainlet 拿到集群的最新配置,来完成虚 IP 的自动漂移和 nginx 配置的自动更新等。


总之,LAIN 在最开始的设计中较多地考虑了安全性,包括了 SDN 网络和应用权限的管理,秘密文件配置系统;在实现中,考虑到了多种技术栈的支持和容器化带来的优势,提供了包括备份、日志、监控报警等一揽子解决方案,能够让应用使用者方便地开发各种特性的应用,提高了生产力;最后,对于 LAIN 集群维护者,LAIN 提供了很多运维工具,包括 LAIN 节点的加入删除,应用容器的手动迁移,节点的维护模式等等,基本上满足了从日常运维到灾难恢复的方方面面。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/248


2020-02-11 17:46776

评论

发布
暂无评论
发现更多内容

架构师训练营 Week 11 作业

Wancho

极客大学架构师训练营 0 期 week 11 作业

chun1123

高可用 密码校验

架构师训练营 Week 11 总结

Wancho

系统稳定高可用的方案以及用户密码验证函数

Acker飏

极客大学架构师训练营 0 期 week 11 学习笔记

chun1123

安全 高可用系统的架构

Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单

newbe36524

云计算 微服务 dock .net core ASP.NET Core

【华为云数据库技术大公开】机房失火后,还能拯救你的数据吗?

华为云开发者联盟

数据库 机房 华为云 数据存储 云数据库

Week11总结

熊威

用户密码验证函数

周冬辉

加密

架构师训练营第十一周作业

子豪sirius

系统不可用的原因和解决方案

极客李

架构师训练营 - 第 11 周作业

Jam

Apache Pulsar 社区周报:08-15 ~ 08-21

Apache Pulsar

云原生 Apache Pulsar 消息系统 消息中间件

漫画解读:唐僧师徒如何帮助大唐官网打造CDN+OSS完美架构?

阿里云Edge Plus

架构师训练营 第十一周 作业

CR

高可用的系统架构

莫莫大人

极客大学架构师训练营

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

冰河

高并发 分布式限流 秒杀系统 异步削峰 签约计划第二季

用户密码验证函数

任小龙

Week 11命题作业

Jeremy

安全架构和高可用系统的架构

周冬辉

高可用系统的架构

Week11作业1

熊威

Week 11 作业

鱼_XueTr

极客时间架构师训练营 - week11 - 作业 2

jjn0703

极客大学架构师训练营

架构师训练营第 0 期第 11 周作业

无名氏

第十一周学习总结

菲尼克斯

架构师训练营 第十一周 总结

CR

Flink算子状态-9

小知识点

scala 大数据 flink

第十一周命题作业

菲尼克斯

etcd的高可用

李小匪

云上度假村木莲庄酒店助你远离城市的喧嚣

InfoQ_967a83c6d0d7

java安全编码指南之:拒绝Denial of Service

程序那些事

Java 安全编码指南 java安全编码 DOS攻击 zip炸弹

一个实例解析PaaS平台LAIN的9大杀手级功能_技术管理_王超一_InfoQ精选文章