实验步骤如下:
-
- 第一部分:安装持久化存储nfs
1、在k8s-master和k8s-node1上安装nfs服务
[root@k8s-master ~]# yum install nfs-utils -y
[root@k8s-master ~]# systemctl start nfs
[root@k8s-master ~]# systemctl enable nfs
[root@k8s-node1 ~]# yum install nfs-utils -y
[root@k8s-node1 ~]# systemctl start nfs
[root@k8s-node1 ~]# systemctl enable nfs
[root@k8s-node2 ~]# yum install nfs-utils -y
[root@k8s-node2~]# systemctl start nfs
[root@k8s-node2 ~]# systemctl enable nfs
2、在k8s-master上创建一个nfs共享目录
[root@k8s-master ~]# mkdir /data/v2 -p
[root@k8s-master ~]# vim /etc/exports
/data/v2 *(rw,no_root_squash)
3、使nfs配置文件生效
[root@k8s-master ~]# exportfs -arv
[root@k8s-master ~]# systemctl restart nfs
-
- 第二部分:基于nfs做持久化存储pv
1、创建名称空间
[root@k8s-master ~]# kubectl create namespace jenkins-k8s
2、创建pv
[root@k8s-master]# kubectl apply -f pv.yaml
3、查看pv是否创建成功
[root@k8s-master]# kubectl get pv
pv.yaml文件内容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-K8s-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.190.61
path: /data/v2
4、创建pvc
[root@k8s-master]# kubectl apply -f pvc.yaml
5、查看pvc是否创建成功
[root@k8s-master]# kubectl get pvc -n jenkins-k8s
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-K8s-pvc namespace: jenkins-K8s spec: resources: requests: storage: 10Gi accessModes: - ReadWriteMany |
-
- 第三部分:在K8s集群安装Jenkins
1、创建一个sa账号
[root@k8s-master]# kubectl create sa jenkins-k8s-sa -n jenkins-k8s
2、把上面的sa账号做rbac授权
[root@k8s-master]# kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa
3、通过deployment部署jenkins
[root@k8s-node1 ~]# docker pull jenkins/jenkins:latest
[root@k8s-node1 ~]# docker load -i jenkins-jnlp.tar.gz
4、更新资源清单文件
[root@k8s-master]# kubectl apply -f jenkins-deployment.yaml
5、查看jenkins是否创建成功
[root@k8s-master jenkins]# kubectl get pods -n jenkins-k8s
6、看到jenkins-5fc55f45f4-vltrr是CrashLoopBackOff状态,查看日志:
[root@k8s-master]# kubectl logs jenkins-5fc55f45f4-vltrr -n jenkins-k8s
日志信息显示:
touch: cannot touch '/var/jenkins_home/copy_reference_file.log
'
: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume
permissions?
7、报错显示没有权限操作/var/jenkins_home/copy_reference_file.log文件,解决办法如下:
[root@k8s-master]# kubectl delete -f jenkins-deployment.yaml
[root@k8s-master]# chown -R 1000.1000 /data/v2
[root@k8s-master]# kubectl apply -f jenkins-deployment.yaml
8、查看pod是否创建成功:
[root@k8s-master]# kubectl get pods -n jenkins-k8s
显示如下,说明部署成功了:
9、把jenkins前端加上service,提供外部网络访问
[root@k8s-master]# kubectl apply -f jenkins-service.yaml
10、查看service是否创建成功
[root@k8s-master]# kubectl get svc -n jenkins-k8s
-
- 第四部分:配置Jenkins
1、在浏览器访问jenkins的web界面: http://192.168.190.61:30002/login?from=%2F
得到密码:
cat /data/v2/jenkins-home/secrets/initialAdminPassword
ae00364cab9c42adb2edc09b0c592473
11、通过上面可以看到service的8080端口在物理机映射的端口是30002
第四部分:配置Jenkins 2、获取管理员密码: 在nfs服务端,也就是我们的master1节点获取密码: [root@k8s-master ~]# cat /data/v2/jenkins-home/secrets/initialAdminPassword
-
- 第五部分:测试Jenkins CI/CD流水线-扩展
这部分内容
1、Jenkins安装K8s插件
2、Jenkins安装Blueocean插件
3、配置Jenkins连接K8s集群
4、配置Jenkins slave pod模板
5、Jenkins ui界面添加dockerhub凭据
6、测试Jenkins发布应用到K8s测试、开发、生产环境-通过pipeline实现
7、基于Jenkins+K8s+Nexus+Sonarqube+gitlab+SpringCloud构建DevOps流水线
具体发布流程如下:
开发提交代码到代码仓库gitlab-jenkins检测到代码更新-调用K8s api在K8s中创建
jenkins slave pod:
Jenkins slave pod拉取代码---通过maven把拉取的代码进行构建成war包或者jar包--->上传代码到Sonarqube,进行静态代码扫描- -->基于war包构建docker image-->把镜像上传到harbor镜像仓库-->基于镜像部署应用到开发环境-->部署应用到测试环境--->部署应用到生产环境