我正在运行其中包含某些配置文件的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```
答案 0 :(得分:1)
为您的Pod提供配置的建议方法是,为您的配置创建configmap
并使用卷将其安装在Pod中。本指南(https://kubernetes.io/docs/concepts/storage/volumes/#configmap介绍了如何执行此操作。
其他方法是在集群中创建persistent volume
和persistent 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 。