airflow.providers.docker.operators.docker_swarm

运行临时的 Docker Swarm 服务。

DockerSwarmOperator

将命令作为临时的 docker swarm 服务执行。

模块内容

class airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator(*, image, args=None, enable_logging=True, configs=None, secrets=None, mode=None, networks=None, placement=None, container_resources=None, service_prefix='airflow', logging_driver=None, logging_driver_opts=None, **kwargs)[source]

基类: airflow.providers.docker.operators.docker.DockerOperator

将命令作为临时的 docker swarm 服务执行。

示例用例 - 使用 Docker Swarm 编排使一次性脚本具有高可用性。

在主机上创建一个临时目录并将其挂载到容器中,以便存储总大小超过容器默认磁盘大小 10GB 的文件。可以通过环境变量 AIRFLOW_TMP_DIR 访问挂载目录的路径。

如果在拉取镜像之前需要登录私有注册表,则需要在 Airflow 中配置 Docker 连接,并通过参数 docker_conn_id 提供连接 ID。

参数:
  • image (str) – 用于创建容器的 Docker 镜像。如果省略镜像标签,将使用“latest”。

  • api_version – 远程 API 版本。设置为 auto 以自动检测服务器版本。

  • auto_remove

    服务终止时是否允许移除服务。可能的值

    • never: (默认) 不移除服务

    • success: 成功时移除

    • force: 始终移除服务

  • command – 在容器中运行的命令。(模版化)

  • args (str | list[str] | None) – 命令的参数。

  • docker_url – 运行 docker daemon 的主机的 URL。默认值为 DOCKER_HOST 环境变量的值,如果未设置则为 unix://var/run/docker.sock。

  • environment – 在容器中设置的环境变量。(模版化)

  • force_pull – 每次运行时都拉取 docker 镜像。默认为 False。

  • mem_limit – 容器可以使用的最大内存量。可以是浮点值(表示字节限制),或像 128m1g 这样的字符串。

  • tls_ca_cert – PEM 编码的证书颁发机构文件路径,用于保护 docker 连接。

  • tls_client_cert – PEM 编码的证书文件路径,用于验证 docker 客户端身份。

  • tls_client_key – PEM 编码的密钥文件路径,用于验证 docker 客户端身份。

  • tls_hostname – 用于匹配 docker 服务器证书的主机名,或设置为 False 以禁用检查。

  • tls_ssl_version – 与 docker daemon 通信时使用的 SSL 版本。

  • tmp_dir – 容器内用于挂载操作符在主机上创建的临时目录的挂载点。该路径也通过环境变量 AIRFLOW_TMP_DIR 在容器内部可用。

  • user – docker 容器内的默认用户。

  • docker_conn_id – Docker 连接 ID

  • tty – 为此服务的容器分配伪 TTY。需要设置此项才能查看 Docker 容器/服务的日志。

  • enable_logging (bool) – 在操作符日志中显示应用程序日志。仅当 Docker 引擎使用 json-file 或 journald 日志驱动时支持。使用 Python 应用程序时,应设置 tty 参数。

  • retrieve_output – 此 docker 镜像是否应在手动关闭镜像之前持续尝试从输出文件拉取并输出内容。对于用户希望获取未发布到日志中的 pickle 序列化输出的情况很有用。

  • retrieve_output_path – 将被检索并传递给 xcom 的输出文件路径

  • configs (list[docker.types.ConfigReference] | None) – 将暴露给 swarm 服务容器的 docker 配置列表。这些配置是 docker api 中定义的 ConfigReference 对象 [https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_

  • secrets (list[docker.types.SecretReference] | None) – 将暴露给 swarm 服务容器的 docker secrets 列表。这些 secrets 是 docker create_service api 中定义的 SecretReference 对象。[https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_

  • mode (docker.types.ServiceMode | None) – 指示服务应部署为副本服务 (replicated) 还是全局服务 (global),以及相关参数

  • networks (list[str | docker.types.NetworkAttachmentConfig] | None) – 用于将服务连接到的网络名称、ID 或 NetworkAttachmentConfig 列表。

  • placement (docker.types.Placement | list[docker.types.Placement] | None) – 调度器的放置说明。如果传递的是列表,则假定它是 Placement 对象中的约束列表。

  • container_resources (docker.types.Resources | None) – 启动的容器的资源。这些资源是 docker api 中定义的 Resources 对象 [https://docker-py.readthedocs.io/en/stable/api.html#docker.types.Resources]_ 此参数优先于 mem_limit 参数。

  • service_prefix (str) – 服务名称的前缀。服务名称将生成为 {service_prefix}-{random_string}。默认为 ‘airflow’。

  • logging_driver (Literal['json-path', 'gelf'] | None) – 用于容器日志的日志驱动。Docker 默认使用 ‘json-file’。有关 Docker 日志驱动的更多信息:https://docs.docker.net.cn/engine/logging/configure/ 注意:目前仅支持 ‘json-file’ 和 ‘gelf’ 驱动。如果留空,将使用 ‘json-file’。

  • logging_driver_opts (dict | None) – 与所选日志驱动一起使用的日志选项字典。根据日志驱动的不同,有些选项是必需的。如果未包含这些选项,操作符将失败。所有选项值必须是字符串并用双引号括起来。有关 ‘json-file’ 选项的信息:https://docs.docker.net.cn/engine/logging/drivers/json-file/ 有关 ‘gelf’ 选项的信息:https://docs.docker.net.cn/engine/logging/drivers/gelf/ 注意:‘gelf’ 驱动需要设置 ‘gelf-address’ 选项。

args = None[source]
enable_logging = True[source]
service = None[source]
tasks: list[dict] = [][source]
containers: list[dict] = [][source]
configs = None[source]
secrets = None[source]
mode = None[source]
networks = None[source]
placement = None[source]
container_resources[source]
service_prefix = 'airflow'[source]
logging_driver = None[source]
logging_driver_opts = None[source]
execute(context)[source]

创建操作符时派生。

上下文是与渲染 jinja 模版时使用的相同的字典。

有关更多上下文信息,请参阅 get_template_context。

static format_args(args)[source]

获取 args。

args 字符串被解析为一个列表。

参数:

args (list[str] | str | None) – docker 服务的 args

返回:

以列表形式返回 args

返回类型:

list[str] | None

on_kill()[source]

覆盖此方法可在任务实例被终止时清理子进程。

在操作符中使用 threading, subprocess 或 multiprocessing 模块都需要进行清理,否则会留下僵尸进程。

此条目有帮助吗?