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 小时前
Elasticsearch安装启动常见问题全解析
大数据·elasticsearch·jenkins
ChaITSimpleLove4 小时前
零代码入侵:Kubernetes 部署时自动注入 kube-system UID 到 .NET 9 环境变量
kubernetes·.net·环境变量·uid·kube-system·集群环境唯一id
無名之輩6 小时前
Nvidia Device Plugin入门三之volume mount策略
kubernetes
zzz.108 小时前
【Kubernetes知识点】CRD客户资源定义及Gateway
云原生·容器·kubernetes
泡沫冰@20 小时前
K8S集群管理(3)
云原生·容器·kubernetes
nathan05291 天前
Kubernetes 实战练习指南
云原生·容器·kubernetes
小阳睡不醒1 天前
小白成长之路-jenkins使用pipline部署
运维·jenkins
無名之輩1 天前
Nvidia Device Plugin入门二之envvar策略
kubernetes
syty20201 天前
K8s是什么
容器·kubernetes·dubbo