在K8S中部署Jenkins

一、基础环境

1.1、NFS准备

在192.168.2.104上运行

1
2
3
4
sudo mkdir -p /data/nfs/jenkins
sudo chown -R 1000:1000 /data/nfs/jenkins
echo "/data/nfs/jenkins *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
sudo exportfs -ra

1.2、准备镜像

在192.168.2.104上运行

1
2
3
docker pull jenkins/jenkins:lts
docker tag jenkins/jenkins:lts 192.168.2.104/library/jenkins:lts
docker push 192.168.2.104/library/jenkins:lts

二、部署Jenkins

2.1、创建NameSpace

在headlamp的Namespaces界面点击+输入devops,再点击create

2.2、创建PV

创建一个jenkins-pv的pv,将下列yaml填入并创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv
spec:
  capacity:
    storage: 20Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  # 关键点:回收策略建议设为 Retain,防止误删配置导致数据丢失
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: 192.168.2.104
    path: /data/nfs/jenkins

状态为:Available

2.3、创建PVC

将该yaml填入创建一个pvc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pvc
  namespace: devops
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
  # 强制绑定到咱们刚才建的那个 PV 上
  volumeName: jenkins-pv

检查pv和pvc的状态都改为Bound

2.4、创建服务账号并分配权限

在headlamp的ServiceAccount输入如下YAML并创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
# 创建服务账号
apiVersion: v1
kind: ServiceAccount
metadata:
 name: jenkins-admin
 namespace: devops

---
# 将该账号绑定到集群管理员权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: jenkins-admin-binding
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
- kind: ServiceAccount
 name: jenkins-admin
 namespace: devops

查看状态正常

2.5、部署Deployment

将下列yaml填入Service中,进行创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: devops
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccountName: jenkins-admin # 使用上面那个有权力的账号
      containers:
      - name: jenkins
        image: 192.168.2.104/library/jenkins:lts
        ports:
        - containerPort: 8080
          name: web
        - containerPort: 50000
          name: agent # 用于 Jenkins 代理节点连接
        resources:
          limits:
            memory: "2Gi"
            cpu: "1000m"
          requests:
            memory: "512Mi"
            cpu: "500m"
        volumeMounts:
        - name: jenkins-data
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-data
        persistentVolumeClaim:
          claimName: jenkins-pvc

查看状态

2.6、创建Service

将下列yaml填入Service并创建

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: devops
spec:
  selector:
    app: jenkins
  ports:
  - name: web
    port: 8080
    targetPort: 8080
  - name: agent
    port: 50000
    targetPort: 50000

2.7、配置Ingress

在Ingress中输入如下yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins-ingress
  namespace: devops
spec:
  ingressClassName: nginx
  rules:
  - host: jenkins.xxx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jenkins
            port:
              number: 8080

点击view YAML查看到映射到地址,并写入DNS

三、系统配置

进入系统后,会需要第一次的初始化密码 在192.168.2.104上执行

1
sudo cat /data/nfs/jenkins/secrets/initialAdminPassword

拿到密码后,填入,选择安装推荐的插件即可

comments powered by Disqus