k8s共享存储之nfs
admin
2023-02-01 15:44:31
0

特别说明:测试使用,不建议生产环境

1、在master节点配置(node1)

1)yum安装nfs

# yum -y install nfs-utils

NFS的关键工具包括:

主要配置文件:/etc/exports;

NFS文件系统维护命令:/usr/bin/exportfs;

共享资源的日志文件: /var/lib/nfs/*tab;

客户端查询共享资源命令: /usr/sbin/showmount;

端口配置: /etc/sysconfig/nfs。

2)新建共享目录

# mkdir -p /data/volunes

3)设置Nfs权限

# cat /etc/exports

k8s共享存储之nfs

权限参数说明:

ro  只读访问

rw  读写访问

sync    所有数据在请求时写入共享

async   nfs在写入数据前可以响应请求

secure  nfs通过1024以下的安全TCP/IP端口发送

insecure    nfs通过1024以上的端口发送

wdelay  如果多个用户要写入nfs目录,则归组写入(默认)

no_wdelay   如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置

hide    在nfs共享目录中不共享其子目录

no_hide 共享nfs目录的子目录

subtree_check   如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)

no_subtree_check    不检查父目录权限

all_squash  共享文件的UID和GID映射匿名用户anonymous,适合公用目录

no_all_squash   保留共享文件的UID和GID(默认)

root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)

no_root_squash  root用户具有根目录的完全管理访问权限(不安全)

anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID

anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID

4)启动服务

# systemctl enable nfs.service

# systemctl start nfs.service

# exportfs  -arv #不用重启nfs服务,配置文件就会生效

2、在节点node2和node3配置Nfs

1)安装

yum -y install nfs-utils

2)在node3和node2上挂载:

# mount -t nfs 172.160.45.160:/data/volunes/ /mnt

3、检查

1)#查看 RPC 服务的注册状况

rpcinfo -p localhost

2)#showmount测试

showmount -e 172.160.45.160

4、kubernetes使用NFS共享存储有两种方式:

#手动方式静态创建所需要的PV和PVC;

#通过创建PVC动态地创建对应PV,无需手动创建PV;

k8s共享存储之nfs

################静态创建#######################

1)静态申请PV卷

PersistentVolumes,是k8s抽象化的存储资源,主要包括存储能力、访问模式、存储类型、回收策略等关键信息.PV是k8s实际对接存储后端的真正入口;

#创建pv对应目录

# mkdir -p /data/volunes/v{1,2,3}

#配置exportrs

# cat /etc/exports

k8s共享存储之nfs

#立即生效

# exportfs  -arv


2)创建pv文件

# vim nfs-pv1.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: nfs-pv1

labels:

pv: nfs-pv1

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

persistentVolumeReclaimPolicy: Recycle

storageClassName: nfs

nfs:

path: /data/volunes/v1

server: 172.160.45.160

nfs-pv2.yaml类似


配置说明:

① capacity 指定 PV 的容量为 1G。

② accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:

ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载;

ReadOnlyMany(ROX):只读权限,可以被多个节点挂载;

ReadWriteMany(RWX):读写权限,可以被多个节点挂载;

③ persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有:

Retain(保留)- 保留数据,不会再分配给pvc,需要管理员手工清理数据;

Recycle(回收)- 清除 PV 中的数据,保留pv资源,可以留供其他pvc使用;

Delete(删除)- 删除整个pv资源及内部的数据;

④ storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。

⑤ 指定 PV 在 NFS 服务器上对应的目录。

#创建pv的pod

# kubectl create-f nfs-pv1.yaml

# kubectl get pv

k8s共享存储之nfs

状态Available,表示 pv就绪,可以被 PVC 申请;

3)创建PVC

PersistentVolumeClaims,是对PV资源的一种声明,pvc绑定实体资源pv后,pod通过绑定pvc来使用pv资源.PVC是k8s的一种抽象化的声明式绑定存储资源的管理模式的中间层,pod无法直接通过pv使用存储资源,必须经过pvc,而pvc必须要绑定pv实体后,才可被pod使用;

# vim nfs-pvc2.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: nfs-pvc2

spec:

accessModes:

- eadWriteMany

resources:

requests:

storage: 1Gi

storageClassName: nfs

selector:

matchLabels:

pv: nfs-pv2

执行yaml文件创建 pvc

# kubectl create -f nfs-pvc1.yaml

k8s共享存储之nfs

查看pv资源

k8s共享存储之nfs

备注:pv对应绑定的PVC

4)创建pod

[root@node1 yaml]# vim nfs-nginx.yaml

apiVersion: v1

kind: ReplicationController

metadata:

name: nginx-test

labels:

name: nignx-test

spec:

replicas: 3

selector:

name: nginx-test

template:

metadata:

labels:

name: nginx-test

spec:

containers:

- name: web01

image: docker.io/nginx:1.14.2

volumeMounts:

- mountPath: "/usr/share/nginx/html/"

name: nfs-pv1

- mountPath: "/var/log/nginx/"

name: nfs-pv2

ports:

- containerPort: 80

volumes:

- name: nfs-pv1

persistentVolumeClaim:

claimName: nfs-pvc1

- name: nfs-pv2

persistentVolumeClaim:

claimName: nfs-pvc2

备注:

# nfs-pv1存储网页文件,nfs-pv2日志文件


#执行文件

# kubectl create -f nfs-nginx.yaml

# kubectl get pods -o wide

k8s共享存储之nfs

#创建nfs-nginx-server文件

# cat nfs-nginx-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: nginx-test

labels:

name: nginx-test

spec:

type: NodePort

ports:

- port: 80

protocol: TCP

targetPort: 80

name: http

nodePort: 30088

selector:

name: nginx-test

#执行文件

# kubectl create -f nfs-nginx-svc.yaml

# kubectl get svc

k8s共享存储之nfs

5)验证 PV 是否可用

k8s共享存储之nfs

测试页面:

#内部

k8s共享存储之nfs

#外网

k8s共享存储之nfs


备注说明: nfs自身没有冗余能力,数据盘损坏易丢失数据;建议使用:glusterfs或cephfs分布式存储;


相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...