k8s创建pv和pvc部署jenkins

安装 NFS 服务端

powershell 复制代码
sudo apt update 
sudo apt install -y nfs-kernel-server
# 创建挂载路径
sudo mkdir -p /mnt/nfs_data
# 修改配置
vim /etc/exports
# 允许 所有网段读写,同步写入,保留客户端 root 权限 
# *要挨着括号
/mnt/nfs_data *(rw,sync,no_root_squash)
# 重新加载所有共享(-a:全部,-r:重新导出,-v:详细输出)
exportfs -arv
# 启动 NFS 服务
systemctl restart nfs-kernel-server && systemctl enable nfs-kernel-server
# 检查状态
systemctl status nfs-kernel-server
# 检查是否挂载好
showmount -e localhost

创建 namespaces

powershell 复制代码
kubectl create ns jenkins

PV 的 yaml文件

一个使用 NFS 存储卷的 PV 示例

yaml 复制代码
# pv-nfs.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nfs-2g
spec:
  volumeMode: Filesystem                 # 存储卷模式,默认为 Filesystem (文件系统) 和 Block(块)
  capacity:                              # 存储能力
    storage: 2Gi                         # 容量大小,Gi 或 Mi
  accessModes:                           # 访问模式
    - ReadWriteMany                      # 访问模式
  persistentVolumeReclaimPolicy: Retain  # 回收策略
  storageClassName: nfs 
  nfs:                                   # 持久卷类型(如 hostPath、nfs、ceph 等)
    path: /mnt/nfs_data/pv_nfs_2g        # 存储路径要确保已经存在
    server: 10.0.3.100

创建pv

powershell 复制代码
kubectl apply -f pv-nfs.yaml

PVC 的 yaml文件

yaml 复制代码
# pvc-jenkins.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-jenkins
  namespace: jenkins         # 与 Deployment 同命名空间
spec:
  accessModes:
    - ReadWriteMany          # 与 pv 里面的相同
  resources:
    requests:
      storage: 2Gi
  volumeName: pv-nfs-2g       #  与 PV 的 Name 一致
  storageClassName: nfs       #  与 PV 的 StorageClass 一致

创建pvc

powershell 复制代码
kubectl apply -f pvc-jenkins.yaml

创建deploy

kubectl apply -f deploy_jenkins.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: jenkins
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: jenkins-server
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: jenkins-server
    spec:
      containers:
      - image: docker.io/jenkins/jenkins:jdk17
        imagePullPolicy: IfNotPresent
        livenessProbe:
          httpGet:
            path: /login
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 300
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
          timeoutSeconds: 5
        name: jenkins
        ports:
        - containerPort: 8080
          name: httpport
          protocol: TCP
        - containerPort: 50000
          name: jnlpport
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /login
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 120
          periodSeconds: 10
          successThreshold: 1
          failureThreshold: 3
          timeoutSeconds: 5
        resources:
          limits:
            cpu: "2"
            memory: 4Gi
          requests:
            cpu: "1"
            memory: 1Gi
        securityContext:
          privileged: true
          runAsUser: 0
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/jenkins_home
          name: jenkins-data
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      volumes:
      - name: jenkins-data
        persistentVolumeClaim:
          claimName: pvc-jenkins

创建svc

kubectl apply -f svc_jenkins.yaml

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  labels:
    app: jenkins-server
  name: jenkins-svc
  namespace: jenkins
spec:
  ports:
  - name: service-jenkins
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: jenkins-server
  type: ClusterIP

创建Ingress Controller

Ingress资源要正常工作,集群中必须要有个Ingress Controller来解析Ingress的转发规则

参考文档:https://blog.csdn.net/weixin_46887489/article/details/134586363

查看集群中定义的 IngressClass

powershell 复制代码
kubectl get ingressclass

创建Ingress

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins
  namespace: jenkins
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/whitelist-source-range: "0.0.0.0/0"
spec:
  ingressClassName: nginx-master
  rules:
  - host: jenkinss.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jenkins-svc
            port:
              number: 8080

本地配置hosts

域名任意配置一个节点的IP

curl 测试

curl jenkinss.com 如下图这样就代表部署成功,后续用浏览器就能直接打开

相关推荐
有谁看见我的剑了?4 小时前
K8s crictl 客户端学习
学习·容器·kubernetes
KubeSphere 云原生4 小时前
云原生周刊:Kubernetes 1.35 新机制与云原生生态更新
云原生·容器·kubernetes
腾讯数据架构师6 小时前
cube studio 存储资源对接ceph
ceph·kubernetes·cube-studio·ai平台
青衫客3621 小时前
浅谈Kubernetes在systemd cgroup模式下的Slice/Scope组织结构
云原生·容器·kubernetes
王九思21 小时前
Podman 介绍
docker·云原生·kubernetes·podman
gsls2008081 天前
jenkins插件 Publish Over SSH 离线下载安装配置
ubuntu·ssh·jenkins·插件·离线
Gold Steps.1 天前
K8S基于 Argo Rollouts 的高级版本发布实践
云原生·容器·kubernetes
a努力。1 天前
宇树Java面试被问:数据库死锁检测和自动回滚机制
java·数据库·elasticsearch·面试·职场和发展·rpc·jenkins
孤岛悬城1 天前
61 K8s之Pod控制器与配置资源管理
云原生·容器·kubernetes