K8s部署高可用Jenkins

小伙伴们大家好呀!断更了近一个月,XiXi去学习了一下K8sJenkins的相关技术。学习内容有些庞杂,近一个月的时间里我只学会了一些皮毛,更多的内容还需要后面不断学习,不断积累。最主要的是云主机真得很贵,为了写这篇文章,我花了近200块😭
491599167.jpg

回到正题,这里我分享的成果是:在K8s上部署一套Jenkins环境,可以基于Pod实现动态的Jenkins-Slave的扩展,下面记录着我的整个搭建过程。

环境介绍

  • K8s1.28.2集群
  • 一台可以连接外网的云主机:用于下载一些Docker镜像

准备NFS制备器

在创建Jenkins之前,我们需要先在K8s集群上创建一个NFS制备器。创建NFS制备器后,我们只需要声明PVC,NFS制备器便会自动地基于NFS文件系统创建相应的PV。

NFS文件系统搭建

我们需要先搭建起一个NFS文件系统,搭建流程相当简单

  1. 每台主机上执行安装
# 安装 nfs
yum install nfs-utils -y
# 启动 nfs
systemctl start nfs-server
# 查看 nfs 版本
cat /proc/fs/nfsd/versions
  1. 选择某一台主机创建共享目录

这里我选择了内网ip:172.24.12.240的一台云主机

# 创建共享目录
mkdir -p /data/nfs/jenkins
# 设置共享目录 export
vim /etc/exports
/data/nfs/jenkins *(rw,sync,no_subtree_check,no_root_squash)
# 重新加载
exportfs -f
systemctl reload nfs-server
# 查看
showmount -e 172.24.12.240
  1. 其他机器可以挂载共享目录
mkdir -p /data/nfs/jenkins
# 注意执行mount时的目录,不要是挂载目录
mount -t nfs 172.24.12.240:/data/nfs/jenkins /data/nfs/jenkins
  1. 最终效果

最终,可以实现,在任意一台主机的 /data/nfs/jenkins中操作,都会同步到其他主机上

image.png

NFS制备器

参考官方GitHub:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

官方为我们提供了3种NFS制备器的创建方式:

  • Helm
  • Kustomize
  • 手动方式

下面我采取手动的方式给大家做个演示

步骤一:克隆官方项目

# 不管用什么方式大家将项目克隆下来就好
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git

主要是需要使用项目中deploy文件夹中的yaml文件
image.png

步骤二:修改deploy目录中的yaml的内容
注:如果制备器想创建在default命名空间,配置文件中namespace的相关内容不用改

image.png

  • class.yaml:用于创建StorageClass
  • deployment.yaml:用于创建Deployment
  • rbac.yaml:创建ServiceAccount和绑定角色
  1. class.yaml文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-jenkins-client
provisioner: xixi.io/nfs-subdir-external-provisioner
  archiveOnDelete: "false"

name:nfs-jenkins-client(可以保持原样)
provisioner: xixi.io/nfs-subdir-external-provisioner(可以保持原样,在下面的deployment.yaml文件中用到)

  1. deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-jenkins-client-provisioner
  labels:
    app: nfs-jenkins-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: kube-system
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-jenkins-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-jenkins-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-jenkins-client-provisioner
          image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              # class.yaml 中的 provisioner保持一致
              value: xixi.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 172.24.12.240
            - name: NFS_PATH
              value: /data/nfs/jenkins
      volumes:
        - name: nfs-client-root
          nfs:
            server: 172.24.12.240
            path: /data/nfs/jenkins
  • nfs的地址目录路径必改,其他的可以保持原样
  1. rbac.yaml文件
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: kube-system
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值