当运行在一个pod中的应用程序需要将数据保存到磁盘上,并且即使该pod重新调度到另一个节点时也要求具有相同的数据可用。这就不能使用到目前为止我们提到的任何卷类型。由于这些数据需要可以从任何集群节点访问,因此必须将其存储在某种类型的附网存储 (network-attached storage,NAS)中。
6.4.1使用GCE持久磁盘作为pod存储卷
创建GCE持久磁盘
创建—个使用GCE持久磁盘卷的pod

通过向MongoDB数据库添加文档来将数据写入持久化存储

重新创建 pod 并验证其可以读取由前一个 pod 保存的数据


发现新pod中仍然可以看到被删除pod的数据。
6.4.2 通过底层持久化存储使用其他类型的卷
应该根据不同的基础设施使用其他类型的卷。
使用AWS弹性块存储卷

使用NFS卷
如果集群是运行在自有的一组服务器上,那么就有大量其他可移植的选项用于在卷内挂载外部存储。例如,要挂载一个简单的NFS共享,只需指定NFS服务器和共享路径。
#10.0.0.10上创建NFS共享mkdir /data/mongodb-data/cat >/etc/exports <<'EOF'/data/mongodb-data/ 10.0.0.*(rw,no_root_squash,no_all_squash)EOFsystemctl restart rpcbind nfs-server#把mongo镜像上传到镜像仓库docker pull mongodocker tag mongo:latest 10.0.0.10:5000/luksa/mongodocker push 10.0.0.10:5000/luksa/mongo#创建podcd /root/k8s/cat >mongodb-pod-nfs.yaml <<'EOF'apiVersion: v1kind: Podmetadata:name: mongodb-nfsspec:volumes:- name: mongodb-datanfs:server: 10.0.0.10path: /data/mongodb-data/containers:- image: 10.0.0.10:5000/luksa/mongoname: mongodbvolumeMounts:- name: mongodb-datamountPath: /data/dbports:- containerPort: 27017protocol: TCPEOFkubectl create -f mongodb-pod-nfs.yaml#向数据库写入数据及检验操作见GCE的例子。
使用其他存储技术
kubectl explain pod.spec.volumes
