k8s+jenkins+harbor构建Devops平台

发布于:2025-09-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、环境准备

1、准备一主一从k8s机器,(设备好可以一主多从也行)

2、一台harbor仓库机器(dockerhub访问不了)

二、安装nfs服务

1、在k8s机器上

yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs

2、创建共享目录

mkdir /data/v1 -p    #看你喜欢

chown -R 1000.1000 /data/v1
vim /etc/exportfs

/data/v1 192.168.200.0/24(rw,no_root_squash)
##使配置文件生效
exportfs -arv
systemctl restart nfs

#######为了后面pod的pv和pvc持久化存储

三、安装jenkins

1、创建命名空间

kubectl create namespace jenkins-k8s

2、创建pv

[root@master1 ~]# cat pv.yaml 
apiVersion: v1 
kind: PersistentVolume 
metadata: 
  name: jenkins-k8s-pv 
spec: 
  capacity: 
    storage: 10Gi 
  accessModes: 
  - ReadWriteMany 
  nfs: 
    server: 192.168.200.20 
    path: /data/v2


#创建资源清单
 kubectl apply -f pv.yaml

查看pv是否创建成功

kubectl get pv

3、创建pvc

[root@master1 ~]# cat pvc.yaml 
kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
  name: jenkins-k8s-pvc 
  namespace: jenkins-k8s 
spec: 
  resources: 
    requests: 
      storage: 10Gi 
  accessModes: 
  - ReadWriteMany


#创建资源清单
kubectl apply -f pvc.yaml
kubectl get pvc -n jenkins-k8s

4、创建sa账号(在k8s中与Kubernetes API 的交互)

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

做rbac授权

kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa


###把名为 jenkins-k8s-sa 的 ServiceAccount 绑定到 cluster-admin ClusterRole,从而赋予它 整个集群的管理员权限。
Jenkins 使用这个 SA 启动后,通过 Kubernetes 插件或 kubectl 调用 API 时,会有集群管理员权限。

5、过 deployment 部署 jenkins

#jenkins的镜像要在2.4版本上,否则有一些插件安装不了、

[root@master1 ~]# cat jenkins-deployment.yaml 
kind: Deployment
apiVersion: apps/v1
metadata:
  name: jenkins
  namespace: jenkins-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      serviceAccount: jenkins-k8s-sa
      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: 90
          timeoutSeconds: 45
          failureThreshold: 2
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
          initialDelaySeconds: 90
          timeoutSeconds: 45
          failureThreshold: 2
        volumeMounts:
        - name: jenkins-volume
          subPath: jenkins-home
          mountPath: /var/jenkins_home
      volumes:
      - name: jenkins-volume
        persistentVolumeClaim:
          claimName: jenkins-k8s-pvc
kubectl apply -f jenkins-deployment.yaml

6、service外部网络访问

[root@master1 ~]# cat jenkins-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: jenkins-k8s
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  type: NodePort
  ports:
  - name: web
    port: 8080
    targetPort: web
    nodePort: 30002
  - name: agent
    port: 50000
    targetPort: agent

7、登陆web页面配置

192.168.200.20:30002

1、获取密码

不是页面显示那个

cat /data/v1/jenkins-home/secrets/initialAdminPassword

2、按照页面显示安装推荐插件(不行的话也没事)

3、创建管理员用户

四、jenkins 的 CI/CD

1、安装kubernetes插件

(我已经安装了)

2、安装 blueocean 插件

这是一个提供现代化、可视化、用户友好的 Pipeline 展示界面

重启之后登陆 jenkins,插件即可生效

五、配置 jenkins 连接 k8s 集群

这个地址由Kubernetes 中 Service 的名字+命名空间+svc.cluster.local+端口号

http://jenkins-service.jenkins-k8s.svc.cluster.local:8080

六、配置pod模板

这个看主要项目是怎么执行的

这个jnlp镜像作用是:

Jenkins 构建任务的执行容器

它的职责就是:启动后用 JNLP 协议连上 Jenkins Master,然后等着执行任务。

Jenkins Master 不负责跑任务,只负责调度,真正的构建/部署任务是在 Agent(jnlp 容器)里跑的

(因为我的jenkins是用k8s跑的)

镜像是在harbor仓库里,也可以直接用其他的,就是会慢

##添加卷
/var/run/docker.sock 
/var/run/docker.sock 
 
/root/.kube 
/home/jenkins/.kube

保存就可以了

七、配置凭据

我用harbor仓库,配的是harbor的账号密码

八、通过 Jenkins 部署应用发布到 k8s 开发环境、测试环境、生产环境

1、编写pipeline脚本

主要就是看脚本怎么编写了

最后大功告成,流程是这么个流程,大差不差


####差不多是点点点,主要是pod.yaml编写和pipeline脚本的编写,怎么去贯通,提升效率,最重要的也是这个了。


网站公告

今日签到

点亮在社区的每一天
去签到