当运行在一个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)
EOF
systemctl restart rpcbind nfs-server
#把mongo镜像上传到镜像仓库
docker pull mongo
docker tag mongo:latest 10.0.0.10:5000/luksa/mongo
docker push 10.0.0.10:5000/luksa/mongo
#创建pod
cd /root/k8s/
cat >mongodb-pod-nfs.yaml <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: mongodb-nfs
spec:
volumes:
- name: mongodb-data
nfs:
server: 10.0.0.10
path: /data/mongodb-data/
containers:
- image: 10.0.0.10:5000/luksa/mongo
name: mongodb
volumeMounts:
- name: mongodb-data
mountPath: /data/db
ports:
- containerPort: 27017
protocol: TCP
EOF
kubectl create -f mongodb-pod-nfs.yaml
#向数据库写入数据及检验操作见GCE的例子。
使用其他存储技术
kubectl explain pod.spec.volumes