> 文档中心 > K8S存储之emptyDir、hostPath、NFS

K8S存储之emptyDir、hostPath、NFS


emptyDir

#定义yaml文件,创建容器[root@k8s-master-01 volumeTest]# cat podEmptyDir.yamlapiVersion: v1kind: Podmetadata:  creationTimestamp: null  labels:    run: www04  name: www04spec:  volumes:  - name: v1  #定义的volume的名字    emptyDir: {} #随机定义宿主机中的挂载目录  containers:  - image: nginx    imagePullPolicy: IfNotPresent    name: www04    resources: {}    volumeMounts:    - name: v1 #与预先定义的volumes名字相同      mountPath: /data  #容器中的挂载点  dnsPolicy: ClusterFirst  restartPolicy: Alwaysstatus: {}[root@k8s-master-01 volumeTest]# kubectl apply -f podEmptyDir.yamlpod/www04 created[root@k8s-master-01 volumeTest]# kubectl get podsNAME    READY   STATUS    RESTARTS   AGEwww04   1/1     Running   0   32s#在调度到的节点查看容器信息[root@k8s-node-01 ~]# docker ps -a | grep www044181d673e28b   605c77e624dd     "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes    k8s_www04_www04_app01_bb2ba6e3-a88b-4f94-8700-310c57a453f4_0c0d911e5b886   registry.aliyuncs.com/google_containers/pause:3.6   "/pause"   3 minutes ago   Up 3 minutes    k8s_POD_www04_app01_bb2ba6e3-a88b-4f94-8700-310c57a453f4_0[root@k8s-node-01 ~]# docker inspect 4181d673e28b | grep data  "/var/lib/kubelet/pods/bb2ba6e3-a88b-4f94-8700-310c57a453f4/volumes/kubernetes.io~empty-dir/v1:/data",  "Destination": "/data",[root@k8s-node-01 ~]# ls /var/lib/kubelet/pods/bb2ba6e3-a88b-4f94-8700-310c57a453f4/volumes/kubernetes.io~empty-dir/v1[root@k8s-node-01 ~]# cd /var/lib/kubelet/pods/bb2ba6e3-a88b-4f94-8700-310c57a453f4/volumes/kubernetes.io~empty-dir/v1[root@k8s-node-01 v1]# ls[root@k8s-node-01 v1]##主节点进入容器并在/data目录创建文件,之后再查看node节点文件情况[root@k8s-master-01 volumeTest]# kubectl exec -it www04 -- bashroot@www04:/# ls /dataroot@www04:/# cd /data/root@www04:/data# touch emptyDirTest.txtroot@www04:/data#[root@k8s-node-01 v1]# lsemptyDirTest.txt#删除pod查看文件情况,emptyDir是以内存为介质的存储方式,故删除容器后文件也会消失。[root@k8s-master-01 volumeTest]# kubectl delete pod www04pod "www04" deleted[root@k8s-node-01 v1]# cd /var/lib/kubelet/pods/bb2ba6e3-a88b-4f94-8700-310c57a453f4/volumes/kubernetes.io~empty-dir/v1-bash: cd: /var/lib/kubelet/pods/bb2ba6e3-a88b-4f94-8700-310c57a453f4/volumes/kubernetes.io~empty-dir/v1: 没有那个文件或目录

 hostPath

#创建yaml文件并应用[root@k8s-master-01 volumeTest]# cat podHostPath.yamlapiVersion: v1kind: Podmetadata:  creationTimestamp: null  labels:    run: www04  name: www04spec:  volumes:  - name: v1    hostPath:      path: /hostPathTest  containers:  - image: nginx    imagePullPolicy: IfNotPresent    name: www04    resources: {}    volumeMounts:    - name: v1      mountPath: /data  dnsPolicy: ClusterFirst  restartPolicy: Alwaysstatus: {}[root@k8s-master-01 volumeTest]# kubectl apply -f podHostPath.yamlpod/www04 created[root@k8s-master-01 volumeTest]# kubectl get pods -owideNAME    READY   STATUS    RESTARTS   AGE   IP     NODE   NOMINATED NODE   READINESS GATESwww04   1/1     Running   0   20s   10.244.1.21   k8s-node-01       #在调度到的节点上可以看到/hostPathTest目录已被创建[root@k8s-node-01 v1]# cd /hostPathTest/[root@k8s-node-01 hostPathTest]#

NFS

#安装配置nfs[root@k8s-node-01 ~]# yum install nfs-utils -y[root@k8s-node-01 ~]# systemctl enable nfs-server.service --nowCreated symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.[root@k8s-node-01 ~]# mkdir -p /nfs[root@k8s-node-01 ~]# vim /etc/exports[root@k8s-node-01 nfs]# cat /etc/exports/nfs *(rw,no_root_squash)  #不压缩root权限##刷新使nfs生效[root@k8s-node-01 nfs]# exportfs -arvexporting *:/nfs##在worker上也需要安装nfs-utils。安装完后查看是否可访问[root@k8s-node-01 nfs]# showmount -e 192.168.71.134Export list for 192.168.71.134:/nfs *##挂载与umount测试,无任何报错说明服务正常[root@k8s-node-01 nfs]# mount 192.168.71.134:/nfs /mnt ; umount /mnt#创建使用nfs的容器[root@k8s-master-01 volumeTest]# more podNfs.yamlapiVersion: v1kind: Podmetadata:  creationTimestamp: null  labels:    run: www04  name: www04spec:  volumes:  - name: nfsv1    nfs:      server: 192.168.71.134      path: /nfs  containers:  - image: nginx    imagePullPolicy: IfNotPresent    name: www04    resources: {}    volumeMounts:    - name: nfsv1      mountPath: /data  dnsPolicy: ClusterFirst  restartPolicy: Alwaysstatus: {}[root@k8s-master-01 volumeTest]# kubectl get pod -o wideNAME    READY   STATUS    RESTARTS   AGE     IP     NODE   NOMINATED NODE   READINESS GATESwww04   1/1     Running   0   3m14s   10.244.1.41   k8s-node-01       #进入容器查看nfs挂在状况。挂载实际形式为宿主机挂载nfs目录后再在pod中挂载宿主机的目录。[root@k8s-master-01 volumeTest]# kubectl exec -it www04 -- bashroot@www04:/# lsbin  boot  data  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@www04:/# df -hFilesystem Size  Used Avail Use% Mounted onoverlay     17G  8.0G  9.1G  47% /tmpfs64M     0   64M   0% /devtmpfs      3.9G     0  3.9G   0% /sys/fs/cgroup192.168.71.134:/nfs17G  8.0G  9.1G  47% /data/dev/mapper/centos-root   17G  8.0G  9.1G  47% /etc/hostsshm  64M     0   64M   0% /dev/shmtmpfs      7.6G   12K  7.6G   1% /run/secrets/kubernetes.io/serviceaccounttmpfs      3.9G     0  3.9G   0% /proc/acpitmpfs      3.9G     0  3.9G   0% /proc/scsitmpfs      3.9G     0  3.9G   0% /sys/firmware##在pod实际运行的worker节点查看挂载状态[root@k8s-node-01 nfs]# df -h | grep 192192.168.71.134:/nfs17G  8.0G  9.1G   47% /var/lib/kubelet/pods/6d388500-0e70-4991-82f9-d21b82faed01/volumes/kubernetes.io~nfs/nfsv1##进入容器创建文件后在nfs共享目录中查看[root@k8s-master-01 volumeTest]# kubectl exec -it www04 -- bashroot@www04:/# touch /data/test.txtroot@www04:/#[root@k8s-node-01 nfs]# lstest.txt

毒蛇网