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