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

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 的持久化存储支持,解决 "没有存储类" 的问题。


http://www.kler.cn/a/597255.html

相关文章:

  • vue项目使用k8s动态配置环境变量(运行时)
  • 初识TensorFlow:从入门到简单应用
  • 如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南
  • Dart语言的安全开发
  • 为容器指定固定IP地址
  • 2024 浅浅总结
  • golang 生成单元测试报告
  • 我的ffmpeg爬坑之路(3)
  • SPI 机制与 Spring Boot AutoConfiguration 对比解析
  • Flink实战教程从入门到精通(基础篇)(一)Flink简介
  • web客户端存储,IndexDB相关讲解
  • NLP高频面试题(七)——GPT和Bert的mask有什么区别?
  • React 中 Context 的作用是什么,在什么场景下使用它?
  • 2025蓝桥杯JAVA编程题练习Day7
  • Kafka集成Debezium监听postgresql变更
  • 5、Pytorch 实现简单图卷积GCN,数据集Cora分类任务
  • 基于AOP注解+Redisson实现Cache-Aside缓存模式实战
  • 【八股文】http怎么建立连接的
  • NISP 无线通信安全
  • 以mysql 为例,增删改查语法及其他高级特性