目录

k8sjenkinsharbor构建Devops平台

k8s+jenkins+harbor构建Devops平台

https://i-operation.csdnimg.cn/images/cf31225e169b4512917b2e77694eb0a2.png基于K8s+Jenkins+Harbor构建DevOps平台

一、环境准备

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

https://i-blog.csdnimg.cn/direct/b08b755974aa4c398e16291158a23df1.png

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

https://i-blog.csdnimg.cn/direct/80e5c7e45b0943aeb65ab99f06eea2fe.png

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

https://i-blog.csdnimg.cn/direct/5af7bcc83dcb4260ae0631a6a92eaa30.png

7、登陆web页面配置

192.168.200.20:30002

1、获取密码

不是页面显示那个


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

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

3、创建管理员用户

四、jenkins 的 CI/CD

1、安装kubernetes插件

https://i-blog.csdnimg.cn/direct/79016387ce314e379b49f3191fc0beb3.png

(我已经安装了)

2、安装 blueocean 插件

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

https://i-blog.csdnimg.cn/direct/9a847b0954ea4fd8a0d3e446c56e231a.png

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

五、配置 jenkins 连接 k8s 集群

https://i-blog.csdnimg.cn/direct/992ef90de9c144b79cfb80e10f75b622.png

https://i-blog.csdnimg.cn/direct/a7dcb037fa18447199d4f7fe1ffbce77.png

https://i-blog.csdnimg.cn/direct/6334fd2bf2be41fda66443f2444f9c5b.png

https://i-blog.csdnimg.cn/direct/1611683981734708968ab562376538de.png

https://i-blog.csdnimg.cn/direct/ae92353cef284ed6bf4df83a90fb8492.png

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


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

https://i-blog.csdnimg.cn/direct/e41b618215754497abe881a6eadb554c.png

https://i-blog.csdnimg.cn/direct/8b7c622f4c8c4d4582d731140c7aaf3b.png

六、配置pod模板

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

这个jnlp镜像作用是:

Jenkins 构建任务的执行容器

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

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

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

https://i-blog.csdnimg.cn/direct/aef998ec02014de09e6f3ec5be87070b.png

https://i-blog.csdnimg.cn/direct/6f0ff52838e348a0aa2ad1af48df23cc.png

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

https://i-blog.csdnimg.cn/direct/a40710fe28cf45c18448ab59d57bd74c.png

https://i-blog.csdnimg.cn/direct/07b39620b8be4ea98227dcbc1c562149.png


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

https://i-blog.csdnimg.cn/direct/09388ad98b634728a2afde0fe25c6186.png

https://i-blog.csdnimg.cn/direct/c17ad5bb4dbf43c98b97cdf63fe79306.png

保存就可以了

七、配置凭据

https://i-blog.csdnimg.cn/direct/44952ecea9cd4ddd836c260d767a0a0e.png

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

https://i-blog.csdnimg.cn/direct/478747d652224242b0c023dddc83a87b.png

https://i-blog.csdnimg.cn/direct/5a29cbc6dfe4482eb23e5e087df01d26.png

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

https://i-blog.csdnimg.cn/direct/6df5d7605bc44aa0b58c27bf9c527c07.png

1、编写pipeline脚本

https://i-blog.csdnimg.cn/direct/bd92aae96c27421c9b8d75d7ac5a2d32.png

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

https://i-blog.csdnimg.cn/direct/47ab9255906b46e6845beaa4acbc23e7.png

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

https://i-blog.csdnimg.cn/direct/178efd79178449c398453b3fb8704c23.png


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