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

6.4.1使用GCE持久磁盘作为pod存储卷

(缺少实验环境)

创建GCE持久磁盘

image.png


创建—个使用GCE持久磁盘卷的pod

image.png

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

image.png

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

image.png
image.png

发现新pod中仍然可以看到被删除pod的数据。

6.4.2 通过底层持久化存储使用其他类型的卷

应该根据不同的基础设施使用其他类型的卷。

使用AWS弹性块存储卷

image.png

使用NFS卷

如果集群是运行在自有的一组服务器上,那么就有大量其他可移植的选项用于在卷内挂载外部存储。例如,要挂载一个简单的NFS共享,只需指定NFS服务器和共享路径。
image.png

  1. #10.0.0.10上创建NFS共享
  2. mkdir /data/mongodb-data/
  3. cat >/etc/exports <<'EOF'
  4. /data/mongodb-data/ 10.0.0.*(rw,no_root_squash,no_all_squash)
  5. EOF
  6. systemctl restart rpcbind nfs-server
  7. #把mongo镜像上传到镜像仓库
  8. docker pull mongo
  9. docker tag mongo:latest 10.0.0.10:5000/luksa/mongo
  10. docker push 10.0.0.10:5000/luksa/mongo
  11. #创建pod
  12. cd /root/k8s/
  13. cat >mongodb-pod-nfs.yaml <<'EOF'
  14. apiVersion: v1
  15. kind: Pod
  16. metadata:
  17. name: mongodb-nfs
  18. spec:
  19. volumes:
  20. - name: mongodb-data
  21. nfs:
  22. server: 10.0.0.10
  23. path: /data/mongodb-data/
  24. containers:
  25. - image: 10.0.0.10:5000/luksa/mongo
  26. name: mongodb
  27. volumeMounts:
  28. - name: mongodb-data
  29. mountPath: /data/db
  30. ports:
  31. - containerPort: 27017
  32. protocol: TCP
  33. EOF
  34. kubectl create -f mongodb-pod-nfs.yaml
  35. #向数据库写入数据及检验操作见GCE的例子。

使用其他存储技术

kubectl explain pod.spec.volumes