永远热爱,永远期待❤|

StupidCN

园龄:6年1个月粉丝:0关注:0

NFS安装和基于K8S的使用

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服务

  1. 安装
centos: yum install -y nfs-common nfs-utils rpcbind
ubuntu: apt install rpcbind nfs-server nfs-kernel-server -y
  1. 创建目录并赋权
mkdir /nfs_dir # 当然可以是其他目录
chmod 666 /nfs_dir
【centos执行,Ubuntu不需要】chown nfsnobody /nfs_dir
  1. 修改配置文件/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)
  1. 上述配置文件含义解析
/nfs_dir #代表共享出来的目录
* #允许*/24的网络访问此共享。
rw #表示权限 读写
sync #表示同步写入
no_root_squash #表示客户机以root访问时赋予本地root权限,如果设置成all_squash会出现任何用户都无法访问挂载目录的情况
  1. 启动服务并设置为自启动
【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

  1. 添加并更新repo
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update nfs-subdir-external-provisioner
  1. 查询可用版本
$ 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...
  1. 下载指定的charts
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.18
  1. 安装
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
  1. 卸载
helm uninstall nfs-subdir-external-provisioner --namespace nfs-sc
  1. 验证
$ 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

测试使用

  1. 应用部署文件
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
  1. 验证查看
[root@xxx default-test-pvc-8254afc5-5630-49fe-810a-25cbba09f18c]# ls -l
总用量 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]# pwd
/nfs_dir/default-test-pvc-8254afc5-5630-49fe-810a-25cbba09f18c

本文作者:StupidCN

本文链接:https://www.cnblogs.com/adblogs/p/18632909

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   StupidCN  阅读(91)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起