在气流 kubernetes pod 操作员中传递 --serviceaccount

idk*_*idk 3 kubernetes airflow kubernetespodoperator

我正在尝试使用 Airflow kubernetes pod 操作符创建并运行 pod。下面的命令经过尝试并确认有效,我正在尝试在本地使用 kubernetes pod 操作员复制相同的命令

kubectl run sparkairflow -n test-namespace --image=some-docker-repo.com:hello-world --serviceaccount=airflow --restart=Never -- spark-submit --deploy-mode cluster --master k8s://kubernetes.default.cluster.local:123 \
                 --name sparkairflow \
                 --conf spark.kubernetes.namespace=test-namespace \
                 --conf spark.kubernetes.container.image=some-docker-repo.com:hello-world \
                 --conf spark.kubernetes.authenticate.driver.serviceAccountName=airflow \
...
Run Code Online (Sandbox Code Playgroud)

在这里遇到了麻烦,因为似乎没有办法使用气流传递 --serviceaccount 标志,而这是我的实现所必需的,这会在我这边引发错误。

线程“main”中出现异常 io.fabric8.kubernetes.client.KubernetesClientException:pods“sparkairflow-155252344-driver”被禁止:用户“system:serviceaccount:test-namespace:default”无法观看 API 组“”中的资源“pods”在命名空间“test-namespace”中:访问被拒绝

到目前为止,我找到的解决方案主要侧重于将默认用户添加到命名空间角色,但这对于我的情况来说是不可能的。

有什么方法可以将 serviceaccount 标志传递给气流 kubernetes 操作员吗?

谢谢!

tsa*_*sch 5

KubernetesPodOperator 包含一个参数service_account_name,您可以使用该参数指定 K8s 服务帐户。它适用于 Airflow v2 和 v1.10,只是后者没有记录。

示例调用(主要取自https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/stable/operators.html):

quay_k8s = KubernetesPodOperator(
    namespace='default',
    image='quay.io/apache/bash',
    service_account_name="my_k8s_svc_acct",
    cmds=["bash", "-cx"],
    name="airflow-private-image-pod",
    task_id="task-two",
)
Run Code Online (Sandbox Code Playgroud)