如何快速部署容器化应用
容器化推行的过程中,研发、运维学习及使用成本都非常高,那有没有一款简单易用的平台呢?本文介绍基于Kubernetes的应用管理平台-开普勒云平台。
一、背景
为了快速适应和满足市场需求,小而快的应用越来越多,“这些零碎的应用如何部署、管理?”成为让大家头疼的问题。若全部上虚拟机,资源消耗太大。这时,将应用容器化,显然是一个非常不错的选择,但很多公司又都面临着一个同样的问题,那就是容器化推行难。
容器化推行的过程中,研发、运维学习及使用成本都非常高,那有没有一款简单易用的平台呢?
开普勒云平台是 宜人金科-财富技术部 开源的一款基于Kubernetes的应用管理解决方案。致力于解决公司的上容器难、上Kubernetes难、运维成本高等问题。应用只需要加一个非常简单的Dockerfile文件通过开普勒云台就能将应用部署在Kubernetes上,大大降低了使用的难度。
二、开普勒云平台
之前的一篇文章Kubernetes+Docker+Istio 容器云实践对开普勒平台做了一些基本介绍。
经过一段时间的调整,我们终于把这个平台开源了: https://github.com/kplcloud/kplcloud
开普勒云平台是一款面向研发、运维等人群的平台,只需要具备简单知识就可以快速将应用部署到Kubernetes上,以下是平台的基础架构:
开普勒平台既可以通过容器的方式跑在Kubernetes上,也可以独立部署。
在kubernetes master节点上执行即可完成部署,当然,在此之前需要增加app.cfg配置文件。
$ git clone github.com/kplcloud/kplcloud && cd kplcloud/ $ kubectl apply -f install/kubernetes/kpaas/
下图是开普勒云平台所对接的平台及流程。
开普勒云平台通过调用Jenkins、Gitlab(Github)、Kubernetes等API的方式对应用进行操作。
将Consul的KV功能作为配置中心来使用,在开普勒云平台上可以直接调用Consul API进行操作,可以在配置文件决定是否启用Consul KV功能。
Jenkins目前只担任代码编译及将Docker镜像上传仓库的功能。开普勒通过调用JenkinsAPI来创建Job或Build Job,并监听Job状态。
开普勒平台还可调用Github或Gitlab API获取项目的分支及需要上线的tags。并将相关信息传给jenkins,Jenkins拉取代码并执行相关构建过程。
三、使用
平台调用Kubernetes API的资源及Jenkins API或告警都是以模版的方式进行处理,管理员可以根据自己公司所处的环境随意调整相关资源的模版。
除了对生产最基本的需求外,还增加了对测试环境测试人员的需求支持。
- 应用克隆: 测试人员可能需要做到一个版本多套环境的场景。在平台可以假设一个空间就是一种场景,在一个空间下部署完所有应用之后,需要在其他空间下也生成一样的应用,为了方便操作,可以直接使用“工具集-克隆”功能完成一键克隆。
- 调整容器时间: 金融产品应该都会遇到调整时间的问题。通常测试一个功能需要对服务的时间进行修改,由于Docker使用的是宿主机的内核时间,容器无法对内核时间进行调整,那就需要借助其他工具来完成这项工作。推荐使用一款开源的工具https://github.com/wolfcw/libfaketime,我们将该工具编译到宿主机上,通过挂载的方式挂入容器里,就能对单个容器进行调整而不影响其他容器了。
开普勒云平台功能众多,下面挑几个大家比较关心、常用的功能进行简单介绍。(更多的功能介绍请查看文档https://docs.nsini.com)
- 创建应用
- 发布新版本
- 日志采集
- 监控告警
- 持久化存储
3.1 创建应用
创建一个应用的流程非常简单,只需要填写一些简单的信息,管理员审核之后就会执行构建。应用升级只需要选择tags,然后执行构建就可以完成。
以创建一个Go应用为例:
Dockerfile:
FROM golang:latest as build-env ENV GO111MODULE=on ENV BUILDPATH=github.com/kplcloud/hello RUN mkdir -p /go/src/${BUILDPATH} COPY ./ /go/src/${BUILDPATH} RUN cd /go/src/${BUILDPATH} && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install -v FROM alpine:latest COPY --from=build-env /go/bin/hello /go/bin/hello WORKDIR /go/bin/ CMD ["/go/bin/hello"]
将以上Dockerfile放入项目目录,填写相关信息:
一个应用就创建完成了,管理员审核提交的信息是否合格,不合格便驳回;合格了就直接通过并进行部署。
部署应用会根据用户所提交的信息获取我们事先定义好的基础模版,再根据基础模版生成Kubernetes所能识别的资源,然后调用Kubernetes API创建这些资源。创建完成后再调用Jenkins API创建Job,最后执行构建。
Jenkins完成构建,并将Docker Image 上传完仓库之后,开普勒才会更新Kubernetes相关应用的版本。
在这个过程中若想加入更多操作,可以修改JenkinsCommand
模版。
3.2 发布新应用
构建应用的流程是通过创建应用提交一些信息进行处理。
- 从git 仓库获取tags列表。
- 调用jenkins API 将应用的相关参数及版本信息传给它并进行构建。
- Jenkins Job执行Shell命令,执行docker build并上传至Docker Image仓库。
- 平台监听到job已经成功执行,调用kubernetes API更新应用的Image地址。
- 监听升级情况。
- 发送通知。
以上是构建应用的后端流程,而前端就比较简单了,只需要在应用详情页点击"Build"按钮,在弹出的对话框中选择想应用的tags版本并提交就行了,如下图:
点击详情页的build日志选项卡,会显示最近的构建记录,点击左侧相应的版本,可以查看该版本的构建情况,也可以对正在构建的应用进行中断,如下图:
3.3 日志采集
我们的日志收集采用的是低耦合、扩展性强、方便维护和升级的方案。
- 每个节点Filebeat收集宿主机日志。
- 每个Pod注入Filebeat容器收集业务日志。
Filebeat会跟应用容器部署在一起,应用也不需要知道它的存在,只需要指定日志输入的目录就可以了。Filebeat所使用的配置是从ConfigMap读取,只需要维护好收集日志的规则。
如果配置了上面的采集器,那么它会向服务所在的Pod注入一个Filebeat采集器对应用服务的业务日志进行采集。把采集到的日志注入到kafka集群,然后logstash进行消息处理及格式化。
处理完后入到ES集群,最终我们就可以通过kibana查询到业务日志了。
Filebeat容器及filebeat的ConfigMap也可以通过模版的方式进行参数调整。
3.4 监控告警
应用监控告警也是非常重要的一个环节,我们采用Prometheus+Grafana的方案进行监控,Prometheus+AlertManager进行告警的处理。
AlertManager所抛出的告警信息会发送至开普勒云平台进行处理,若你在平台订阅了告警类型的消息则会发送至所订阅类型的相关工具。
我们可以在“个人设置-消息订阅设置”里选择需要订阅的类型及接收的工具:
以下是微信接收到的操作通知:
更多的教程请查阅我们提供的文档。https://docs.nsini.com
3.5 持久化存储
Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass来实现,允许存储卷按需被创建。 如果没有动态存储供应,Kubernetes集群的管理员将不得不通过手工的方式来创建新的存储卷。 通过动态存储卷,Kubernetes能够按照用户的需求,自动创建其需要的存储。
在菜单找到“配置与存储”->"持久化存储卷声明",选择应用的空间,并点击“创建”按钮,先创建一个存储卷,然后我们找到需要挂载持久化存储盘应用并进入详情页,找到“持久化存储”选项卡,挂载刚刚所创建的持久化存储卷就好了。
四、尾巴
开普勒平台目前已开源,并且已有演示平台可使用,提供完整文档供参考。文档详细地介绍了相关服务的搭建过程,同时,提供了多种部署方案。
- Github: https://github.com/kplcloud/kplcloud
- Document: https://docs.nsini.com
- Demo: https://kplcloud.nsini.com
作者:王聪
来源:宜信技术学院
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Jboot 2.2.5 发布,升级 JFinal 到最新版本
Jboot 是一个基于 JFinal、JFinal-Undertow、Dubbo 等开发的微服务框架,帮助开发者降低微服务开发门槛。同时完美支持在 idea、eclipse 下多 maven 模块,对java代码、html、css、js 等资源文件进行热加载,爽爽地开发。 Jboot v2.2.5 更新内容如下: 新增:JbootConfigManager 新增 refreshAndGet 方法,用于读取配置文件发生变化时的新内容 优化:指令 JbootPaginateDirective 可以传入 pageAttr 来指定 page 设置的属性 优化:优化 RequestUtil 的判断浏览器的代码逻辑 优化:升级 JFinal 、 Metrics 等到最新版本 文档:给出 seata 分布式事务的相关文档及测试demo 文档:新增 JFinalConfig 配置的相关文档 maven 依赖: <dependency> <groupId>io.jboot</groupId> <artifactId>jboot</arti...
- 下一篇
钢铁B2B电商案例:供应链金融如何解决供应链金融痛点
一、区块链是什么 区块链是一种按照时间顺序将数据块以特定的顺序相连的方式组合成的链式数据结构,其上存储了系统诞生以来所有交易的记录。区块链上的数据由全网节点共同维护并共同存储,同时以密码学方式保证区块数据不可篡改和不可伪造。所以区块链本质是一个分布式共享数据库。 区块链让参与系统中的任意多个节点,通过密码学方法产生相关联数据块(即区块,block),每个数据块中都包含了一定时间内的系统全部信息交流的数据,并按照时间顺序将数据区块组合成一种链式数据结构。 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术在互联网时代的创新应用模式,是一种解决信任问题、降低信任成本的信息技术方案。区块链技术的应用,可以取缔传统的信任中介,颠覆传统上存在了几千年的中心化旧模式,在不需要中心化信任中介的情况下,解决陌生人之间的信任问题,大幅降低信任成本。 二、名词解释 分布式:相对于集中式而言,分布式是区块链的典型特征之一,对应的英文是Decentralized,完整的表达形式是不依赖与中心服务器(集群)、利用分布式的计算机资源进行计算的模式。 共识机制:区块链系统中实现不同节点间建立信任、获...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8