如何在Kubernetes中使用文件挂载文件夹

时间:2020-02-20 11:40:39

标签: docker kubernetes docker-volume

我正在运行其中包含某些配置文件的docker映像。我需要将相同的文件夹持久化/装入磁盘,因为以后会添加新文件。当我在kubernetes中使用标准卷挂载时,它会挂载一个没有目录配置文件的空目录。挂载时如何确保将初始文件复制到该卷?

        - mountPath: /tmp
          name: my-vol
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: my-vol
        persistentVolumeClaim:
          claimName: wso2-disk2```

3 个答案:

答案 0 :(得分:1)

为您的Pod提供配置的建议方法是,为您的配置创建configmap并使用卷将其安装在Pod中。本指南(https://kubernetes.io/docs/concepts/storage/volumes/#configmap介绍了如何执行此操作。

其他方法是在集群中创建persistent volumepersistent volume claim,然后在该路径中复制配置文件。在您的Pod中安装持久卷。

您还可以在集群中的一个节点上复制配置,并使用hostPath挂载该路径,但这要求您的pod还要在尝试在其中寻找路径的同一节点上运行节点。 (不建议使用此方法)

答案 1 :(得分:0)

可能的解决方案是使用安装在容器上的节点存储(最简单的方法)或使用DFS解决方案,例如NFS,GlusterFS等。

实现所需的另一种推荐方法是使用永久卷在容器之间共享相同文件。

假设您有一个仅具有一个节点的kubernetes集群,并且想与您的pod(Source)共享节点的路径/mtn/data

创建一个持久卷:

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:

豆荚使用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

创建具有两个副本的部署,例如:

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或使用DFS

参考: Configure persistent volumes Persistent volumes Volume Types

答案 2 :(得分:0)

创建要安装的文件夹的configmap,以下内容将创建文件夹中的所有文件组成的configmap:

kubectl create configmap your-config --from-file=your-folder/

然后将其安装到卷上,文件夹中将包含初始文件。并请注意,由于您不希望它覆盖目录中的所有内容,因此需要将其安装到 subpath