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

相关推荐
运维开发故事5 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson7 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生7 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Java之美8 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
java_cj15 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
醉颜凉15 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
qq_4523962315 天前
第十三篇:《K8s 安全基础:RBAC、ServiceAccount、Pod Security》
java·安全·kubernetes
睡不醒男孩03082315 天前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
qq_4523962315 天前
第十四篇:《K8s 网络模型与 CNI 插件(Calico、Flannel、Cilium)》
网络·kubernetes·php