【问题标题】:Airflow/k8s: How do I correctly set permissions for DAGs stored in a persistent volume?Airflow/k8s:如何正确设置存储在持久卷中的 DAG 权限?
【发布时间】:2023-04-06 11:17:02
【问题描述】:

我想通过持久卷向所有 Kubernetes 气流 pod(Web、调度程序、工作人员)提供 DAG,

kubectl create -f pv-claim.yaml

pv-claim.yaml 包含:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: airflow-pv-claim
  annotations:
    pv.beta.kubernetes.io/gid: "1000"
    pv.beta.kubernetes.io/uid: "1000"
spec:
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi

那么部署命令是:

helm install --namespace my_name --name "airflow" stable/airflow --values ~my_name/airflow/charts/airflow/values.yaml

在图表 stable/airflow 中,values.yaml 还允许指定持久性:

persistence:
  enabled: true
  existingClaim: airflow-pv-claim
  accessMode: ReadWriteMany
  size: 1Gi

如果我这样做了

kubectl exec -it airflow-worker-0 -- /bin/bash
touch dags/hello.txt

我收到权限被拒绝错误。

我尝试破解气流图来设置一个 initContainer 来 chown dags/:

command: ["sh", "-c", "chown -R 1000:1000 /dags"]

这对除了工人之外的所有人都有效(因为它们是由花创造的?),正如 https://serverfault.com/a/907160/464205 所建议的那样

我还看到了 fsGroup 等的讨论 - 参见例如Kubernetes NFS persistent volumes permission denied

我试图避免编辑气流图表(这似乎需要对至少两个部署-*.yaml 文件以及另一个文件进行破解),但这也许是不可避免的。

妙语:

通过持久卷将 DAG 配置到 Kubernetes 上运行的所有气流 pod 并具有正确权限的最简单方法是什么?

另见:

Persistent volume atached to k8s pod group

Kubernetes NFS persistent volumes permission denied [我不清楚如何将其与气流舵图集成]

Kubernetes - setting custom permissions/file ownership per volume (and not per pod) [非详细,非特定气流]

【问题讨论】:

    标签: kubernetes airflow


    【解决方案1】:

    事实证明,我认为您必须编辑气流图表,方法是在deployments-web.yamldeployments-scheduler.yaml 下的spec.template.spec 下添加以下块:

    kind: Deployment
    spec:
      template:
        spec:
          securityContext:
            runAsUser: 1000
            runAsGroup: 1000
            fsGroup: 1000
            fsUser: 1000
    

    这允许人们使用例如 dags 进入气流

    kubectl cp my_dag.py my_namespace/airflow-worker-0:/usr/local/airflow/dags/
    

    【讨论】:

    • 这很奇怪。为什么 init 容器 hack 不起作用,但定义安全上下文却起作用?也许将其设置为与工人一起运行 init 容器可以解决问题吗?
    • 有点困惑为什么将用户/组设置为 1000。当我执行到调度程序 pod 并输入 id 时,它会显示 uid=50000(airflow) gid=50000(airflow) groups=50000(airflow)。为什么不设置为 50000?
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2021-08-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多