通过 Kubernetes 作业和持久卷声明进行 Django 迁移

标签 django kubernetes migration persistent-volumes persistent-volume-claims

在 Kubernetes Django 部署的应用程序上使用作业和持久卷声明进行迁移和迁移模型的最佳方法是吗?

持久卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: do-block-storage

工作

apiVersion: batch/v1
kind: Job
metadata:
  name: django-migrations-job
spec:
  template:
    spec:
      containers:
        - name: app
          image: user/app:latest
          command: ["/bin/sh", "-c"]
          args: ["python manage.py makemigrations app; python manage.py migrate"]
          volumeMounts:
           - mountPath: "/container-code-dir/app/migrations"
             name: my-do-volume
      volumes:
        - name: my-do-volume
          persistentVolumeClaim:
           claimName: csi-pvc

最佳答案

对我来说看起来不错。不确定您是否需要在新 Pod 启动时运行此作业一次或每次?

如果它在每次 Django service pod 启动之前运行,也许你可以通过 Init Containers 获得帮助。

示例:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

您可以对部署执行相同的操作

关于通过 Kubernetes 作业和持久卷声明进行 Django 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59583098/

相关文章:

kubernetes - pod 应用程序存储在 PV 持久存储上的文件在主机上不可见 [GKE]

docker - 我无法从本地主机获取 shell 到 Pod

django - 允许在 Django REST 框架中发布请求

django 从 DateTimeField 设置 DateField

kubernetes - Kubernetes-Pod:访问问题

seo - Google Page Rank - 新域/链接结构迁移

ruby-on-rails - 将数据迁移到生产数据库 Rails 的最佳实践?

android - 没有这样的属性 : variantConfiguration for class:

python - Django:在 models.py 中 save() 期间 PositiveIntegerField 中 ManyToMany 字段的计数

python - Django:如何在勾选清除复选框时自动从存储中删除文件?