1、Jenkins部署分析
既然是基于Kubernetes 来实现 CI/CD,那么最好将 Jenkins以 Pod 的形式运行在Kubernetes集群中。其次Jenkins没有数据库,所有的数据都存储在本地,所以只需要将Jenkins的数据目录持久化下来就可以了。
在 Kubenetes 环境下所起的应用都是一个个 Docker 镜像,为了保证应用重启的情况下数据安全,所以需要将 Jenkins 持久化到存储中。这里用的是 NFS 网路存储,方便在 Kubernetes 环境下应用启动节点转义数据一致。当然也可以选择存储到本地,但是为了保证应用数据一致,需要设置 Jenkins 固定到某一 Kubernetes 节点。详情请看之前的搭建 nfs 服务器,这里不过多叙述。

2、下载Jenkins镜像
1.下载镜像
2.打标签
3.创建RBAC,后期Jenkins需要创建 Slave Pod来完成流水线的执行,为此我们需要一些权限;
[root@node ~]# docker pull
jenkins/jenkins:2.346.3-2-lts
root@node ~]# docker tag
jenkins/jenkins:2.346.3-2-lts
[root@master jenkins]# cat jenkins-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: jenkins
namespace: ops
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jenkins
rules:
- apiGroups: ["extensions", "apps"]
resources: ["deployments", "ingresses"]
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", "events"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get"]
apiVersion: rbac.authorization.k8s.io/v1
#创建Service
kind: ClusterRoleBinding
metadata:
name: jenkins
namespace: ops
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: jenkins
subjects:
- kind: ServiceAccount
name: jenkins
namespace: ops
[root@master jenkins]# cat jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins-svc
namespace: ops
spec:
clusterIP: None
selector:
app: jenkins
ports:
- name: http
port: 8080
targetPort: 8080
- name: agent
port: 50000
[root@master jenkins]# cat jenkins-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: jenkins
namespace: ops
spec:
serviceName: "jenkins-svc"
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
containers:
- name: jenkins
image:192.167.16.6/ops/jenkins:2.346
imagePullPolicy: IfNotPresent
env:
- name: JAVA_OPTS
value: -
Duser.timezone=Asia/Shanghai
ports:
- name: http
containerPort: 8080
- name: agent
containerPort: 50000
resources:
limits:
cpu: 1500m
memory: 2048Mi
volumeMounts:
- name: data
mountPath: /var/jenkins_home
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "nfs-provisionerstorage"
resources:
requests:
storage: 100Gi

----------------------end---------------------
推荐阅读
1、K8s最佳实践Kubernetes-Rancher2.x持续交付与自动化运维
5、第4节 Kubernetes标签Label和标签选择器实战

如果本文对你有帮助的话,欢迎点赞&在看&转发,这对我继续分享&创作优质文章非常重要。感谢🙏🏻
请点赞→点亮“在看”→分享
↓↓↓




