忙过了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的时区.因为这个是需要挂载一个文件,目录的挂载要简单一些.

PVPVC的说明,不多做解释了,参考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是目录,非文件.该目录下有timezonelocaltime两个文件.

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

PVCstorageClassName需要和创建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是需要被替换的文件,subPathPV中的文件.

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

结束

在实验过程中,遇到问题欢迎下方留言.过段时间整理几个常用的配置分享给大家


感谢大家的阅读, 如有疑问可以加我微信