k8s+jenkins+harbor构建Devops平台

一、环境准备

1、准备一主一从k8s机器,(设备好可以一主多从也行)

2、一台harbor仓库机器(dockerhub访问不了)

二、安装nfs服务

1、在k8s机器上

bash 复制代码
yum install nfs-utils -y
systemctl start nfs
systemctl enable nfs

2、创建共享目录

bash 复制代码
mkdir /data/v1 -p    #看你喜欢

chown -R 1000.1000 /data/v1
bash 复制代码
vim /etc/exportfs

/data/v1 192.168.200.0/24(rw,no_root_squash)
bash 复制代码
##使配置文件生效
exportfs -arv
systemctl restart nfs

#######为了后面pod的pv和pvc持久化存储

三、安装jenkins

1、创建命名空间

bash 复制代码
kubectl create namespace jenkins-k8s

2、创建pv

bash 复制代码
[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是否创建成功

bash 复制代码
kubectl get pv

3、创建pvc

bash 复制代码
[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
bash 复制代码
kubectl get pvc -n jenkins-k8s

4、创建sa账号(在k8s中与Kubernetes API 的交互)

bash 复制代码
kubectl create sa jenkins-k8s-sa -n jenkins-k8s

做rbac授权

bash 复制代码
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版本上,否则有一些插件安装不了、

bash 复制代码
[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
bash 复制代码
kubectl apply -f jenkins-deployment.yaml

6、service外部网络访问

bash 复制代码
[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、获取密码

不是页面显示那个

bash 复制代码
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+端口号

bash 复制代码
http://jenkins-service.jenkins-k8s.svc.cluster.local:8080

六、配置pod模板

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

这个jnlp镜像作用是:

Jenkins 构建任务的执行容器

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

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

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

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

bash 复制代码
##添加卷
/var/run/docker.sock 
/var/run/docker.sock 
 
/root/.kube 
/home/jenkins/.kube

保存就可以了

七、配置凭据

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

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

1、编写pipeline脚本

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

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


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

相关推荐
众人皆醒我独醉3 分钟前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情1 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
老马历写记2 小时前
【无标题】
maven·devops
潮起鲸落入海7 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
摇滚侠8 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
咕噜咕噜的猪大侠10 小时前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes
摇滚侠10 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 26-40
java·云原生·kubernetes
AOwhisky1 天前
kubernetes(K8s)学习笔记:第十期与第十一期核心知识点自测与详解
运维·笔记·云原生·kubernetes·云计算·k8s·hpa
想你依然心痛1 天前
AtomCode 在 DevOps 场景中的实战:CI/CD 流水线脚本自动生成
运维·ci/cd·docker·devops·自动化部署·github actions