kubernetes跑jenkins动态slave
使用jenkins动态slave的优势:
- 服务高可用,当 Jenkins Master 出现故障时,Kubernetes 会自动创建一个新的 Jenkins Master 容器,并且将 Volume 分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。
- 动态伸缩,合理使用资源,每次运行 Job 时,会自动创建一个 Jenkins Slave,Job 完成后,Slave 自动注销并删除容器,资源自动释放,而且 Kubernetes 会根据每个资源的使用情况,动态分配 Slave 到空闲的节点上创建,降低出现因某节点资源利用率高,还排队等待在该节点的情况。
- 扩展性好,当 Kubernetes 集群的资源严重不足而导致 Job 排队等待时,可以很容易的添加一个 Kubernetes Node 到集群中,从而实现扩展。
架构图如下:
1、创建namespace
- kubectl create ns kube-ops
2、设置rba授权
- [root@node1 mingyang]# cat rbac.yaml
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- name: jenkins
- namespace: kube-ops
- ---
- kind: ClusterRole
- apiVersion: rbac.authorization.k8s.io/v1beta1
- metadata:
- name: jenkins
- rules:
- - apiGroups: ["extensions", "apps"]
- resources: ["deployments"]
- verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
- - apiGroups: [""]
- resources: ["services"]
- verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
- - apiGroups: [""]
- resources: ["pods"]
- verbs: ["create","delete","get","list","patch","update","watch"]
- - apiGroups: [""]
- resources: ["pods/exec"]
- verbs: ["create","delete","get","list","patch","update","watch"]
- - apiGroups: [""]
- resources: ["pods/log"]
- verbs: ["get","list","watch"]
- - apiGroups: [""]
- resources: ["secrets"]
- verbs: ["get"]
- ---
- apiVersion: rbac.authorization.k8s.io/v1beta1
- kind: ClusterRoleBinding
- metadata:
- name: jenkins
- namespace: kube-ops
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: jenkins
- subjects:
- - kind: ServiceAccount
- name: jenkins
- namespace: kube-ops
3、创建jenkins deployment文件
- [root@node1 mingyang]# cat jenkins.yaml
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: jenkins
- namespace: kube-ops
- spec:
- selector:
- matchLabels:
- app: jenkins
- template:
- metadata:
- labels:
- app: jenkins
- spec:
- terminationGracePeriodSeconds: 10
- serviceAccount: jenkins
- containers:
- - name: jenkins
- image: jenkins/jenkins:lts
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 8080
- name: web
- protocol: TCP
- - containerPort: 50000
- name: agent
- protocol: TCP
- resources:
- limits:
- cpu: 1000m
- memory: 1Gi
- requests:
- cpu: 500m
- memory: 512Mi
- livenessProbe:
- httpGet:
- path: /login
- port: 8080
- initialDelaySeconds: 60
- timeoutSeconds: 5
- failureThreshold: 12
- readinessProbe:
- httpGet:
- path: /login
- port: 8080
- initialDelaySeconds: 60
- timeoutSeconds: 5
- failureThreshold: 12
- volumeMounts:
- - name: jenkinshome
- subPath: jenkins
- mountPath: /var/jenkins_home
- env:
- - name: LIMITS_MEMORY
- valueFrom:
- resourceFieldRef:
- resource: limits.memory
- divisor: 1Mi
- - name: JAVA_OPTS
- value: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85 -Duser.timezone=Asia/Shanghai
- securityContext:
- fsGroup: 1000
- volumes:
- - name: jenkinshome
- hostPath:
- path: /data/jenkins_home
- type: DirectoryOrCreate
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: jenkins
- namespace: kube-ops
- labels:
- app: jenkins
- spec:
- selector:
- app: jenkins
- type: NodePort
- ports:
- - name: web
- port: 8080
- targetPort: web
- nodePort: 30002
- - name: agent
- port: 50000
- targetPort: agent
4、给jenkins家目录授权
- chown -R 1000 /data/jenkins_home/
5、运行情况
6、安装kubernetes插件Kubernetes plugin。
7、配置kubernetes
8、这一步是核心,添加pod templates。标签列表是到时编写pipeline要关联的。
9、添加两个挂载卷 分别是docker及kubectl 工具
10、测试pipeline
- node('hejianlai') {
- stage('Clone') {
- echo "1.Clone Stage"
- }
- stage('Test') {
- echo "2.Test Stage"
- }
- stage('Build') {
- echo "3.Build Docker Image Stage"
- }
- stage('Push') {
- echo "4.Push Docker Image Stage"
- }
- stage('YAML') {
- echo "5. Change YAML File Stage"
- }
- stage('Deploy') {
- echo "6. Deploy Stage"
- }
- }
11、运行结果,slave执行完任务之后自动销毁。
kubernetes跑jenkins动态slave的更多相关文章
- Kubernetes Jenkins动态创建Slave
目录 0.前言 1.Jenkins部署 2.配置jenkins动态slave 3.dubbo服务构建 3.1.制作dubbo镜像底包 3.2.制作slave基础镜像 3.2.1.Maven镜像 3.2 ...
- 基于Kubernetes构建企业Jenkins master/slave CI/CD平台
搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...
- Kubernetes DevOps: Jenkins Pipeline (流水线)
要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...
- Kubernetes DevOps: Jenkins
提到基于 Kubernete 的CI/CD,可以使用的工具有很多,比如 Jenkins.Gitlab CI 以及新兴的 drone 之类的,我们这里会使用大家最为熟悉的 Jenkins 来做 CI/C ...
- [系统集成] 基于Kubernetes 部署 jenkins 并动态分配资源
基于kubernetes 部署 jenkins master 比较简单,难点是为 jenkins 动态分配资源.基于kubernetes 为 jenkins 动态分配资源需要实现下述功能: 资源分配: ...
- jenkins中slave节点连接的两种常用方式
我们在使用jenkins的时候,一般来说肯定是有slave节点的,本来网上也有好多关于jenkins节点配置的教程,我也就不写了.简单说明一下:任务一般是在slave上面运行的.当然不是讲master ...
- kubernetes部署jenkins(Docker in Docker)及认证
引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...
- Jenkins Master/Slave架构
原文:http://www.cnblogs.com/itech/archive/2011/11/11/2245849.html 一 Jenkins Master/Slave架构 Master/Slav ...
- jenkins windows slave 报错ERROR: Error cloning remote repo 'origin'
在slave上是git clone ssh是可以成功的,但是jenkins调用slave节点就报如下错误: ERROR: Error cloning remote repo 'origin' huds ...
随机推荐
- ctfhub技能树—文件上传—MIME绕过
什么是MIME MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访 ...
- CTFhub刷题记录
一 [WesternCTF2018]shrine 没什么好说的,SSTI模版注入类问题,过滤了()但是我们不慌.开始注入,{{29*3}}测试通过. 发现是jinjia2的模版注入.关键点在于没有() ...
- Python3.9的http.client.py下的HTTPMessage类中的方法getallmatchingheaders的bug修复建议
在官方网站已经提交相关issue,不过目前看好像还没有修复.具体的bug位置为: http文件夹下的client.py文件,代码位置为:类HTTPMessage下的方法getallmatchinghe ...
- layui表格数据统计
//执行一个 table 实例 table.render({ elem: '#demo' ,height: 420 ,url: '/demo/table/user/' //数据接口 ,title: ' ...
- Redis-第五章节-8种数据类型
目录 一.Redis对key的操作 二.五种数据类型 String类型 List(集合) Set(集合) Hash(哈希) Zset(有序集合) 三.三种特殊数据类型 geospatial(地理位置) ...
- Redis 实战 —— 05. Redis 其他命令简介
发布与订阅 P52 Redis 实现了发布与订阅(publish/subscribe)模式,又称 pub/sub 模式(与设计模式中的观察者模式类似).订阅者负责订阅频道,发送者负责向频道发送二进制字 ...
- JavaScript中函数的定义!
JavaScript中函数的定义! 1 自定义函数(命名函数) function fun() {}; 2 函数表达式(匿名函数) var fun = function () {}; 3 利用 new ...
- etcd 与 Zookeeper、Consul 等其它 kv 组件的对比
基于etcd的分布式配置中心 etcd docs | etcd versus other key-value stores https://etcd.io/docs/v3.4.0/learning/w ...
- Linux centos7编译源码安装redis
1.安装准备 ① 由于redis底层用c语言编写的,安装redis需要先将官网下载的源码进行编译,编译依赖make和gcc环境,如果没有则需要安装(一般系统中已经装了了make和gcc,无须再装) 安 ...
- LOJ2130软件包
题目描述Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软 ...