Jenkins kubernetes插件的原理

栏目: IT技术 · 发布时间: 4年前

内容简介:技术干货,可收藏,点“在看”后,再看。使用Kubernetes插件时,我们需要做三件事情:

Jenkins kubernetes插件的原理

技术干货,可收藏,点“在看”后,再看。

如何使用

使用Kubernetes插件时,我们需要做三件事情:

  1. 根据官方文档,在Jenkins上加入kubernetes配置。

  2. 在Jenkinsfile中加入kubernetes agent的申明。

  3. 指定容器执行你的业务脚本。

关于第2点,kubernetes agent的申明又有两种方式。一种是脚本式的,代码样例如下:

一种是申明式,代码样例如下:

笔者推荐使用申明式。yaml配置部分看起来并不优雅,这是另一个话题。咱们今后再讲。

原理

我们都知道Jenkins是master/agent的架构。而master与agent之间通信方法有两种:

  1. 通过JNLP协议:需要启动JNLP客户端主动连接master。这是Kubernetes插件使用的方式。

  2. 通过SSH协议:master使用SSH主动连接agent机器。

Kubernetes插件的具体的做法就是连接到Kubernetes集群,然后启动一个Pod。Pod中包含一个JNLP客户端,容器名约定为:jnlp。jnlp 会主动连接Jenkins master。

所以,当你发现Jenkins任务的日志中,一直在等待jnlp连接时,我们可以这样查问题:

  1. 查看相应的Pod是否存活。

  2. jnlp 容器连接不上master:大概率是配置不对。

可是,我们看到上面的示例代码中,都没有叫jnlp的容器呢。这是因为Jenkins kubernates插件在真正创建pod前,为我们混入了默认的jnlp的容器定义。也就是,最终执行的yaml其实是:

最后,pod启动后,pod中的jnlp容器会连上Jenkins master。当pipeline运行到以下代码:

kubernates插件会找到名为 maven 的容器,然后将闭包内的代码发给它执行。

以上基本就是kubernates插件全部。

更换jnlp实现

当我们知道它的原理后,我们也就可以更换jnlp的实现镜像了。比如有些同学是在arm架构的机器上执行Kubernetes的,那么,他可以创建一个基于arm架构的jnlp镜像,然后,加入到yaml中。比如:

小结

总的来说,它的原理无非就是创建pod,pod中的jnlp容器连接到Jenkins master,然后Jenkins master根据需要,将需要执行的命令发送给相应的容器执行。

附录

  1. Jenkins kubernetes源码:https://github.com/jenkinsci/kubernetes-plugin

  2. 混入jnlp容器的代码位置:  org.csanchez.jenkins.plugins.kubernetes.PodTemplateBuilder#build()

  3. 创建pod的代码位置:  org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher#launch


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

另一个地球

另一个地球

[美]马克·格雷厄姆、威廉·H·达顿 / 胡泳、徐嫩羽 / 电子工业出版社 / 2015-10-1 / 78

互联网在日常工作和生活中扮演日益重要的角色,互联网将如何重塑社会?本书通过汇集有关互联网文化、经济、政治角色等问题的研究成果,提供了特定社会制度背景下解决这一问题的根本办法。 关于互联网的研究是蓬勃发展的崭新领域,牛津大学互联网研究院(OII)作为创新型的跨学科学院,自成立起就专注于互联网研究。牛津大学互联网研究院关于互联网+社会的系列讲座在一定程度上塑造了互联网+社会。本书内容基于不同学科......一起来看看 《另一个地球》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具