我正在尝试使用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操作符吗?
谢谢!
2条答案
按热度按时间j7dteeu81#
KubernetesPodOperator包含一个参数
service_account_name
,您可以使用该参数指定K8s服务帐户。该参数适用于Airflow v2和v1.10,后者只是没有文档记录。示例调用(主要取自https://airflow.apache.org/docs/apache-airflow-providers-cncf-kubernetes/stable/operators.html):
mspsb9vt2#
事实证明,airflow代码中的pod对象确实有service_account_name字段,只是KubernetesPodOperator没有设置该字段。我必须扩展KubernetesPodOperator并通过复制所有字段来覆盖execute方法。添加了一行,在其中为pod对象设置service_account_name。
不是最干净的解决方案,但它起作用了!