一、环境准备
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脚本的编写,怎么去贯通,提升效率,最重要的也是这个了。