#kubernetes #kubernetes-pod #persistent-volumes #persistent-volume-claims
#kubernetes #kubernetes-pod-модуль #постоянные тома #утверждения о постоянном объеме
Вопрос:
Мне нужно скопировать файл (.txt) в постоянный объем?
kubectl cp <file-spec-src> <file-spec-dest>
Мне нужно знать <file-spec-dest>
для PersistentVolume.
Backgroud: у меня есть одноузловой Kubernetes-кластер (docker-desktop), работающий локально на моем mac. Я пытаюсь скопировать текстовый файл в постоянный объем (PV). Я создал PV и PersistentVolumeClaim (PVC).
Примечание: меня спросили, будет ли это иметь больше смысла с pod вместо PersistentVolume. Цель состоит в том, чтобы изображение, которое будет выполняться как задание Kubernetes, использовало данные из TXT-файла.
Постоянный объем:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
PersistentVolumeClaim Настойчивое требование:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
вот что я получаю с kubectl get pvc -o yaml
apiVersion: v1
items:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: docker.io/hostpath
creationTimestamp: "2021-02-18T15:06:19Z"
finalizers:
- kubernetes.io/pvc-protection
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:pv.kubernetes.io/bind-completed: {}
f:pv.kubernetes.io/bound-by-controller: {}
f:volume.beta.kubernetes.io/storage-provisioner: {}
f:spec:
f:volumeName: {}
f:status:
f:accessModes: {}
f:capacity:
.: {}
f:storage: {}
f:phase: {}
manager: kube-controller-manager
operation: Update
time: "2021-02-18T15:06:19Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:spec:
f:accessModes: {}
f:resources:
f:requests:
.: {}
f:storage: {}
f:volumeMode: {}
manager: kubectl-create
operation: Update
time: "2021-02-18T15:06:19Z"
name: task-pv-claim
namespace: default
resourceVersion: "113659"
selfLink: /api/v1/namespaces/default/persistentvolumeclaims/task-pv-claim
uid: 5b825c41-cf4f-4c08-b90e-47e3fca557a1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
storageClassName: hostpath
volumeMode: Filesystem
volumeName: pvc-5b825c41-cf4f-4c08-b90e-47e3fca557a1
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 3Gi
phase: Bound
kind: List
metadata:
resourceVersion: ""
selfLink: ""
Ответ №1:
Целевой каталог — это тот, который вы используете в pod / job manifest как mountPath
. Поэтому, если вы решите смонтировать его, /mnt/data
это будет ваш каталог назначения. Например:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
volumes:
- name: task-pv-claim
hostPath:
path: /mnt/data
type: Directory
containers:
- name: pi
image: nginx
command: ["some_job"]
volumeMounts:
- name: task-pv-claim
mountPath: /mnt/data
restartPolicy: Never
Итак, если вы хотите скопировать файл с хоста в каталог, который вы смонтировали:
kubectl cp <some_host_file> <pod_name>/:/mnt/data
Кроме того, если вы используете hostPath
его, он копирует файл с вашего хоста в pod в указанный каталог, поэтому вы можете просто поместить туда свой файл, и он будет скопирован в pod.