Airflow / k8s:如何正确设置存储在永久卷中的DAG的权限?

时间:2019-01-31 12:32:41

标签: kubernetes airflow

我想通过持久的卷为所有Kubernetes气流吊舱(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

在图表稳定/气流中,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来塞住dags /:

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

除{@ 3}}中建议的那样,该代码对除工人之外的所有工人都有效(因为它们是由花朵制成的?)

我也看到了fsGroup等的讨论-例如https://serverfault.com/a/907160/464205

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

流水线:

通过持久卷向具有正确权限的Kubernetes上运行的所有气流吊舱提供DAG的最简单方法是什么?

另请参阅:

Kubernetes NFS persistent volumes permission denied

Persistent volume atached to k8s pod group [对我来说不清楚如何将其与气流舵图表结合起来

Kubernetes NFS persistent volumes permission denied [非详细,非特定气流]

1 个答案:

答案 0 :(得分:0)

我认为您确实需要编辑气流图,方法是在deployments-web.yaml下的deployments-scheduler.yamlspec.template.spec中添加以下代码段:

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

这可以让人们使用例如

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