Airflow Git同步无法在将新的DAG推送到Git仓库时刷新DAG。

4

我正在在Kubernetes上使用Airflow,选择了git-sync选项来部署DAGS。当我们的git repo推送新的DAGS时,airflow直到我们重新启动调度器pod才会更新新的DAGS。有没有其他方法可以更新DAGS而无需重新启动调度器pod?

2个回答

3

通过使用 git-sync sidecar 容器解决了这个问题。

在 values.yaml 文件中有一个 extraContainers: 选项。我们可以将 Kubernetes git-sync 添加为 sidecar 容器,以持续从 Git 同步。

extraContainers: 
  ## Additional containers to run alongside the Scheduler, Worker and Web pods
  ## This could, for example, be used to run a sidecar that syncs DAGs from object storage.
   - name: git-sync
     image: k8s.gcr.io/git-sync:v3.1.1
     volumeMounts:
      - name: ssh-key
        mountPath: /var/ssh
      - name: known-hosts
        mountPath: /var/knownhosts
      - name: git-sync-volume
        mountPath: /tmp/git

     env:
      - name: GIT_SYNC_REPO
        value: git@gitlab.example.com/test.git
      - name: GIT_SYNC_DEST
        value: git
      - name: GIT_SYNC_WAIT
        value: "10"
      - name: GIT_SYNC_SSH
        value: "true"
      - name: GIT_SSH_KEY_FILE
        value: /var/ssh/sshkey
      - name: GIT_SSH_KNOWN_HOSTS_FILE
        value: /var/knownhosts/known_hosts
  ## Additional volumeMounts to the main containers in the Scheduler, Worker and Web pods.
  extraVolumeMounts: 
     # - volumeMounts:
          - mountPath: "/var/ssh"
            name: ssh-key
            readOnly: true
          - mountPath: "/var/knownhosts"
            name: known-hosts
            readOnly: true
          - name: git-sync-volume
            mountPath: /tmp/git

  extraVolumes: 
     #- volumes:
        - name: ssh-key
          secret:
            secretName: dags-secret
            items:
            - key: key
              path: sshkey
        - name: known-hosts
          secret:
            secretName: dags-secret
            items:
            - key: known_hosts
              path: known_hosts

        - name: git-sync-volume
          emptyDir: {}

-2

我认为你可以使用Jenkins

使用Jenkins更容易管理DAG的自动生成,将其在不同环境之间发布并自动管理版本控制。

那么你就不必使用调度程序了。

enter image description here


谢谢您的回复。我们已经使用Airflow稳定的Helm图表在Kubernetes上部署了Airflow。添加Jenkins到设置中会使其更加复杂。除了使用Jenkins之外,您能否提供其他建议? - user2416
也许使用CronJob?https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/ - Jakub
有没有其他方法可以不重启调度程序?我看到了一些用于自动同步的git-sync init容器,但它们与稳定的helm部署不兼容。 - user2416
嗨@user2416,我可以问一下你正在使用哪个稳定版本吗?在官方的helm chart中,部署是使用git-clone "initContainers",而你正在使用git-sync,对吗? 在我的情况下,git-clone无法与私有github repo一起使用。 提前感谢您。 - PistolPete
@PistolPete 我正在使用 Helm Chart 版本 3.0.2。我能够使用 Git Secret 连接到私有 Git 存储库。我只使用官方的 git-clone initContainer。但我的问题是,直到我们重新启动 Airflow 调度程序之前,DAG 才能从 Git 同步到 Airflow。 - user2416

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接