该笔记将记录:在 Kubernetes 中,容器使用存储的各种方法,以及常见问题的处理方法;
描述
我们需要在容器中挂载存储,以写入数据或者访问数据、在多个 Pod 之间共享数据;
Volumes,是指映射(挂载)到容器中的磁盘、存储空间、文件系统;
Volume 在 Pod 上运行的所有容器都可以访问的目录。Volume 可以保证个别容器重启的时候,数据能够保存下来;
Volume 分为以下几类:
1)本地节点卷:emptyDir 或者 hostPath
2)通用网络卷:nfs,glusterfs,cephfs
3)云商提供的卷:awsElasticBlickStore,azureDisk,gcePersistentDisk
4)特殊用途的卷:secret、gitRepo
使用那种卷根据实际情况确定;
常用示例:仓库 examples/staging/volumes at master 包含**多种不同类型存储**的使用示例;
PV + PVC: PersistentVolume, PersistentVolumeClaim
Storage + PVC: Dynamic Volume Provisioning
应用
subPath | 将存储的子目录挂载到容器中
Volumes | Kubernetes
Shared NFS and SubPaths in Kubernetes | by Joseph Bironas | Medium
What is the difference between subPath and mountPath in Kubernetes – Stack Overflow
通过 subPath 参数,将在存储目录中的子目录挂在到 Pod 中,从而限制容器访问存储的根目录。如下 YAML 实例:
apiVersion: v1 kind: Pod metadata: name: pod-subpath spec: containers: - name: pod-subpath image: busybox command: [ "sh", "-c", "while [ true ]; do echo 'Hello'; sleep 10; done | tee -a /var/log/hello.txt" ] volumeMounts: - name: workdir1 subPath: pod-subpath # 在 workdir1 中的子目录(将会自动创建); mountPath: /var/log/ # 挂载到容器的 /var/log/ 目录; volumes: - name: workdir1 hostPath: path: /var/log/
在示例中,容器将日志写入 /var/log/hello.txt 中,但是在物理主机目录中,日志出现在 /var/log/pod-subpath/hello.txt 中;
参考
Configure a Pod to Use a PersistentVolume for Storage | Kubernetes
Sharing an NFS PV across two PVCs – Persistent Storage Examples | Installation and Configuration | OpenShift Container Platform 3.3