StorageClass介绍
StorageClass是Kubernetes资源类型的一种,它由管理员为管理Persistent Volume(PV)之便而按需创建的类别(逻辑组)。StorageClass的主要作用包括动态存储卷分配、存储卷的属性管理以及存储资源的管理。
StorageClass可以定义PV的属性,如存储的大小、类型等,以及创建这种PV需要使用到的存储插件,如Ceph、NFS等。有了这些信息,Kubernetes就能够根据用户提交的Persistent Volume Claim(PVC),找到对应的StorageClass,然后调用StorageClass声明的存储插件,创建出需要的PV。
此外,StorageClass还可以将存储资源进行分类管理,方便开发者根据应用程序的需求进行选择。每个StorageClass都有一个供应商(Provisioner),用来决定使用哪个卷插件制备PV。
因此,StorageClass为管理员提供了描述存储“类”的方法,不同的类型可能会映射到不同的服务质量等级或备份策略,或是由集群管理员制定的任意策略
NFS介绍
NFS代表网络文件系统(Network File System),它是一种分布式文件系统协议,用于在计算机系统之间共享文件和目录。NFS的工作原理是将文件系统挂载到远程计算机上,使得远程计算机可以像访问本地文件系统一样访问共享的文件和目录。它使用客户端-服务器模型,其中客户端计算机通过网络连接到NFS服务器,请求访问共享的文件和目录。NFS服务器将文件和目录的内容传输到客户端计算机上,使得客户端可以像访问本地文件系统一样访问共享的文件和目录。
实验介绍
由于没有独立的存储服务器,这里仅仅在linux/Centos7服务器中安装nfs服务并指定特定目录为存储后端的路径来作为nfs服务器演示。并作为K8S的后端存储创建StorageClass,从而动态的创建PV。
实验步骤
安装配置nfs服务
- 安装
| centos: yum install -y nfs-common nfs-utils rpcbind |
| ubuntu: apt install rpcbind nfs-server nfs-kernel-server -y |
- 创建目录并赋权
| mkdir /nfs_dir # 当然可以是其他目录 |
| chmod 666 /nfs_dir |
| 【centos执行,Ubuntu不需要】chown nfsnobody /nfs_dir |
- 修改配置文件/etc/exports # 没有的话需要创建
| centos: /nfs_dir *(rw,no_root_squash,no_all_squash,sync) |
| ubuntu: /nfs_dir *(rw,async,insecure,no_subtree_check,no_root_squash) |
- 上述配置文件含义解析
| /nfs_dir #代表共享出来的目录 |
| * #允许*/24的网络访问此共享。 |
| rw #表示权限 读写 |
| sync #表示同步写入 |
| no_root_squash #表示客户机以root访问时赋予本地root权限,如果设置成all_squash会出现任何用户都无法访问挂载目录的情况 |
- 启动服务并设置为自启动
| 【centos】 |
| systemctl start rpcbind && systemctl enable rpcbind |
| systemctl start nfs && systemctl enable nfs |
| 【ubuntu】 |
| systemctl enable rpcbind nfs-server |
| systemctl start rpcbind nfs-server |
注意
其他想要使用该nfs服务的服务器都需要安装rpcbind包
| centos: yum install -y nfs-utils rpcbind |
| ubuntu: apt install rpcbind nfs-server nfs-kernel-server -y |
使用
到这里,NFS服务器端就配置完成了,下面这一步是客户端想要挂载NFS服务器端到本地的步骤。
| mkdir LOCAL_mount_path |
| showmount -e NFS_server_ip # 查看NFS服务器可被我挂载的路径信息,一般如下 |
| Export list for NFS_server_ip: |
| NFS_server_mout_path * |
| |
| centos: mount -t nfs NFS_server_ip:NFS_server_mout_path LOCAL_mount_path # 执行挂载 |
| ubuntu: mount -t nfs -o rw NFS_server_ip:NFS_server_mout_path LOCAL_mount_path # 执行挂载 |
| |
| umount LOCAL_mount_path # 解除挂载 |
| rm -rf LOCAL_mount_path # 删除数据 |
Kubernetes && NFS Server
Helm部署NFS的SC
开源的项目地址为https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
- 添加并更新repo
| helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/ |
| helm repo update nfs-subdir-external-provisioner |
- 查询可用版本
| $ helm search repo nfs-subdir-external-provisioner --versions |
| NAME CHART VERSION APP VERSION DESCRIPTION |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.18 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.17 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.16 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.15 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.14 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.13 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.12 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.11 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.10 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.9 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.8 4.0.2 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.6 4.0.1 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.5 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.4 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.3 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.2 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.1 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 4.0.0 4.0.0 nfs-subdir-external-provisioner is an automatic... |
| nfs-subdir-external-provisioner/nfs-subdir-exte... 3.0.0 3.1.0 nfs-subdir-external-provisioner is an automatic... |
- 下载指定的charts
| helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.18 |
- 安装
| helm upgrade -install nfs-subdir-external-provisioner nfs-subdir-external-provisioner-4.0.18.tgz --namespace nfs-sc --create-namespace \ |
| --set nfs.server=x.x.x.x \ |
| --set nfs.path=/exported/path \ |
| --set storageClass.name=nfs-client |
| # registry.k8s.io的镜像拉取不下来的情况下,可使用如下命令: |
| helm upgrade -install nfs-subdir-external-provisioner nfs-subdir-external-provisioner-4.0.18.tgz --namespace nfs-sc --create-namespace \ |
| --set nfs.server=x.x.x.x \ |
| --set nfs.path=/exported/path \ |
| --set storageClass.name=nfs-client \ |
| --set image.repository=k8s.dockerproxy.com/sig-storage/nfs-subdir-external-provisioner |
- 卸载
| helm uninstall nfs-subdir-external-provisioner --namespace nfs-sc |
- 验证
| $ kubectl get pods -n nfs-sc |
| NAME READY STATUS RESTARTS AGE |
| nfs-subdir-external-provisioner-8559f7d5d9-gqhls 1/1 Running 0 14s |
| $ kubectl get sc |
| NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE |
| nfs-client cluster.local/nfs-subdir-external-provisioner Delete Immediate true 20s |
测试使用
- 应用部署文件
| apiVersion: v1 |
| kind: Service |
| metadata: |
| name: test |
| labels: |
| app: test |
| spec: |
| ports: |
| - port: 8000 |
| protocol: TCP |
| targetPort: 8000 |
| name: console |
| nodePort: 32152 |
| selector: |
| app: test |
| type: NodePort |
| --- |
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: test |
| labels: |
| app: test |
| spec: |
| replicas: 1 |
| selector: |
| matchLabels: |
| app: test |
| template: |
| metadata: |
| labels: |
| app: test |
| spec: |
| restartPolicy: Always |
| containers: |
| - name: test |
| image: test:v1 |
| resources: |
| limits: |
| cpu: 1 |
| memory: 1Gi |
| requests: |
| cpu: 400m |
| memory: 400Mi |
| volumeMounts: |
| - mountPath: /app/logs |
| name: log-volume |
| ports: |
| - containerPort: 8000 |
| protocol: TCP |
| volumes: |
| - name: log-volume |
| persistentVolumeClaim: |
| claimName: test |
| --- |
| kind: PersistentVolumeClaim |
| apiVersion: v1 |
| metadata: |
| name: test |
| spec: |
| storageClassName: nfs-client |
| accessModes: |
| - ReadWriteOnce |
| resources: |
| requests: |
| storage: 2Gi |
- 验证查看
| [root@xxx default-test-pvc-8254afc5-5630-49fe-810a-25cbba09f18c] |
| 总用量 196 |
| -rw-r--r-- 1 root root 197757 4月 13 13:24 2024-04-13.log |
| [root@xxx default-test-pvc-8254afc5-5630-49fe-810a-25cbba09f18c] |
| /nfs_dir/default-test-pvc-8254afc5-5630-49fe-810a-25cbba09f18c |
本文作者:StupidCN
本文链接:https://www.cnblogs.com/adblogs/p/18632909
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步