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 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
阿里云云原生4 天前
Kubernetes 官方再出公告,强调立即迁移 Ingress NGINX
kubernetes
至此流年莫相忘4 天前
Kubernetes实战篇之配置与存储
云原生·容器·kubernetes
至此流年莫相忘5 天前
Kubernetes实战篇之服务发现
容器·kubernetes·服务发现
only_Klein5 天前
Kubernetes 版本升级
容器·kubernetes·upgrade
海兰5 天前
Jina Embeddings V5 Text + Elasticsearch 9.x 本地部署指南
elasticsearch·jenkins·jina
sanyii3131315 天前
k8s核心资源Pod-主容器之存活性探测
云原生·容器·kubernetes
luod5 天前
Docker 快速安装Jenkins
java·docker·jenkins
小道仙975 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest