Jenkins X--(1)基本概念和最佳实践



概念

Jenkins X是基于Kubernetes的持续集成、持续部署平台。也是Jenkins的子项目。Jenkins X旨在使程序员在研发过程中能够轻松遵循DevOps原理和最佳实践。

介绍

Jenkins X是研发过程和工具的选择,以及将所有东西包装成一个易于学习和使用的内聚单元的胶水。从事软件行业的人总是倾向于重新发明轮子。我们花了无数个小时试图找出如何更快地开发我们的应用程序,以及如何拥有一个尽可能接近生产的本地环境。我们花时间搜索工具,使我们能够更有效地打包和部署我们的应用程序。我们设计形成连续输送管道的步骤。我们编写脚本来自动执行重复的任务。然而,我们无法逃避这样一种感觉:我们很可能正在重新创造别人已经做过的事情。Jenkins X旨在帮助我们做出这些决定,并帮助我们为工作选择正确的工具。这是一个行业最佳实践的集合。在某些情况下,Jenkins X是定义这些实践的人,而在其他情况下,它帮助我们采用其他人的实践。

比如当我们开始一个新的项目,Jenkins x将创建结构和所需的文件。如果我们需要一个kubernetes集群,其中包含选择、安装和配置的所有工具,Jenkins X将执行此操作。如果我们需要创建git存储库、设置webhook和创建连续的传递管道,我们只需要执行一个jx命令。

原则

“DevOps是旨在缩短将源代码发布到生产环境时间的一组实践。这里不仅仅减少从源代码更改到最后生产环境发布的时间差,同时还要确保系统的高质量,”

DevOps项目的目标是:

1、更快的上市时间

2、提高部署频率

3、更短的修复时间

4、降低发布失败率

5、更快的平均恢复时间

高效团队应该每天能够部署多次,远高于每周一次到每月一次的行业平均水平。

从“提交的代码”状态到“生产中的代码”状态的时间应少于一小时,更改失败率应少于15%,而业界平均比例高达31-45%。

从故障中恢复的平均时间也应少于一小时。

Jenkins X从最初的设计就是基于这些原则,允许团队应用DevOps最佳实践来达到行业顶峰的绩效目标。

最佳实践

以下最佳实践被认为是成功运行DevOps方法的关键:

1、松耦合架构

2、自助服务配置

3、自动部署和管理资源

4、持续构建/集成和交付

5、自动发布管理

6、增量测试

7、基础结构配置为代码

8、全面的配置管理

9、基于主干的开发和功能标志

Jenkins X将许多业界熟悉的方法和组件整合到一个系统中,从而最大程度地减少了复杂性。

架构

Jenkins X建立在松耦合架构的DevOps模型的基础上,用以支持多个团队可重复的方式部署大量分布式微服务。


概念模型


构建

Jenkins X建立在以下核心组件之上:

Kubernetes & Docker

该系统的核心是Kubernetes,它已成为DevOps的事实上的虚拟基础架构平台。现在,每个主要的云提供商都提供Kubernetes基础架构服务。如果需要,Kubernetes也可以内部安装在私有云基础架构上。还可以使用Minikube安装程序在本地开发硬件上创建测试环境。

在功能上,Kubernetes平台扩展了以跨越多个物理节点的Docker容器。

简而言之,Kubernetes提供了一个同类的虚拟基础架构,可以通过添加或删除节点来动态扩容。每个节点都可参与单个大型专用虚拟网络空间。

Kubernetes中的部署单位是Pod,pod可以包含一个或多个Docker容器和一些元数据。Pod中的所有容器共享相同的虚拟IP地址和端口空间。Kubernetes的部署是声明式的。当用户指定要部署Pod的版本和数量后,Kubernetes通过跨节点部署或删除Pod来决定从当前状态到所需状态所需的操作。关于如何配置Pod的具体特性则被系统可用资源,所需资源和标签匹配的影响。部署后,Kubernetes会定期进行健康状况检查,通过终止和替换无响应的Pod来确保每种类型的Pod所需保持数量。

为了确定某种结构,Kubernetes允许创建虚拟命名空间Namespace,该命名空间可用于逻辑上分隔Pod,并将Pod组与特定资源相关联。例如,命名空间中的资源可以共享一个安全策略。资源名称在命名空间内必须唯一,但可以在不同命名空间中重用。

在Jenkins X模型中,一个Pod相当于一个已部署的微服务实例(在大多数情况下)。在需要水平扩展微服务的情况下,Kubernetes允许部署多个相同运行实例的Pods,而每个实例都有其自己的虚拟IP地址。它们可以聚合到一个称为服务Service的虚拟节点中,该节点有唯一的静态IP地址和与该服务名称匹配的本地DNS条目。对该服务的调用会动态随机映射到某个健康Pod实例的IP。服务还可以用于重新映射端口。在Kubernetes虚拟网络中,可以使用以下格式的使用完全域名来调用服务:“..svc.cluster.local”,可以将其缩写为 “.” 或在属于相同名称空间Namespace的情况下仅为“”。比方说,在“finance” 的名称空间下调用RESTful服务“payment”,就可以在代码中根据调用代码的位置来决定是“http://payments.finance.svc.cluster.local”,“http://payments.finance”或只是“http://payments”。

要从外部网络访问本地服务,Kubernetes要求为每个服务创建一个Ingress。最常见的形式是使用一个或多个带有静态IP地址的负载均衡器,该负载均衡器位于Kubernetes虚拟基础架构之外,并将网络请求路由到映射的内部服务。通过为负载均衡器的静态IP地址创建外部DNS条目,可以将服务映射到外部完全限定域名。例如,如果我们的负载均衡器映射到“* .jenkins-x.io”,那么我们的付款服务可能会显示为“http://payments.finance.jenkins-x.io”。

Kubernetes代表了一个强大且不断更新的可用于大规模部署服务的平台。但是一般研发人员也很难理解和操作Kubernetes的负责配置。Jenkins X为Kubernetes带来了一组默认配置和一些简化的工具,这些工具目的就是优化DevOps和简化松耦合服务的管理。

“jx”命令行工具提供了对Kubernetes实例进行一些常见操作的简单方法,例如查看日志和连接到容器实例。此外,Jenkins X通过扩展Kubernetes命名来创建Environments,这些Environments可以流水线的方式链接在一起形成不断升级的发布管道。

Jenkins X Environment可以给研发团队的一个给定虚拟基础架构环境,例如Dev,Staging,Production等。通过定义环境之间的升级规则,构建完的代码可以在流水线里的各个环境上进行自动或手动发布。每个环境均按照GitOps方法进行管理环境的状态在Git存储库里来维护,向Git存储库提交或回滚变更会触发Kubernetes中给定环境状态的相应改变。

在Jenkins X的系统里,我们可以使用jx create cluster命令直接创建Kubernetes集群,从而在发生故障时轻松地复制集群。同样,我们可以使用“jx upgrade platform” 在现有集群上升级Jenkins X平台。Jenkins X支持通过jx context处理多个Kubernetes集群,并支持jx environment切换在同一个集群中的不同环境。

开发人员应了解Kubernetes提供在整个群集中分发配置和安全凭证的功能。ConfigMap可用于为非机密配置元数据创建名称/值对name/value pairs的集合,同时Secrets则对安全凭证和令牌执行加密保护的机制。Kubernetes还提供了一种为Pod指定资源配额的机制,这对于优化跨节点的部署是必要的。

默认情况下,Pod状态为瞬态。删除该Pod时,写入Pod本地文件系统的所有数据都会丢失。开发人员应注意,作为Node常规负载平衡过程的一部分,Kubernetes可能会在任何时候单方面决定删除Pods实例并重新创建它们,因此本地数据可能随时丢失。如果需要保存状态数据,则需要声明持久保留的储存空间,并将其安装在特定Pod的文件系统中。

Helm and Draft

用户如果直接与Kubernetes交互,可以使用kubectl命令行进行手动配置,或将各种类型的YAML数据传递给Kubernetes API Server。这个操作过程可能很复杂,并且容易出现人为错误。根据DevOps的“将代码配置为代码”原则,Jenkins X利用Helm和Draft两个开源软件来为用户的应用程序创建原子配置单元。

Helm通过Chart的方式简化了Kubernetes的配置。Chart是一组文件,这些文件共同指定了将给定应用程序或服务部署到Kubernetes中所需的元数据。Helm并没有使用基于Kubernetes API的一系列样板YAML文件,而是使用模板语言从单个共享值集来创建所需的YAML规范文件。这使得在可重用的Kubernetes应用程序进行部署时,可以选择性地重新定义配置。

参考:JenkinsX官网

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • 1、基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer、scheduler...
    阿斯蒂芬2阅读 10,868评论 0 44
  • 寒江雪水平天阔, 千里马上送军行。 不恨西风碾花落, 却留城中忆旧人。
    北槐向暖阅读 203评论 0 6
  • 今天重温了一遍《前任攻略》。整部电影能撩动我的就是罗茜那声孟云,和她订婚宴上的告白。那种爱而不得的撕心裂肺,经历过...
    zixuan_xie阅读 177评论 0 0
  • 01 “好久没见你上线了。会玩了吗?” “现在你的补刀怎么样了?” “等我这局打完,要不要一起来一局?” 林书刚登...
    新一读阅阅读 677评论 10 7