如何快速部署容器化应用

容器化推行的过程当中,研发、运维学习及使用成本都很是高,那有没有一款简单易用的平台呢?本文介绍基于Kubernetes的应用管理平台-开普勒云平台。前端

1、背景

为了快速适应和知足市场需求,小而快的应用愈来愈多,“这些零碎的应用如何部署、管理?”成为让你们头疼的问题。若所有上虚拟机,资源消耗太大。这时,将应用容器化,显然是一个很是不错的选择,但不少公司又都面临着一个一样的问题,那就是容器化推行难。linux

容器化推行的过程当中,研发、运维学习及使用成本都很是高,那有没有一款简单易用的平台呢?git

开普勒云平台是 宜人金科-财富技术部 开源的一款基于Kubernetes的应用管理解决方案。致力于解决公司的上容器难、上Kubernetes难、运维成本高等问题。应用只须要加一个很是简单的Dockerfile文件经过开普勒云台就能将应用部署在Kubernetes上,大大下降了使用的难度。github

2、开普勒云平台

以前的一篇文章Kubernetes+Docker+Istio 容器云实践对开普勒平台作了一些基本介绍。golang

通过一段时间的调整,咱们终于把这个平台开源了: https://github.com/kplcloud/kplclouddocker

开普勒云平台是一款面向研发、运维等人群的平台,只须要具有简单知识就能够快速将应用部署到Kubernetes上,如下是平台的基础架构:后端

开普勒平台既能够经过容器的方式跑在Kubernetes上,也能够独立部署。微信

在kubernetes master节点上执行便可完成部署,固然,在此以前须要增长app.cfg配置文件。架构

$ git clone github.com/kplcloud/kplcloud && cd kplcloud/
$ kubectl apply -f install/kubernetes/kpaas/

下图是开普勒云平台所对接的平台及流程。app

开普勒云平台经过调用Jenkins、Gitlab(Github)、Kubernetes等API的方式对应用进行操做。

将Consul的KV功能做为配置中心来使用,在开普勒云平台上能够直接调用Consul API进行操做,能够在配置文件决定是否启用Consul KV功能。

Jenkins目前只担任代码编译及将Docker镜像上传仓库的功能。开普勒经过调用JenkinsAPI来建立Job或Build Job,并监听Job状态。

开普勒平台还可调用Github或Gitlab API获取项目的分支及须要上线的tags。并将相关信息传给jenkins,Jenkins拉取代码并执行相关构建过程。

3、使用

平台调用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可以按照用户的需求,自动建立其须要的存储。

在菜单找到“配置与存储”->"持久化存储卷声明",选择应用的空间,并点击“建立”按钮,先建立一个存储卷,而后咱们找到须要挂载持久化存储盘应用并进入详情页,找到“持久化存储”选项卡,挂载刚刚所建立的持久化存储卷就行了。

4、尾巴

开普勒平台目前已开源,而且已有演示平台可以使用,提供完整文档供参考。文档详细地介绍了相关服务的搭建过程,同时,提供了多种部署方案。

做者:王聪

来源:宜信技术学院

相关文章
相关标签/搜索