共享存储特性是不管node是否挂掉,pod中容器是否在同一个节点,数据都不丢失,数据不存放在某一个单独的node之上。这和之前的主机存储卷hostPath,empryDir在持久化存储上效果更好。在yml配置文件中定义,且被volumeMounts挂载即可,如下:
- name: linuxea-image
nfs:
path: PATH
server: Server
以nfs为例做共享存储测试
安装nfs
安装并且配置nfs访问(10.0.1.61)
[root@Linuxea-VM-Node_10_0_1_61 ~]# yum install nfs-utils -y
[root@Linuxea-VM-Node_10_0_1_61 ~]# mkdir /data/linuxea-volumes
[root@DS-VM-Node_10_0_1_61 ~]# cat /etc/exports
/data/linuxea-volumes 10.0.0.0/8(rw,no_root_squash)
[root@DS-VM-Node_10_0_1_61 ~]# systemctl start nfs
在每台挂载节点安装
[root@DS-VM-Node_10_10_240_202 ~]# yum install nfs-utils -y
[root@DS-VM-Node203 ~]# yum install nfs-utils -y
[root@DS-VM-Node146 ~]# yum install nfs-utils -y
手动尝试挂载一次
[root@Linuxea-VM-Node_10_10_240_202 ~]# mount -t nfs 10.0.1.61:/data/linuxea-volumes /mnt
[root@Linuxea-VM-Node_10_10_240_202 ~]# mount|grep linuxea
10.0.1.61:/data/linuxea-volumes on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.240.202,local_lock=none,addr=10.0.1.61)
[root@Linuxea-VM-Node_10_10_240_202 ~]# umount /mnt/
- yaml
yaml配置文件在红定义linuxea-image被volumeMounts挂载到特定的位置。在volumes中写明server和共享的目录路径即可,如下:
[root@linuxea volume]# cat nfs-pod-hostPath.yaml
apiVersion: v1
kind: Pod
metadata:
name: linuxea-nfs
namespace: default
spec:
containers:
- name: linuxea-pod1-com
image: "marksugar/nginx:1.14.a"
ports:
- containerPort: 88
volumeMounts:
- name: linuxea-image
mountPath: /data/wwwroot/
volumes:
- name: linuxea-image
nfs :
path: /data/linuxea-volumes
server: 10.0.1.61
[root@linuxea volume]# kubectl apply -f nfs-pod-hostPath.yaml
pod/linuxea-nfs created
[root@linuxea volume]# kubectl get pods
NAME READY STATUS RESTARTS AGE
linuxea-nfs 1/1 Running 0 2s
[root@linuxea volume]# kubectl exec -it linuxea-nfs -c linuxea-pod1-com -- /bin/sh
/ # ls /data/wwwroot/
index.html linuxea.html
- 返回nfs server,在nfs server机器上的nfs data目录中。原本容器内的html文件已经被映射到nfs中
[root@DS-VM-Node_10_0_1_61 /data/linuxea-volumes]# ll
总用量 8
-rw-r--r-- 1 400 400 50 9月 20 21:04 index.html
-rw-r--r-- 1 400 400 64 9月 20 21:04 linuxea.html
追加一条信息到index.html中验证下效果
[root@Linuxea-VM-Node_10_0_1_61 /data/linuxea-volumes]# echo $(date) and nfs server node.linuxea.com >> index.html
在集群内通过IP访问测试
[root@linuxea volume]# curl 172.16.4.6
linuxea-linuxea-nfs.com-127.0.0.1/8 172.16.4.6/24
2018年 09月 20日 星期四 21:07:52 CST and nfs server node.linuxea.com
此刻无论pod中的任意一个容器挂载都可以获得相同的数据,且容器或者pod删除更新,亦或者node主机故障,数据仍然可以用。基本实现数据持久能力。但是唯独nfs是单独的单点,并且效率并不如意,如下: