当前位置: 首页 > news >正文

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 权限
# 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

应用配置:

kubectl apply -f nfs-rbac.yaml
2. 部署 NFS Provisioner
# 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
应用配置:
kubectl apply -f nfs-provisioner.yaml
3. 创建默认 StorageClass
# 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"

应用配置:

kubectl apply -f nfs-storageclass.yaml

四、验证存储类

检查存储类状态

kubectl get sc
# 输出应显示 nfs-storage 为 DEFAULT

测试 PVC 创建

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

应用并验证:

kubectl apply -f test-pvc.yaml
kubectl get pvc test-pvc  # 状态应为 Bound

常见问题处理

  • 挂载失败:检查主节点防火墙是否开放 2049(NFS)、111(RPC)端口 
     
  • PVC 未绑定:检查 nfs-provisioner Pod 日志:
    kubectl logs -l app=nfs-provisioner
  • 权限拒绝:确保共享目录权限为 777,且 /etc/exports 中配置了 no_root_squash 

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

相关文章:

  • 【C++】深入理解list迭代器的设计与实现
  • Java对象的hashcode
  • Fiddler抓包工具最快入门
  • 【005安卓开发方案调研】之Flutter+Dart技术开发安卓
  • 【PromptCoder + Trae】三分钟复刻 Spotify
  • 洛谷 P3228 [HNOI2013] 数列
  • 深度解读DeepSeek:开源周(Open Source Week)技术解读
  • 机器学习——KNN模型评价
  • 【用 Trace读源码】PlanAgent 执行流程
  • AMD公司
  • 附——教6
  • Windows faster whisper GUI-v0.8.5-开源版[AI支持超过100种语言的人声分离/声音转文本字幕]
  • 【Java篇】静动交融,内外有别:从静态方法到内部类的深度解析
  • STM32复位
  • 小米AX6000上安装tailscale
  • 【机器学习】机器学习工程实战-第2章 项目开始前
  • Lineageos 22.1(Android 15)制定应用强制横屏
  • Redis Cluster 详解
  • 维普AIGC降重方法有哪些?
  • 查找重复代码[A卷-hw_od]
  • 魔都眼·上海车展④|奔驰宝马保时捷……全球豪车扎堆首秀
  • 上海小朋友喜欢读什么书?来看这份“少年儿童阅读报告”
  • 最高法典型案例:学生在校受伤,学校并非必然担责
  • 一场12年的马拉松,他用声音陪伴中国路跑成长
  • 新证据表明:地球水或为“自产”而非“外来”
  • 细说汇率 ⑬ 美元进入“全是坏消息”阶段