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

相关推荐
南宫乘风1 天前
Kubernetes 本地存储实战:Open-Local 从部署到生产级应用
云原生·容器·kubernetes
K_Men1 天前
springboot 接入Elasticsearch的聚合查询
spring boot·elasticsearch·jenkins
电商API&Tina1 天前
【电商API接口】多电商平台数据API接入方案(附带实例)
运维·开发语言·数据库·chrome·爬虫·python·jenkins
eddy-原1 天前
ELKStack 与 Kubernetes 核心基础知识点综合作业
云原生·容器·kubernetes
ygqygq22 天前
Kubernetes Gateway API 与 Envoy Gateway 部署使用指南
kubernetes·gateway·envoy·ingress
Code知行合壹2 天前
Kubernetes微服务DevOps
微服务·kubernetes·devops
怪我冷i2 天前
win11使用minikube搭建K8S集群基于podman desktop( Fedora Linux 43)
linux·kubernetes·ai编程·ai写作·podman
victory04312 天前
K8S 从Harbor当中拉取镜像 连接方法
云原生·容器·kubernetes
陈陈CHENCHEN2 天前
【Kubernetes】K8s 1.35 配置 Docker 作为容器运行时
docker·kubernetes
梁萌2 天前
Jenkins自动化部署(docker)
docker·自动化·jenkins·流水线·cicd·smartadmin