CI/CD(三) 安装nfs并指定k8s默认storageClass

一、NFS 服务端安装(主节点 10.60.0.20)

1. 安装 NFS 服务端

sudo apt update

sudo apt install -y nfs-kernel-server

2. 创建共享目录并配置权限

sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s

# 允许匿名访问

sudo chmod 777 /data/k8s

3. 配置 NFS 导出规则

编辑 /etc/exports 文件:

sudo nano /etc/exports

添加以下内容(允许从节点读写):

/data/k8s *(rw,sync,no_subtree_check,no_root_squash)

4. 启动并验证 NFS 服务

sudo systemctl restart nfs-kernel-server

sudo systemctl enable nfs-kernel-server

# 检查导出列表

sudo exportfs -v

二、NFS 客户端安装(所有节点)

1. 所有节点安装 NFS 客户端

sudo apt update sudo apt install -y nfs-common

2. 手动挂载测试(可选)

# 在从节点测试挂载

sudo mkdir -p /mnt/nfs

sudo mount 10.60.0.20:/data/k8s /mnt/nfs

# 验证挂载

df -h | grep nfs

3. 配置持久化挂载(所有节点)

sudo nano /etc/fstab

添加:

10.60.0.20:/data/k8s /mnt/nfs nfs defaults 0 0

执行挂载:

sudo mount -a

三、Kubernetes 配置 NFS 存储类

1. 创建 ServiceAccount 和 RBAC 权限
bash 复制代码
# nfs-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: nfs-provisioner-binding
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

应用配置:

bash 复制代码
kubectl apply -f nfs-rbac.yaml
2. 部署 NFS Provisioner
bash 复制代码
# nfs-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-provisioner
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      serviceAccountName: nfs-provisioner
      containers:
        - name: nfs-client
          image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 10.60.0.20  # 主节点 IP
            - name: NFS_PATH
              value: /data/k8s    # 共享目录路径
          volumeMounts:
            - name: nfs-root
              mountPath: /persistentvolumes
      volumes:
        - name: nfs-root
          nfs:
            server: 10.60.0.20
            path: /data/k8s
应用配置:
bash 复制代码
kubectl apply -f nfs-provisioner.yaml
3. 创建默认 StorageClass
bash 复制代码
# nfs-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: fuseim.pri/ifs
parameters:
  archiveOnDelete: "false"

应用配置:

bash 复制代码
kubectl apply -f nfs-storageclass.yaml

四、验证存储类

检查存储类状态

bash 复制代码
kubectl get sc
# 输出应显示 nfs-storage 为 DEFAULT

测试 PVC 创建

bash 复制代码
# test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-storage
  resources:
    requests:
      storage: 1Gi

应用并验证:

bash 复制代码
kubectl apply -f test-pvc.yaml
kubectl get pvc test-pvc  # 状态应为 Bound

常见问题处理

  • 挂载失败 :检查主节点防火墙是否开放 2049(NFS)、111(RPC)端口

  • PVC 未绑定 :检查 nfs-provisioner Pod 日志:

    bash 复制代码
    kubectl logs -l app=nfs-provisioner
  • 权限拒绝 :确保共享目录权限为 777,且 /etc/exports 中配置了 no_root_squash

    通过以上步骤,可为 Kubernetes 集群提供基于 NFS 的持久化存储支持,解决 "没有存储类" 的问题。

相关推荐
檀越剑指大厂1 小时前
【Docker系列五】Docker Compose 简介
运维·docker·容器
XMYX-04 小时前
Docker-Compose 实战:解决 Zookeeper 容器挂载错误及 ulimit 配置问题
docker·zookeeper
JxHillMan5 小时前
Ubuntu 上安装 Docker
linux·ubuntu·docker
ONE_PUNCH_Ge5 小时前
Ubuntu Docker 安装
docker
云上艺旅6 小时前
K8S学习之基础四十四:k8s中部署Kibana
学习·云原生·容器·kubernetes
林润庚9 小时前
k8s kubernetes dashboard一直CarshLoopBackoff
云原生·容器·kubernetes
小树ZW10 小时前
在centos下部署docker+nginx+qinglong
nginx·docker·全栈
Hurry611 小时前
openEuler 基于 sealos 部署 k8s 1.30 集群
运维·容器·kubernetes·sealos
青柚~12 小时前
【yolo11自定义实例分割训练集教程】
人工智能·深度学习·神经网络·yolo·目标检测·docker
YAMLMaster12 小时前
K8s 跨集群通信的“量子纠缠”:当 DNS 黑洞吞没你的服务请求
网络·云原生·容器·kubernetes·devops