Как подготовить входные данные для приложений на K8S - PullRequest
0 голосов
/ 09 октября 2019

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

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 ]

2 голосов
/ 09 октября 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
2 голосов
/ 09 октября 2019

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

0 голосов
/ 11 октября 2019

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

...