gpt4 book ai didi

Airflow 中的 KubernetesPodOperator 特权 security_context

转载 作者:行者123 更新时间:2023-12-02 11:30:53 27 4
gpt4 key购买 nike

我在 Google 的 Cloud Composer 上运行 Airflow。我正在使用 KubernetesPodOperator并希望通过 gcsfuse 将谷歌存储桶挂载到 pod 中的目录中.似乎要做到这一点,我需要按照指定的方式提供 k8s 特权安全上下文 here .似乎 Airflow 最近向 KubernetesPodOperator 添加了 security_context 参数。我在操作符中指定的安全上下文是:

security_context = {
'securityContext': {
'privileged': True,
'capabilities':
{'add': ['SYS_ADMIN']}
}
}

当我尝试运行时 airflow test dag_id task_id date在 Airflow 工作器中,pod 启动,当代码尝试通过 gcsfuse 挂载存储桶时,它会抛出错误 "fusermount: fuse device not found, try 'modprobe fuse' first" .这使得 security_context 似乎不起作用( ex. )。

我是否误解了运算符中的 security_context 参数和/或我的 securityContext 字典定义是否无效?

最佳答案

security_context KubernetesPodOperator 的 kwarg 设置 pod 的安全上下文,而不是 pod 内的特定容器,因此它仅支持 PodSecurityContext 中概述的选项.由于您指定的参数对 pod 的安全上下文无效,因此它们将被丢弃。privilegedcapabilities属性仅作为容器 SecurityContext 的一部分有效,这意味着您需要以某种方式将它们设置在 pod 的 上容器规范您可以通过自己定义整个 pod 规范来做到这一点(而不是让运算符(operator)为您生成它)。使用 KubernetesPodOperator,您可以设置 full_pod_specpod_template_file指定 Kubernetes API Python 对象或对象 YAML 的路径,然后将用于生成 pod。使用前者的示例:

from airflow.contrib.operators.kubernetes_pod_operator import KubernetesPodOperator
import kubernetes.client.models as k8s

pod = k8s.V1Pod()
pod.spec = k8s.V1PodSpec()
pod.spec.containers = [
k8s.V1Container(
...,
security_context={
'privileged': True,
'capabilities': {'add': ['SYS_ADMIN']}
}
)
]

# Equivalent to setting security_context from the operator
pod.spec.security_context = {}

t1 = KubernetesPodOperator(..., full_pod_spec=pod)
如果您想使用 pod_template_file使用 Cloud Composer,您可以将 pod YAML 上传到 GCS 并将其设置为 mapped storage paths 之一(例如 /home/airflow/gcs/dags/my-pod.yaml 如果你把它放在 DAGs 目录中。
通读 airflow.providers.google.cloud KubernetesPodOperator 版本,可能是 full_pod_spec在较新版本的运算符中损坏。但是,它应该适用于旧的 contrib 版本。

关于Airflow 中的 KubernetesPodOperator 特权 security_context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001647/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com