通过--气流kubernetes pod操作器中的服务帐户

xuo3flqw  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(155)

我正在尝试使用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 \
...

这里遇到了障碍,因为似乎没有一种方法可以使用气流传递--servicecount标志,这是我的实现所必需的,这会在我这边引发错误。
线程“主”中出现异常。pod“Spark气流-155252344-驱动器”被禁用:用户“system:serviceaccount:test-namespace:default”无法监视名称空间“test-namespace”中API组“”中的资源“pod”:拒绝访问
到目前为止,我找到的解决方案主要集中在将默认用户添加到名称空间角色上,但这对于我的情况来说是不可能的。
有什么方法可以将serviceaccount标志传递给airflow kubernetes操作符吗?
谢谢!

j7dteeu8

j7dteeu81#

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",
)
mspsb9vt

mspsb9vt2#

事实证明,airflow代码中的pod对象确实有service_account_name字段,只是KubernetesPodOperator没有设置该字段。我必须扩展KubernetesPodOperator并通过复制所有字段来覆盖execute方法。添加了一行,在其中为pod对象设置service_account_name。
不是最干净的解决方案,但它起作用了!

相关问题