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

k8s存储类-storageclass部署

目录

一、部署

1、在k8s集群外部署一台nfs存储主机

2、在k8s集群所有主机中部署nfs-utils

3、配置nfs主机上的共享目录

4、启动nfs

5、查看共享目录

6、创建运行nfs-provisioner需要的sa账号

7、安装nfs-provisioner存储制备器

8、创建storageclass存储类

9、创建pvc,通过storageclass动态生成pv

10、创建pod,挂载storageclass动态生成的pvc:storage-pvc

apiVersion: v1kind: Podmetadata: name: read-pod1 namespace: newnfsspec: containers: - name: nginx   image: nginx   imagePullPolicy: IfNotPresent   volumeMounts:   - name: nginx-html     mountPath: /usr/share/nginx/html volumes:   - name: nginx-html     persistentVolumeClaim:       claimName: storage-pvc      ​编辑二、验证是否挂载成功                 

1、到nfs主机共享目录中创建index.html文件

2、在k8s集群中访问read-pod1的IP

3、多个pod可以共同挂载一个nfs共享目录,实现目录共享


一、nfs主机端部署

1、在k8s集群外部署一台nfs存储主机

2、在k8s集群所有主机中部署nfs-utils

yum install -y nfs-utils

3、配置nfs主机上的共享目录

vim /etc/exports

/data 192.168.33.0/24(rw,sync,no_root_squash,no_subtree_check)

4、启动nfs主机上的nfs

systemctl enable --now nfs

5、查看共享目录

shoumount -e

二、k8s集群master节点部署

1、创建运行nfs-provisioner需要的sa账号

apiVersion: v1
kind: Namespace
metadata:
  name: newnfs
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: newnfs
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: newnfs
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  namespace: newnfs
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  namespace: newnfs
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: newnfs
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

2、安装nfs-provisioner存储制备器

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
  namespace: newnfs
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate        #设置升级策略为删除再创建(默认为滚动更新)
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner  #上一步创建的ServiceAccount名称
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME  # Provisioner的名称,以后设置的storageclass要和这个保持一致
              value: storage-nfs
            - name: NFS_SERVER        # NFS服务器地址,需和valumes参数中配置的保持一致
              value: 192.168.33.200
            - name: NFS_PATH          # NFS服务器数据存储目录,需和volumes参数中配置的保持一致
              value: /data
            - name: ENABLE_LEADER_ELECTION
              value: "true"
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.33.200       # NFS服务器地址
            path: /data        # NFS共享目录

3、创建storageclass存储类

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  namespace: newnfs
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"  ## 是否设置为默认的storageclass
provisioner: storage-nfs                                   ## 动态卷分配者名称,必须和上面创建的deploy中环境变量“PROVISIONER_NAME”变量值一致
parameters:
  archiveOnDelete: "true"                                 ## 设置为"false"时删除PVC不会保留数据,"true"则保留数据
mountOptions: 
  - hard                                                  ## 指定为硬挂载方式
  - nfsvers=4                ## 指定NFS版本,这个需要根据NFS Server版本号设置(nfsstat查看)

 

4、创建pvc,通过storageclass动态生成pv

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: storage-pvc
  namespace: newnfs
spec:
  storageClassName: nfs-storage    ## 需要与上面创建的storageclass的名称一致
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi

5、创建pod,挂载storageclass动态生成的pvc:storage-pvc

apiVersion: v1
kind: Pod
metadata:
 name: read-pod1
 namespace: newnfs
spec:
 containers:
 - name: nginx
   image: nginx
   imagePullPolicy: IfNotPresent
   volumeMounts:
   - name: nginx-html
     mountPath: /usr/share/nginx/html
 volumes:
   - name: nginx-html
     persistentVolumeClaim:
       claimName: storage-pvc

                       

三、验证是否挂载成功

1、到nfs主机共享目录中创建index.html文件

2、在k8s集群中访问read-pod1的IP

3、多个pod可以共同挂载一个nfs共享目录,实现目录共享

  • 创建一个新pod并挂载同一个pvc “storage-pvc”

  • 访问pod2的IP

http://www.dtcms.com/a/343577.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(18):文法+单词第6回1
  • OpenHarmony之 蓝牙子系统全栈剖析:从协议栈到芯片适配的端到端实践(大合集)
  • 如何正确地捕获并处理异步操作中的错误
  • K 均值聚类算法学习总结
  • Flutter 线程模型详解:主线程、异步与 Isolate
  • 深入 RxJava 插件化开发:打造自定义操作符与监控体系
  • 物理电气协议标准:RS485 RS232
  • llama.cpp docker 镜像pull国内加速地址
  • 餐饮供应链:餐饮的“后端定海神针”
  • 《JavaScript不可变数据实践:Object.freeze与Proxy的实现逻辑、性能博弈及场景选型》
  • 详细讲解Java中的反射和经典面试题(保姆级别)
  • 【STM32入门教程】新建工程
  • 如何高效撰写AI领域学术论文——学习笔记
  • 【动手学深度学习】6.2. 图像卷积
  • DeepSeek-V3.1震撼升级:推理与Agent双突破
  • 20250820:一波三折!老设备国标接入 EasyGBS 的 “排雷” 记:从无流到花屏,换个协议全搞定
  • 8.21学习总结
  • 08.20CSP模拟赛总结
  • 中文房间悖论:人工智能理解力的哲学拷问
  • 【网络运维】Shell:变量进阶知识
  • MTK Linux DRM分析(十)- KMS drm_connector.c
  • Pandas 数据组合与缺失值处理最新版本
  • 如何自定义一个SpringBoot Starter
  • Document Solutions .NET Bundle 8.2.0
  • C++ 入门核心知识
  • 【时时三省】汽车安全 专栏简介
  • strspn函数详解
  • TorchInductor - Introduction
  • 50 C++ STL模板库-算法库 algorithm
  • 使用C++17标准 手写一个vector