Как подготовить входные данные для приложений на K8S

Как подготовить входные данные перед развертыванием POD на K8S? Насколько я понимаю, постоянный том динамически создается с использованием PVC (утверждение постоянного тома), поэтому в yaml-файле POD мы можем установить PVC и путь монтирования, например это:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

Проблема в том, как я могу загрузить данные перед развертыванием POD? Я хочу, чтобы данные были готовы и постоянны где-то на K8S, а затем, когда я развертываю POD и выставляю его как службу, служба может немедленно получить доступ к данным.




Ответы (3)


Установите его на другой модуль, где выполняется предварительная загрузка. В качестве альтернативы вы можете делать какие-нибудь причудливые вещи с помощью initContainer.

person coderanger    schedule 09.10.2019
comment
вау, это похоже на то, что я должен сделать, не могли бы вы рассказать мне немного подробностей, например, «предварительная загрузка» и как сделать его доступным для всех других модулей; - person Jaylin; 09.10.2019

Согласно вашему описанию, вам нужен постоянный том. Примером этого может быть постоянство NFS, для которого вы должны определить следующий yaml.

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: $PV_NAME
  namespace: $NAMESPACE
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  nfs:
    path: /nfs
    server: $SERVER_ADDRESS # 10.128.15.222 for instance
  persistentVolumeReclaimPolicy: Retain

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: $PVC_NAME
  creationTimestamp: null
  labels:
    app: $PVC_NAME
  namespace: $NAMESPACE
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

После создания PV и PVC вы должны смонтировать его в таком развертывании.

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $POD_NAME
  labels:
    app: $POD_NAME
  namespace: $NAMESPACE
spec:
  replicas: 1
  selector:
    matchLabels:
      app: $POD_NAME
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: $POD_NAME
    spec:
      containers:
      - name: $POD_NAME
        image: $DOCKER_IMAGE
        volumeMounts:
          - mountPath: /testing-path
            name: $VOLUME_NAME
      volumes:
      - name: $VOLUME_NAME
        persistentVolumeClaim:
          claimName: $PVC_NAME
person Rodrigo Loza    schedule 09.10.2019

Спасибо, ребята, поэтому, следуя предложениям coderanger и Родриго Лозы, я смог создать файловую систему NAS и смонтировать ее на нескольких POD. Один POD можно использовать для предварительной загрузки данных. Другой POD может получить к нему доступ, когда данные будут готовы. Я из HPC, и я четко знаю, где хранилище - мое хобби.

person Jaylin    schedule 11.10.2019