【问题标题】:How to have input data ready for apps on K8S如何为 K8S 上的应用程序准备好输入数据
【发布时间】:2019-10-08 23:56:06
【问题描述】:

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

【问题讨论】:

    标签: kubernetes google-cloud-storage kubernetes-pod persistent-volumes kubernetes-pvc


    【解决方案1】:

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

    【讨论】:

    • 哇,这听起来像是我应该做的,你能告诉我一些细节,例如,“预加载”,以及如何让它被所有其他 pod 访问;
    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 2016-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        相关资源
        最近更新 更多