忙过了618,继续搞起来~~~
环境
Minikube v0.26.1
说明
在K8S的使用过程中,经常遇到挂载问题.K8S中,也像Docker使用volumes实现文件的挂载,在K8S中,提供了很多种实现方式:https://kubernetes.io/docs/concepts/storage/.
在搜索资料的过程中,感觉configMap
实现方式比较简单,所以一直纠结在这种方式里,但在实验中发现,挂载的是key-value
的内容,并不是宿主机的路径.如果单纯使用hostPath
方式, 在每次创建Pod
的时候,都需要重新配置挂载宿主机的路径,这样会导致如果有共用的路径变了,就需要对每一个进行调整.所以,使用了hostPath
+persistentVolumeClaim
的方式来挂载文件或者目录.文件还是目录的关键配置在于subPath
.
示例
以常用的配置为例,修改Pod
的时区.因为这个是需要挂载一个文件,目录的挂载要简单一些.
PV
和PVC
的说明,不多做解释了,参考https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/
创建PV
使用hostPath
挂载宿主机目录用作PV
,因为只有几个配置文件,所以只创建了10Mi
.
accessModes
的配置参考:https://kubernetes.io/docs/concepts/storage/persistent-volumes/, Access Modes
部分的说明.因为用到了hostPath
,这里的accessModes
只能设置为ReadWriteOnce
.
storageClassName
的配置参考:https://kubernetes.io/docs/concepts/storage/storage-classes/
path: /Users/wizard/common/timezone
是目录,非文件.该目录下有timezone
和localtime
两个文件.
kind: PersistentVolume
apiVersion: v1
metadata:
name: timezone-pv
namespace: default
labels:
app: timezone-pv
spec:
storageClassName: manual
capacity:
storage: 10Mi
accessModes:
- ReadWriteOnce
hostPath:
path: /Users/wizard/common/timezone
创建PVC
PVC
的storageClassName
需要和创建PV
时的相同.
selector
的配置要能匹配到需要的PV
.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: timezone-pvc
namespace: default
labels:
app: timezone
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
selector:
matchLabels:
app: timezone-pv
创建Deployment
这里使用nginx:1.13
测试.挂载单个文件时,mountPath
是需要被替换的文件,subPath
是PV
中的文件.
apiVersion: apps/v1
kind: Deployment
metadata:
name: timezone-test
namespace: default
spec:
selector:
matchLabels:
app: timezone-test
template:
metadata:
labels:
app: timezone-test
spec:
containers:
- name: timezone-test
image: nginx:1.13
volumeMounts:
- mountPath: /etc/timezone
name: timezone
subPath: timezone
- mountPath: /etc/localtime
name: timezone
subPath: localtime
volumes:
- name: timezone
persistentVolumeClaim:
claimName: timezone-pvc
如果是挂载目录,修改volumeMounts
就可以了.具体的目录结构配置根据自己需要调整.
volumeMounts:
- mountPath: /opt
name: timezone
结束
在实验过程中,遇到问题欢迎下方留言.过段时间整理几个常用的配置分享给大家
感谢大家的阅读, 如有疑问可以加我微信
评论已关闭