一、環境準備
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: jenkinsnamespace: jenkins-k8s spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:serviceAccount: jenkins-k8s-sacontainers:- name: jenkinsimage: jenkins/jenkins:ltsimagePullPolicy: IfNotPresentports:- containerPort: 8080name: webprotocol: TCP- containerPort: 50000name: agentprotocol: TCPresources:limits:cpu: 1000mmemory: 1Girequests:cpu: 500mmemory: 512MilivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 90timeoutSeconds: 45failureThreshold: 2readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 90timeoutSeconds: 45failureThreshold: 2volumeMounts:- name: jenkins-volumesubPath: jenkins-homemountPath: /var/jenkins_homevolumes:- name: jenkins-volumepersistentVolumeClaim: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-servicenamespace: jenkins-k8slabels:app: jenkins spec:selector:app: jenkinstype: NodePortports:- name: webport: 8080targetPort: webnodePort: 30002- name: agentport: 50000targetPort: 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腳本的編寫,怎么去貫通,提升效率,最重要的也是這個了。