Где мне найти путь к постоянному объему в кластере Kubernetes, который выполняется локально на Mac

#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.