kubernetes跑jenkins动态slave
2024-08-29 06:02:47
使用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执行完任务之后自动销毁。
最新文章
- bootstrap基本模板
- css中filter:alpha透明度使用
- iOS开发 字符串MD5加密
- 轻量级Java_EE企业应用实战-第5章Hibernate的基本用法-001
- Antelope与 Barracude MYSQL 文件格式
- UILabel设置富文本格式显示
- Head First 设计模式 第6章 命令模式
- 201521123057 《Java程序设计》第9周学习总结
- datatables里面的search怎么去掉?
- LeetCode第五十八题
- centos部署flask
- Navicat 连接Oracle时提示oracle library is not loaded的问题解决
- C# - 匿名对象取值
- Mac系统安装和卸载brew包管理
- in linux system of ftp command
- Django之ORM数据库
- string的深入理解
- Win7 x86内核调试与TP反调试的研究
- Unity3D学习笔记——GUI高级组件
- PMON使用手册
热门文章
- 使用line_profiler对python代码性能进行评估优化
- VMware下安装Ubantu 18.04
- ECharts特效-折线图上一个光点来回移动
- rbd-db数据迁移至外部数据库
- 最佳的思维导图生成工具——markmap 使用教程
- Windows和Linux下apache-artemis-2.10.0安装配置
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
- MySQL的索引为什么用B+Tree?InnDB的数据存储文件和MyISAM的有何不同?
- Spring|SpringMVC中的注解
- SpringBoot使用SpringDataJPA完成CRUD