簡體   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