DockOne微信分享(一四四):BizCloud:基于Kubernetes的私有云实践

  • 时间:
  • 浏览:1

自动化执行某种 过程都要防止八个疑问:1) when,某种 然后我执行;2)who,谁来执行;3)how,为社 会 执行。为实现服务版本的平滑过渡,BizCloud也提供了灰度发布功能,以降低上线风险;灰度发布全部都是俩个多 独立的系统,但和系统的架构是紧密相连的。下面一些人分别介绍服务发现,服务授权和灰度发布的实现要点。

服务发现

首先是when,即服务发现和服务授权的发起时间,一些人知道在Kubernetes服务里,服务清况 的变化和Pod的变化是紧密相连的,然后,一些人引入了俩个多 模块k8s-monitor,用来监控并判断发起动作。

Webshell主要有八个组件:1)Web浏览器负责界面呈现;2)Docker Controller是Docker容器应用的控制中心,作为桥梁,负责消息的转发;3)Docker Daemon提供HTTP API接口给结构系统调用以访问容器结构。

本文来自云栖社区企业商务合作伙伴Dockerone.io,了解相关信息可不都要关注Dockerone.io。

为了防止上述疑问,一些人使用目前非常流行的容器技术Docker和容器编排工具Kubernetes,研发了商业云平台BizCloud。但Docker和Kubernenets只提供了俩个多 基础功能:容器运行和容器编排,怎么快速地法学会使用,并为一些人所接受才是关键。在自研BizCloud过程中,俩个多 重点然后我要对接、打通现存的系统和流程,尽量保持用户操作习惯,服务在容器化的过程中,尽可能不都要调整,然后我系统才易于推广落地;当事人面,一些人要支持服务一键自动部署(QA有点硬都要然后我的功能),服务再次出现 故障后,如系统宕机或服务挂掉后,服务能自动迁移,然后一些人都要支持灰度发布,尽量实现运维的自动化。商业平台系统的整体架构如下图所示。共分为三层,IaaS层、PaaS层、SaaS层:在IaaS层,一些人使用Docker+Kubernetes封装了部门的基础资源,提供容器化服务;PaaS层提供了然后基础服务和基础框架,然后也实现了一些自动化工具,包括刚才提到过的统一服务管理中心,统一配置中心,项目管理系统、SOA服务框架等,贯穿了应用开发、测试、运维整个生命周期的一体化平台,其中的红色要素,包括服务管理、编译中心、商业云平台全部都是为BizCloud而新开发的模块;第三层SaaS主然后我一些商业平台业务系统。本文的分享也主要集中在PaaS层的研发实践上。

灰度发布时的服务发现同样包括接入层和SOA层两要素:对于接入层,一些人使用了OpenResty,并引入了ngx_dynamic_upstream模块,然后我可不都要通过HTTP API最好的最好的法子动态调整服务的Upstream;在SOA层的灰度发布中,一些人对consumer-provider划分为了可不都要动态更新的俩个多 组:正常组和灰度组,k8s-monitor将变更发送到SOA注册中心后,SOA注册中心还是通过ZK通知Consumer取最新的provider分组,从而实现灰度分流。

配套工具

为了更方便地使用BizCloud,一些人提供了多个配套工具。

而SOA服务的角色分为某种,某种是consumer,某种是provider。consumer和provider之间的负载均衡、白名单控制是通过SOA的注册中心来统一管理。像图里展示的,可能Pod1因故障挂掉,Kubernetes重新调度了PodN然后我,k8s-monitor将监控到的事件Pod1 DEL,PodN ADD通知到SOA注册中心,SOA注册中心会将对应的变化更新到ZK上,ZK会触发事件通知服务的consumer获取最新的服务provider。

通常俩个多 典型的服务全部都是两层:俩个多 用户接入层,通常是用Nginx接入用户流量,Nginx将流量埋点到后面 的Web服务器上;第二层SOA层,这里Web服务通过SOA调用后端服务,后端服务也可继续调用一些服务,最终将用户请求返回。在做服务发现时,都要完成这某种类型的服务发现。首先,对于接入层,如图所示,可能Pod1因故障挂掉,Kubernetes重新调度了PodN然后我,k8s-monitor监控到(最少)俩个多 事件:Pod1 DEL,PodN ADD,k8s-monitor将事件通知到服务管理中心。Nginx会实时从服务管理中心获取服务对应关系,动态加载Nginx配置,将可能挂掉的Pod1从Nginx中摘除,新增加的PodN暴露给结构。

k8s-monitor是BizCloud的监控器,其主要功能是监控Kubernetes集群中的Pods的清况 事件:ADD、MODIFY、DELETE,监控到事件后,k8s-monitor计算否是都要进行服务发现或服务授权等相关防止,可能都要,则通知下游系统进行防止。除了常规的事件监控之外,k8s-monitor一定会定期与服务管理模块同步数据,清理服务管理模块上可能所处的脏数据。使用k8s-monitor然后我俩个多 单独的模块,好处是显而易见的:将相关权限集中管理起来,防止云平台入侵应用,可能越来越然后我俩个多 模块,每个应用都都要增加当事人的的服务授权和服务发现的功能,对模块入侵较大;其次,某种 模块非常容易扩展,一些服务也可不都要订阅某种 模块的数据,实现当事人的防止逻辑。

对于不之类型的授权,一些人有不同的防止最好的最好的法子,要素授权对应的粒度然后我同:1)DB授权,授权信息包括ip+port+user,通过数据库执行机来执行,将授权信息写入数据库权限表;2)SOA授权,这里授权信息包括服务实例+ip+port,该类授权通过SOA注册中心执行,最终生成服务访问白名单;3)iptable授权,授权信息包括ip+port,之类授权通过salt-stack执行,最终会写入系统的iptables文件。

Web浏览器运行JS脚本,通过Web Socket与Docker Controller建立通信链路。Docker Controller通过Docker HTTP API与Docker Daemon建立通信链路。这里使用到Docker HTTP API的接口,利用返回的数据流承载Docker Controller和Docker Daemon之间的交互数据。链路建立后,用户就可不都要在Web浏览器输入字符与Docker容器交互。

模板生成

一些人还提供了模块自动生成的功能,然后我开发只都要关注当事人的服务即可,不都要重复编写发布等一系列Kubernetes部署文件。对于俩个多 服务,服务部署模板是提供了一类模板的集合,包括Deployment、Namespace、ConfigMaps,某种 模板全部都是可参数化的。在具体部署服务时,也然后我实例化俩个多 服务,一些人先查找服务实例的部署环境具体的部署参数,然后将某种 参数注入到模板中,生成具体的模板文件,然后发布。

目前一些人正在进行一些有清况 服务的容器化工作,如Redis、MySQL的容器化。可能一些人对数据的准确性和稳定性要求非常高,然后将数据库的容器化是非常谨慎的,一些人希望随着容器技术不断发展,在未来要能顺利实现基础资源的容器化。更智能的调度:一些人希望能实现俩个多 资源负载可预测的调度算法,能结合应用的CPU、内存、磁盘、网络IO、DISKIO、DBIO等历史数据指标进行综合计算,给出多维度下的基于时间片、优先级的准觉得时的负载预测,来执行更智能的调度。

Q&A

Q:有清况 服务和无清况 服务的主要区别是某种 ?

原文发布时间为:2017-10-08

为满足BizCloud的需求,对服务授权进行了改造,当时改造面临了一些挑战:首先服务依赖关系从何获取;其次,容器可能随时启动、销毁,服务IP会随容器变动;再次,一些人都要共同支持DB授权、IP白名单授权、SOA等不同粒度的授权。服务授权的发起仍然依赖于k8s-monitor,与服务发现之类,k8s-monitor将监控到的事件Pod1 DEL,PodN ADD,包括一些一些服务基本信息、IP等通知到授权模块,授权模块现在刚开始执行授权工作。刚才说明了授权的时间,但具体给谁来授权呢?如下图所示,每俩个多 服务全部都是当事人的服务配置信息,这里展示俩个多 服务,该服务依赖了然后资源,包Redis、数据库(俩个多 主库、俩个多 从库)等资源。将某种 配置文件上传到配置中心后,配置中心会将某种 配置解析,然后根据某种 依赖关系计算出依赖图,如右图所示。新启动的服务可不都要从配置中心获取当事人的资源依赖关系,要申请的资源。

原文标题:DockOne微信分享(一四四):BizCloud:基于Kubernetes的私有云实践

本文作者:刘林