之前的一篇文章Kubernetes 容器云实践方案对开普勒平台做了一些基本介绍。
经过一段时间的调整,我们终于把这个平台开源了: 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拉取代码并执行相关构建过程。
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
模版。
构建应用的流程是通过创建应用提交一些信息进行处理。
从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
Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass来实现,允许存储卷按需被创建。 如果没有动态存储供应,Kubernetes集群的管理员将不得不通过手工的方式来创建新的存储卷。 通过动态存储卷,Kubernetes能够按照用户的需求,自动创建其需要的存储。
⭐️⭐️⭐️欢迎加入“开普勒开源群”。进群方式:请加小助手微信(微信号:creditease_tech)回复“开普勒”。
◆ ◆ ◆ ◆ ◆
如需转载请与小助手(微信号:creditease_tech)联系。发现文章有错误、对内容有疑问,都可以通过关注宜信技术学院微信公众号(CE_TECH),在后台留言给我们。我们每周会挑选出一位热心小伙伴,送上一份精美的小礼品。快来扫码关注我们吧!
注:文章封面原图素材来源于网络,若有侵权请留言删除。
⏬点击“阅读原文”查看更多技术干货