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 如下图这样就代表部署成功,后续用浏览器就能直接打开

相关推荐
ysu_031415 小时前
【2026】K8s GPU调度空占怎么解?Kueue与Volcano Gang配置
云原生·kubernetes·gpu算力·volcano·ai基础设施·kueue·gang scheduling
哈__1 天前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
九皇叔叔1 天前
K8S 资源菜单
docker·容器·kubernetes·k8s
安易算力1 天前
PUE优化工程实践:从1.5到1.2的制冷架构与气流组织改造路径
网络·python·容器·架构·kubernetes
kuroomi2 天前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
程序猿阿越2 天前
containerd如何创建Pod
后端·kubernetes·源码阅读
安易算力3 天前
昇腾生态开发深度实践:CANN算子库架构解析与MindSpore模型优化
网络·容器·架构·kubernetes·vllm
九皇叔叔3 天前
Kubernetes 核心概念:集群架构、核心组件与资源对象
docker·容器·kubernetes·k8s
weixin_420284143 天前
Kubernetes 开发自定义CRD资源
云原生·kubernetes·kubelet
极小狐3 天前
CI 算力饥渴症:Runner 弹性伸缩的架构权衡与落地
ci/cd·kubernetes·devops·弹性伸缩