0

在 K8S 上部署 POD 之前,如何准备好输入数据?据我了解,持久卷是使用 PVC(持久卷声明)动态创建的,因此在 POD yaml 文件中,我们可以像这样设置 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 并将其公开为服务时,服务可以立即访问数据。

4

3 回答 3

2

根据你的描述,你需要的是一个持久化卷。这方面的一个示例是 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
于 2019-10-09T20:25:53.080 回答
2

将其安装在另一个进行预加载的 pod 上。或者,您可以使用 initContainer 做一些花哨的事情。

于 2019-10-09T00:32:36.157 回答
0

谢谢大家,所以按照 coderanger 和 Rodrigo Loza 的建议,我能够创建一个 NAS 文件系统并将其挂载到多个 POD 上。一个 POD 可用于预加载数据。当数据准备好时,其他 POD 可以访问它。我来自 HPC 背景,清楚地知道存储在哪里是我的爱好。

于 2019-10-11T00:20:44.023 回答