设为首页 收藏本站
查看: 881|回复: 0

[经验分享] [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源

[复制链接]

尚未签到

发表于 2018-1-4 12:00:41 | 显示全部楼层 |阅读模式
  2017年3月10日注:
  这篇文章发布在去年8月,现在,jenkins kubernetes 插件已经由0.8更新到了0.11,jnlp-slave 也更新到了2.62,新版本与老版本在运行方式和功能上均发生了一些变化,请您注意参考相关文档。
  2017年4月7日注:
  新版本的 kubernetes plugin (0.11) 以及 jnlp-slave(2.62) 仍然是可用的,有两点需要注意:
  1)建议基于官方的 jnlp-slave:2.62 构建自己的 jnlp 镜像,然后在jenkins kubernetes 插件的 template 中设置单容器,并且将容器的名称设置为 jnlp,否则 jenkins 会从外网下载默认的 jnlp 镜像,耗时而且存在问题。
  2)下述参数不要采用默认值,用图中的值替换默认值
  Command to run slave agent: (留空)
  Arguments to pass to the command: ${computer.jnlpmac} ${computer.name}
  Allocate pseudo-TTY: 不选
  ---- 截图 ----

  ----------- 原文 -----------
  基于kubernetes 部署 jenkins master 比较简单,难点是为 jenkins 动态分配资源。基于kubernetes 为 jenkins 动态分配资源需要实现下述功能:


  • 资源分配:jenkins 根据任务属性自动创建临时 docker 容器,并作为 slave 节点加入 jenkins 集群,实现资源的分配;
  • 资源释放:任务执行结束后,jenkins 自动删除相关节点,并销毁相关 docker 容器,实现资源的释放;
  整个资源分配和资源释放过程对用户来说是透明的,用户只需要创建好任务就可以了,不需要操作节点;对于jenkins来说,slave 节点(容器)是临时的,任务一结束就会销毁。
  为了实现数据持久化,建议把需要持久化的数据挂载到 NFS 或 glusterfs卷上。

1. 准备 docker 镜像
  #jenkins master
  jenkins:2.7.2
  #jenkins slave
  jenkinsci/jnlp-slave:2.52

2. 部署 jenkins master
  分别部署 controller, service, ingress,controller 控制 master 容器,ingress 提供用户访问入口。
  

1 kind: Deployment  

2 metadata:  

3   name: jenkins  

4 spec:  

5   replicas: 1  
6   strategy:
  
7     type: RollingUpdate
  
8     rollingUpdate:
  
9       maxSurge: 2
  
10       maxUnavailable: 0
  
11   template:
  
12     metadata:
  
13       labels:
  
14         app: jenkins
  
15     spec:
  
16       imagePullSecrets:
  
17       - name: myregistrykey
  
18       containers:
  
19       - name: jenkins
  
20         image: registry.gkkxd.com/jenkins:2.7.2
  
21         imagePullPolicy: IfNotPresent
  
22         ports:
  
23         - containerPort: 8080
  
24           name: web
  
25           protocol: TCP
  
26         - containerPort: 50000
  
27           name: agent
  
28           protocol: TCP
  
29         volumeMounts:
  
30         - name: jenkinshome
  
31           mountPath: /var/jenkins_home
  
32         env:
  
33         - name: JAVA_OPTS
  
34           value: "-Duser.timezone=Asia/Shanghai"
  
35       volumes:
  
36       - name: jenkinshome
  
37         nfs:
  
38           server: 172.31.17.74
  
39           path: "/var/nfsshare/k8s/jenkins/home"
  

  

1 kind: Service  

2 apiVersion: v1  

3 metadata:  

4   labels:  

5       app: jenkins  

6   name: jenkins  

7 spec:  

8   ports:  

9   - port: 8080  
10     targetPort: 8080
  
11     name: web
  
12   - port: 50000
  
13     targetPort: 50000
  
14     name: agent
  
15   selector:
  
16     app: jenkins
  

  

1 kind: Ingress  

2 metadata:  

3   name: jenkins  

4 spec:  

5   tls:  

6   - hosts:  

7     - jenkins.gkkxd.com  

8     secretName: jenkins-secret  

9   rules:  

10   - host: jenkins.gkkxd.com  

11     http:  

12       paths:  

13       - backend:  

14           serviceName: jenkins  

15           servicePort: 8080  
16         path: /
  


3. 安装 jenkins Kubernetes 插件
  登录 jenkins master,根据页面提示,输入 /home/jenkins_home/下的密钥文件里的密钥,进入插件安装界面,选择 Kubernetes Plugin 安装。

4. 创建 jenkins Kubernetes 云
  jenkins-系统管理-系统设置-云-Kubernetes:
  Name: k8s_cluster
  Kubernetes URL: https://kubernetes.default
  Kubernetes Namespace: default
  Jenkins URL: http://jenkins.default:8080
  images - Kubernetes Pod Template:
  Name: jnlp-slave
  Labels: jnlp-slave
  Docker image: registry.gkkxd.com/jenkinsci/jnlp-slave:2.52
  Jenkins slave root directory: /home/jenkins


5. 查看无任务状态

5.1 jenkins
  节点中只有一个master,没有 slave节点


5.2 kubernetes
  只有 jenkins master pod


6. 创建测试任务
  该任务选择标签为 jnlp-slave 的镜像作为执行任务的容器的镜像,构建动作是 ping www.baidu.com

  建好后执行该任务

7. 查看任务执行状态

7.1 jenkins
  jenkins 自动创建了一个slave节点


7.2 kubernetes
  kubernetes pod中多出一个jnlp-slave-开头的pod


8. 结束任务
  结束任务后,刚才看到的slave 节点被自动删除,kubernetes 中 jnlp-slave 开头的 pod 也消失了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431479-1-1.html 上篇帖子: Kubernetes外挂配置管理 下篇帖子: [经验交流] Kubernetes Nginx Ingress 安装与使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表