繁体   English   中英

只制作kubernetes部署的pod之一进行下载,只读取

[英]Make only one of the pods of kubernetes deployment make a download, and only reads

我有一个 docker 容器,它首先下载文件然后使用它们,我想让我的应用程序可扩展,所以我使用了 kubernetes 部署并创建了一个持久卷,以便部署的所有 pod 都有一个共享存储。 我不希望每个 pod 都下载文件,我只希望第一个运行的 pod 下载它,而其他 pod 只会读取 id 我的 docker 容器 start.sh 文件包含这两个命令:

python download.py
gunicorn my_application.wsgi:application --bind 0.0.0.0:8000

我的部署的配置文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      volumes:
        - name: api-storage
          persistentVolumeClaim:
            claimName: storage-persistent-volume-claim
      containers:
        - name: dispatch-model
          image: mustaphadebbihyassir/dispatch-data-model:latest
          ports:
            - containerPort: 8000
          volumeMounts:
            - name: api-storage
              mountPath: /dispatch_server/Assets/Data
              subPath: data_storage
      imagePullSecrets:
        - name: regcred 

关于如何解决这个问题的任何建议

最简单的方法就是将此文件构建到您的 Docker 映像中。

# At image-build time
RUN ./download.py
# Don't need to separately download at container startup time
CMD gunicorn my_application.wsgi:application --bind 0.0.0.0:8000

这不需要 PersistentVolumeClaim、共享存储或其他任何特殊的东西。 每当有文件的更新副本时,您都需要触发 CI 系统,但这应该是相当常规的。 与 Deployment 管理的任何其他内容一样,可以运行使用两个不同版本文件的 Pod,也可以回滚到使用旧版本文件的设置。

但是,如果文件是多个千兆字节,并且将其构建到图像中真的没有意义怎么办? 有一堆问题你需要思考:

  • 在稳定的 state 中(系统已经成功运行了几个月),文件何时以及如何更新?
  • 如果多个进程尝试同时进行更新会发生什么?
  • 机械地,仅查看Kubernetes 卷类型列表,您是否可以访问支持 ReadWriteMany 访问的内容?

在评论中,@Eugene 建议了一份 工作,这可能是一种合理的方法。 只有一份 Job 正在运行,这有助于解决并发问题,您可以在需要时删除并重新创建它。 Job 可以运行与主服务相同的映像,如果这有助于您的特定设置,并且您可以覆盖它运行的命令。

apiVersion: batch/v1
kind: Job
metadata:
  name: downloader
spec:
  template:
    spec:
      volumes: [ ... ]
      containers:
        - name: downloader
          image: registry.example.com/my-application:20220103
          args: # overrides Dockerfile CMD, one word to a list item
            - /app/downloader.py
          volumeMounts: [ ... ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM