您需要使用持久卷在容器之间共享相同的文件。您可以使用安装在容器上的节点存储(最简单的方式)或其他分布式文件系统,如 NFS、EFS (AWS)、GlusterFS 等...
如果您需要一个最简单的文件共享方式并且您的 pod 位于同一个节点中,您可以使用 hostpath 来存储文件并与其他容器共享卷。
假设您有一个只有一个节点的 kubernetes 集群,并且您希望与您的 pod 共享您的节点的路径 /mtn/data:
创建一个 PersistentVolume:
hostPath PersistentVolume 使用节点上的文件或目录来模拟网络附加存储。
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
创建 PersistentVolumeClaim:
Pod 使用 PersistentVolumeClaims 请求物理存储
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
查看 PersistentVolumeClaim:
kubectl get pvc task-pv-claim
输出显示 PersistentVolumeClaim 已绑定到您的 PersistentVolume task-pv-volume。
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE
task-pv-claim Bound task-pv-volume 10Gi RWO manual 30s
创建一个包含 2 个副本的部署,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/mnt/data"
name: task-pv-storage
现在您可以检查两个容器内的路径 /mnt/data 是否具有相同的文件。
如果您有超过 1 个节点的集群,我建议您考虑其他类型的 persistent volumes。
参考资料:
Configure persistent volumes
Persistent volumes
Volume Types