11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

如何快速部署容器化应用

  • 2020-02-07
  • 本文字数:3132 字

    阅读完需:约 10 分钟

如何快速部署容器化应用

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


一、背景

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


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


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


1569467848584020254.png


二、开普勒云平台

之前的一篇文章Kubernetes 容器云实践方案对开普勒平台做了一些基本介绍。


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


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


1569467864113046953.png


开普勒平台既可以通过容器的方式跑在 Kubernetes 上,也可以独立部署。


在 kubernetes master 节点上执行即可完成部署,当然,在此之前需要增加 app.cfg 配置文件。


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


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


1569467874354013947.png


开普勒云平台通过调用 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,然后执行构建就可以完成。


1569467887384096345.png


以创建一个 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 放入项目目录,填写相关信息:


1569467899024098261.png


一个应用就创建完成了,管理员审核提交的信息是否合格,不合格便驳回;合格了就直接通过并进行部署。


部署应用会根据用户所提交的信息获取我们事先定义好的基础模版,再根据基础模版生成 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 版本并提交就行了,如下图:


1569467912274040393.png


点击详情页的 build 日志选项卡,会显示最近的构建记录,点击左侧相应的版本,可以查看该版本的构建情况,也可以对正在构建的应用进行中断,如下图:


1569467924014047050.png


3.3 日志采集

我们的日志收集采用的是低耦合、扩展性强、方便维护和升级的方案。


  • 每个节点 Filebeat 收集宿主机日志。

  • 每个 Pod 注入 Filebeat 容器收集业务日志。


Filebeat 会跟应用容器部署在一起,应用也不需要知道它的存在,只需要指定日志输入的目录就可以了。Filebeat 所使用的配置是从 ConfigMap 读取,只需要维护好收集日志的规则。


1569467935084097775.png


如果配置了上面的采集器,那么它会向服务所在的 Pod 注入一个 Filebeat 采集器对应用服务的业务日志进行采集。把采集到的日志注入到 kafka 集群,然后 logstash 进行消息处理及格式化。


处理完后入到 ES 集群,最终我们就可以通过 kibana 查询到业务日志了。


1569467945123089231.png


Filebeat 容器及 filebeat 的 ConfigMap 也可以通过模版的方式进行参数调整。


1569467957903081223.png


3.4 监控告警

应用监控告警也是非常重要的一个环节,我们采用 Prometheus+Grafana 的方案进行监控,Prometheus+AlertManager 进行告警的处理。


AlertManager 所抛出的告警信息会发送至开普勒云平台进行处理,若你在平台订阅了告警类型的消息则会发送至所订阅类型的相关工具。


我们可以在“个人设置-消息订阅设置”里选择需要订阅的类型及接收的工具:


1569467970274099279.png


以下是微信接收到的操作通知:


1569467984403096943.png


更多的教程请查阅我们提供的文档。https://docs.nsini.com


3.5 持久化存储

Kubernetes 集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用 StorageClass 来实现,允许存储卷按需被创建。 如果没有动态存储供应,Kubernetes 集群的管理员将不得不通过手工的方式来创建新的存储卷。 通过动态存储卷,Kubernetes 能够按照用户的需求,自动创建其需要的存储。


1569467998758069732.png


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


1569468013056074508.png


四、尾巴

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



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


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


2020-02-07 20:45449

评论

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

蛟分承影,雁落忘归——袋鼠云一站式全自动化运维管家ChengYing(承影)正式开源

数栈DTinsight

6 月直播 7 场干货全剧透!今天:飞腾CPU调优原理及方法 | 第 19 期

OpenAnolis小助手

cpu 直播 sig 龙蜥大讲堂 飞腾

相约龙蜥,开源一“夏”!2022编程之夏ASoC开始报名了

OpenAnolis小助手

阿里巴巴 开源项目 龙蜥社区 高校学生 技术项目

幸运哈希算法竞猜游戏开发特点分析(成熟方案)

开发微hkkf5566

定档615 | 数字化基础软件自主创新分享周即将来袭,点击获取“通关密钥”!

网易数帆

大数据 云原生 基础软件 数字化转型 自主创新

为什么你的网站需要搭建在线帮助中心?

小炮

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

Serverless Devs

Serverless wolai

2022 支付宝五福 |“联机版”打年兽背后的网络技术 RTMS

阿里巴巴终端技术

客户端 网络技术 网络通信

面试突击53:常见的 HTTP 状态码有哪些?

王磊

Java 面试

墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划

墨天轮

数据库 Apaache Doris 国产数据库

java培训 | 零基础学习java开发的学习方法有哪些

@零度

Java 学习方法

为企业业务流程提速的BPM

力软低代码开发平台

运维领域告警智能定级原理探索(含详细实验报告)

云智慧AIOps社区

运维 安全 监控 告警

为什么你的网站不被收录了呢?

源字节1号

招聘 | 上班轰趴,下班狼人杀,天天招人,怕是要发!

Alluxio

面试 程序员人生 招聘 互联网热点 Alluxio

CPU利用率从10%提升至60%:中型企业云原生成本优化实战指南

星汉未来

运维 云原生 IT成本 星汉未来 FinOps

Jetpack Composes 入门

坚果

6月月更

如何撰写数据中台蓝图方案

agileai

数据中台 企业服务总线 主数据平台 数据分析平台 蓝图方案

英特尔计划建造浸没式实验室,帮助高功率芯片快速降温

WorkPlus Lite

ironSource LevelPlay 聚合平台,现已适配应用开发框架工具包 Flutter

Geek_2d6073

【LeetCode】火柴拼正方形Java题解

Albert

LeetCode 6月月更

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

深度操作系统20.6正式发布!

深度操作系统

开源 深度操作系统 deepin20.6 新版本 深度

RxJS系列01:响应式编程与异步

代码与野兽

6月月更

《数字经济全景白皮书》证券期货用户数字化篇 重磅发布

易观分析

证券 期货

2022年4月线上终端药品增长迅猛,市场政策合规进程加快

易观分析

医药类

WASM VS EVM,波卡的选择预示了公链未来

One Block Community

区块链 公链 波卡生态

大数据培训如何使用DPM规划用户画像

@零度

大数据 dpm

各国儿童节时间是不一样的

情报分析师

数据可视化 知识图谱 儿童节

【直播回顾】参与ArkUI,共建OpenHarmony繁荣生态

OpenHarmony开发者社区

Open Harmony

Docker下RabbitMQ延时队列实战两部曲之一:极速体验

程序员欣宸

RabbitMQ 5月月更 RabbtiMQ延时队列

如何快速部署容器化应用_文化 & 方法_王聪_InfoQ精选文章