Kubernetes生产实践系列之十:安装Kubernetes原生的airflow

airflow系列之K8S部署airflow2.5.1 笔者遇到了以下问题,将会为你一一解答 + airflow db init未执行报错问题 + redis连接问题 + 日志无法查看问题 + 多woker不启动问题 + helm upgrade问题 + 缓存问题 + 数据库不存在问题 + 动态安装依赖问题 阅读详情

一、前言

Airflow是Airbnb的基于DAG(有向无环图)的任务管理系统,是进行任务分割、调度处理的利器。在生产实践中,有业务部门需要使用airflow来进行大批量数据的分多阶段、阶段内高并发的处理;结合airflow的任务分割调度能力和Kubernetes的集群资源动态调配能力,就可以快速达到业务目标。

转载自https://blog.youkuaiyun.com/cloudvtech

二、安装支持Kubernetets的airflow

2.1 获取airflow代码

git clone https://github.com/apache/incubator-airflow.git

2.2 修改airflow文件支持本地Kubernetes环境

  • patch Dockerfile
  • scripts/ci/kubernetes/kube/airflow.yaml
  • scripts/ci/kubernetes/kube/configmaps.yaml
  • scripts/ci/kubernetes/kube/deploy.sh
  • scripts/ci/kubernetes/kube/volumes.yaml
1.patch Dockerfile
Add above kubeconfig file as /root/.kube/config for airflow image

RUN mkdir /root/.kube
COPY config /root/.kube/config

2. scripts/ci/kubernetes/kube/airflow.yaml
-    namespace: default
+    namespace: air-job

-        image: airflow
-        imagePullPolicy: IfNotPresent
+        image: 172.222.22.11:5000/airflow
+        imagePullPolicy: Always

3. scripts/ci/kubernetes/kube/configmaps.yaml
-    executor = KubernetesExecutor
+    executor = LocalExecutor

-    namespace = default
+    namespace = air-job

-    rbac = True
+    rbac = False

4. scripts/ci/kubernetes/kube/deploy.sh
-kubectl delete -f $DIRNAME/postgres.yaml
-kubectl delete -f $DIRNAME/airflow.yaml
-kubectl delete -f $DIRNAME/secrets.yaml
+kubectl delete -f $DIRNAME/postgres.yaml -n air-job
+kubectl delete -f $DIRNAME/airflow.yaml -n air-job
+kubectl delete -f $DIRNAME/secrets.yaml -n air-job

-kubectl apply -f $DIRNAME/secrets.yaml
-kubectl apply -f $DIRNAME/configmaps.yaml
-kubectl apply -f $DIRNAME/postgres.yaml
-kubectl apply -f $DIRNAME/volumes.yaml
-kubectl apply -f $DIRNAME/airflow.yaml
+kubectl apply -f $DIRNAME/secrets.yaml -n air-job
+kubectl apply -f $DIRNAME/configmaps.yaml -n air-job
+kubectl apply -f $DIRNAME/postgres.yaml -n air-job
+kubectl apply -f $DIRNAME/volumes.yaml -n air-job
+kubectl apply -f $DIRNAME/airflow.yaml -n air-job

-  PODS=$(kubectl get pods | awk 'NR>1 {print $0}')
+  PODS=$(kubectl get pods -n air-job | awk 'NR>1 {print $0}')

-POD=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep airflow | head -1)
+POD=$(kubectl get pods -n air-job -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep airflow | head -1)
 echo "------- pod description -------"
-kubectl describe pod $POD
+kubectl describe pod $POD -n air-job
 echo "------- webserver logs -------"
-kubectl logs $POD webserver
+kubectl logs $POD webserver -n air-job
 echo "------- scheduler logs -------"
-kubectl logs $POD scheduler
+kubectl logs $POD scheduler -n air-job

5. scripts/ci/kubernetes/kube/volumes.yaml
+  annotations:
+    volume.beta.kubernetes.io/storage-class: "nfs-client"

Also change volume size and remove  PersistentVolume
-kind: PersistentVolume
-apiVersion: v1
-metadata:
-  name: airflow-dags
-spec:
-  accessModes:
-    - ReadWriteOnce
-  capacity:
-    storage: 2Gi
-  hostPath:
-    path: /airflow-dags/
----
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
   name: airflow-dags
+  annotations:
+    volume.beta.kubernetes.io/storage-class: "nfs-client"
 spec:
   accessModes:
     - ReadWriteMany
   resources:
     requests:
-      storage: 2Gi
----
-kind: PersistentVolume
-apiVersion: v1
-metadata:
-  name: airflow-logs
-spec:
-  accessModes:
-    - ReadWriteMany
-  capacity:
-    storage: 2Gi
-  hostPath:
-    path: /airflow-logs/
+      storage: 100Gi
 ---
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
   name: airflow-logs
+  annotations:
+    volume.beta.kubernetes.io/storage-class: "nfs-client"
 spec:
   accessModes:
     - ReadWriteMany
   resources:
     requests:
-      storage: 2Gi
----
-kind: PersistentVolume
-apiVersion: v1
-metadata:
-  name: test-volume
-spec:
-  accessModes:
-    - ReadWriteOnce
-  capacity:
-    storage: 2Gi
-  hostPath:
-    path: /airflow-dags/
+      storage: 100Gi
 ---
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
   name: test-volume
+  annotations:
+    volume.beta.kubernetes.io/storage-class: "nfs-client"
 spec:
   accessModes:
     - ReadWriteMany
   resources:
     requests:
-      storage: 2Gi
+      storage: 10Gi

2.3 构建镜像

export AIRFLOW_GPL_UNIDECODE=yes
./scripts/ci/kubernetes/docker/build.sh 
docker tag airflow 172.222.22.11:5000/airflow
docker push 172.222.22.11:5000/airflow

2.4 部署

#运行部署脚本
./scripts/ci/kubernetes/kube/deploy.sh 

#查看部署结果
kubectl get all
NAME                                   READY     STATUS    RESTARTS   AGE
pod/airflow-5cff4ccbb9-4qvxq           2/2       Running   0          30m
pod/postgres-airflow-bbb79b866-wgrcr   1/1       Running   0          32m
NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/airflow            NodePort    10.96.100.122   <none>        8080:30809/TCP   32m
service/postgres-airflow   ClusterIP   10.96.177.122   <none>        5432/TCP         32m
NAME                               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/airflow            1         1         1            1           32m
deployment.apps/postgres-airflow   1         1         1            1           32m
NAME                                         DESIRED   CURRENT   READY     AGE
replicaset.apps/airflow-5cff4ccbb9           1         1         1         32m
replicaset.apps/postgres-airflow-bbb79b866   1         1         1         32m


#查看PVC
kubectl get pvc
NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
airflow-dags   Bound     pvc-b522f935-d6a6-11e8-9a48-fa163ebda1b8   100Gi      RWX            nfs-client     59m
airflow-logs   Bound     pvc-b5243605-d6a6-11e8-9a48-fa163ebda1b8   100Gi      RWX            nfs-client     59m
test-volume    Bound     pvc-b526f36b-d6a6-11e8-9a48-fa163ebda1b8   10Gi       RWX            nfs-client     59m

#查看NFS存储
ls /mnt/nfs/air-job-airflow-dags-pvc-b522f935-d6a6-11e8-9a48-fa163ebda1b8/
docker_copy_data.py                       example_kubernetes_operator.pyc              example_trigger_target_dag.py
docker_copy_data.pyc                      example_latest_only.py                       example_trigger_target_dag.pyc
example_bash_operator.py                  example_latest_only.pyc                      example_xcom.py
example_bash_operator.pyc                 example_latest_only_with_trigger.py          example_xcom.pyc
example_branch_operator.py                example_latest_only_with_trigger.pyc         __init__.py
example_branch_operator.pyc               example_passing_params_via_test_command.py   __init__.pyc
example_branch_python_dop_operator_3.py   example_passing_params_via_test_command.pyc  mydag-fail.py
example_branch_python_dop_operator_3.pyc  example_python_operator.py                   mydag-fail.pyc
example_docker_operator.py                example_python_operator.pyc                  mydag.py
example_docker_operator.pyc               example_short_circuit_operator.py            mydag.pyc
example_http_operator.py                  example_short_circuit_operator.pyc           subdags
example_http_operator.pyc                 example_skip_dag.py                          test_utils.py
example_kubernetes_annotation.py          example_skip_dag.pyc                         test_utils.pyc
example_kubernetes_annotation.pyc         example_subdag_operator.py                   tutorial.py
example_kubernetes_executor.py            example_subdag_operator.pyc                  tutorial.pyc
example_kubernetes_executor.pyc           example_trigger_controller_dag.py
example_kubernetes_operator.py            example_trigger_controller_dag.pyc

2.5 访问GUI

转载自https://blog.youkuaiyun.com/cloudvtech

三、运行自定义的任务

定义两个任务一个会成功一个会失败,使用kubernetes_pod_operator,这个任务会成功mydag.py

from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.operators.kubernetes_pod_operator import KubernetesPodOperator
from airflow.operators.dummy_operator import DummyOperator
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': '20181023',
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}
dag = DAG(
    'kubernetes_sample_pass', default_args=default_args, schedule_interval=timedelta(minutes=600))
start = DummyOperator(task_id='run_this_first', dag=dag)
passing = KubernetesPodOperator(namespace='air-job',
                          image="python:3.6",
                          cmds=["python","-c"],
                          arguments=["print('hello world')"],
                          labels={"foo": "bar"},
                          name="passing-test",
                          task_id="passing-task",
                          get_logs=True,
                          dag=dag
                          )
success = KubernetesPodOperator(namespace='air-job',
                          image="ubuntu:16.04",
                          cmds=["echo","hello world"],
                          labels={"foo": "bar"},
                          name="success",
                          task_id="success-task",
                          get_logs=True,
                          dag=dag
                          )
passing.set_upstream(start)
success.set_upstream(start)

再定义一个会失败的任务进行对比,mydag-fail.py

from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.operators.kubernetes_pod_operator import KubernetesPodOperator
from airflow.operators.dummy_operator import DummyOperator
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': '20181023',
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5)
}
dag = DAG(
    'kubernetes_sample_fail', default_args=default_args, schedule_interval=timedelta(minutes=600))
start = DummyOperator(task_id='run_this_first', dag=dag)
passing = KubernetesPodOperator(namespace='air-job',
                          image="python:3.6",
                          cmds=["python","-c"],
                          arguments=["print('hello world')"],
                          labels={"foo": "bar"},
                          name="passing-test",
                          task_id="passing-task",
                          get_logs=True,
                          dag=dag
                          )
failing = KubernetesPodOperator(namespace='air-job',
                          image="ubuntu:16.04",
                          cmds=["python","-c"],
                          arguments=["print('hello world')"],
                          labels={"foo": "bar"},
                          name="fail",
                          task_id="failing-task",
                          get_logs=True,
                          dag=dag
                          )
passing.set_upstream(start)
failing.set_upstream(start)

将任务倒入:

kubectl cp mydag.py air-job/airflow-5cff4ccbb9-4qvxq:/root/airflow/dags -c scheduler
kubectl cp mydag-fail.py air-job/airflow-5cff4ccbb9-4qvxq:/root/airflow/dags -c scheduler

分别运行成功和失败的任务:

通过以下方式可以调整POD资源配置


# Limit resources on this operator/task with node affinity & tolerations
three_task = PythonOperator(
    task_id="three_task", python_callable=print_stuff, dag=dag,
    executor_config={
        "KubernetesExecutor": {"request_memory": "128Mi",
                               "limit_memory": "128Mi",
                               "tolerations": tolerations,
                               "affinity": affinity}}
)

转载自https://blog.youkuaiyun.com/cloudvtech

四、业务系统多阶段多并发任务

业务使用airflow和Kubernetes进行业务处理

 

如何在Kubernetes 上部署Airflow 如何在Kubernetes上面部署Airflow。 阅读详情

相关推荐

airflow系列之K8S多Worker节点安装后问题总结与自定义镜像并传参

airflowignore文件用户忽略检查非DAG文件,放置在dags_folders下,该配置在values.yaml中,我配置的是/opt/airflow/dags/repo/dags,所以放在此处。应该是版本问题,我把版本改为了2.2.1,清空数据库,uninstall后重新安装即可【这个问题排查了好久,无奈】,注意在values.yaml中写版本,在install.sh中的版本去掉,不然不生效。DAG中的第一个TASK具体执行文件开头引入,这样可以在WebServer Log中可以看到具体日志。

算法小生 891

Airflow在Kubernetes上的操作器

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34315485的博客 1678

使用Airflow在k8s集群上轻松搭建企业级工作流

Apache Airflow 是一个开源的工作流管理平台,用于编写、调度和监控工作流(Workflows)。它最初由 Airbnb 开发,并于 2016 年捐赠给 Apache 软件基金会。Airflow 的核心理念是通过代码来定义工作流,使得工作流的管理和维护更加灵活和可扩展, github社区地址见链接。

AliCloudROS的博客 1490

airflow+k8s 多用户-分布式-跨集群-容器化调度

最开始采用airflow+k8s分布式容器化调度的方案主要是为了解决下面的问题: 1、特有环境/特有脚本调度的调度问题 2、大数据量任务或大算力任务节点故障和调度管理问题 目前已经基于airflow+k8s改造成多用户-分布式-跨集群-容器化调度的平台。 airflow官网:https://airflow.apache.org/docs/stable/ airflow介绍 airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundati

5191

AIRFLOW使用总结

由于机器学习各流程时长较长,并且流程比较复杂,经过选型对比,决定选用airflow作为流程调度器 一、选型对比 网上有较详细的各种流程调度器特性对比:https://www.jdon.com/workflow/Airflow-vs-Azkaban-vs-Conductor-vs-Oozie-vs-Amazon-Step-Functions.html 个人选择airlfow作为机器学习流程调...

peking1987的专栏 5866

apache-airflow-with-k8s-executor:这是与Kubernetes执行程序一起作为ETL的Apache气流

Minikube中的Apache Airflow设置 使用头盔 前提条件 minikube: minikube是使用VirtualBox或Docker在计算机上创建单个节点(虚拟机)Kubernetes集群的工具。 要安装minikube,请点击此 kubectl: kubectl是一个CLI工具,可用于部署应用程序,检查和管理集群资源以及查看日志。 要安装kubectl,请单击此 docker: docker是一种开源的容器化技术,用于构建和容器化您的应用程序。我们将使用docker作为minikube的VM驱动程序。 要安装docker,请点击此 helm: helm是Kubernetes的程序包管理器,它将多个Kubernetes资源打包到单个逻辑部署单元调用Chart 。 要安装helm点击此 启动Minikube 首先在单独的配置文件和群集中启动minikube,如下所示

k8s部署airflow+mysql

k8s启动airflow + mysql 创建命名空间脚本create_shjujubu_namespace.yaml apiVersion: v1 kind: Namespace metadata: name: shujubu labels: name: shujubu 执行文件创建 shujubu命名空间: kubectl create -f create_shjujubu...

2123

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

User-Community Airflow Helm Chart完全指南:如何在Kubernetes上部署Apache Airflow

User-Community Airflow Helm Chart是在Kubernetes上使用Helm部署Apache Airflow的标准方式。自2017年创建以来,它已帮助数千家公司在Kubernetes上创建了生产就绪的Airflow部署。本指南将为你提供使用该Helm Chart在Kubernetes上部署Apache Airflow的完整步骤,从环境准备到最终访问Airflow UI,

gitblog_00304的博客 1129

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 364

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2635

kube-airflow 完全指南:在 Kubernetes 上运行 Apache Airflow 的终极方案

你是否正在寻找一套在 Kubernetes 上运行 Apache Airflow 的终极方案?kube-airflow 正是为此而生的开源项目,它提供了一整套 Docker 镜像与 Kubernetes 配置文件,让你无需维护复杂的 Celery 集群,就能轻松获得高可用的 Airflow 调度器与并行任务执行能力。本文将从零开始,带你快速掌握 kube-airflow 的部署方法、核心组件与最佳

gitblog_00858的博客 248

第二节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - Python Flask 后端开发详解(附源码)

大家好,我是cuiwin!本节内容,我们从零开始开发基于Python(Flask)的后端项目,对接Vue Vben Admin(vben5)。登录mysql数据库执行: 创建数据库。

cuiwin的专栏 2263

Airflow on Kubernetes

在本系列第一篇博客Airflow Architecture中,简述了,Airflow的设计架构,Airflow在部署的时候跟设计架构也是一一对应的,Scheduler进程,WebServer进程和Worker进程需要单独启动。Scheduler和WebServer可以跑在一个操作系统内,也可以分开,而通常Worker需要很多,如果是部署特定的数量的Worker,那就需要特定数量的机器才行; Air...

来啊 快活啊 4947

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

9.16华为OD机试真题 新系统 - 矩阵螺旋遍历 (Java/Py/C/C++/Js/Go)

算法大师! 638

Ardupilot无人船(车)mavros自主控制

rover 4.4。

超维空间科技的博客 3229

探索云原生工作流管理:Apache Airflow与Kubernetes的完美结合

探索云原生工作流管理:Apache Airflow与Kubernetes的完美结合 随着云原生时代的到来,如何高效地管理和调度复杂的作业流程变得至关重要。今天,我们将深入探讨一个令人兴奋的开源项目——Airflow on K8S Operator,它巧妙地将成熟的Apache Airflow集成到强大的Kubernetes生态之中,为云上工作流管理带来了全新的解决方案。 项目介绍 Airflow ...

gitblog_00952的博客 846

2026 MCM Problem A:智能手机电池连续时间建模——完整解题思路附第一问解题代码

摘要:本文针对2026年MCM A题"智能手机电池连续时间建模"问题,提出基于能量守恒原理的微分方程模型。通过建立以SOC(t)为状态变量的动态系统,将屏幕亮度、处理器负载等主要耗电因素纳入统一功率框架,实现了不同使用场景下的电量变化精确描述。研究表明,屏幕亮度和CPU负载对续航时间影响最大,温度与后台任务会产生放大效应。该模型具有物理可解释性和应用扩展性,为手机电源管理提供了理论依据。(150字)

一键难忘的博客 768

为什么要在 Kubernetes 上跑 Airflow?kube-airflow 给出的 5 大理由

Airflow 是业界最流行的开源工作流调度平台,而 Kubernetes(K8s)是事实上的容器编排标准。**kube-airflow** 正是一个把两者结合起来的开源项目:它提供了一套现成的 Docker 镜像和 Kubernetes 配置文件,让你能以极低的成本在 K8s 集群上运行 Airflow。如果你还在纠结"要不要把 Airflow 迁到 Kubernetes",下面这 5 大理由或

gitblog_00994的博客 275

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

kube-airflow Helm 部署完全指南:make helm-install 实战教程

想用 Kubernetes 快速跑起一套 Apache Airflow 工作流调度平台?**kube-airflow 的 Helm 部署**是当前最推荐的方式。它把 Airflow 的 webserver、scheduler、worker、Flower 监控面板打包成一份 Helm Chart,你只需一条 `make helm-install` 命令,就能在几分钟内完成 **Airflow on

gitblog_00054的博客 1069

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Apache Airflow在Kubernetes上的部署操作指南

Apache Airflow在Kubernetes上的部署操作指南 airflow-on-k8s-operatorAirflow on Kubernetes Operator项目地址:https://gitcode.com/gh_mirrors/ai/airflow-on-k8s-operator 目录结构及介绍 本指南将带领您探索并理解Apache Airflow-on-K8S-Operato...

gitblog_01175的博客 1069

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

10分钟上手User-Community Airflow Helm Chart:快速部署Apache Airflow的终极教程

User-Community Airflow Helm Chart是在Kubernetes上使用Helm部署Apache Airflow的标准方式。自2017年创建以来,它已帮助数千家公司在Kubernetes上创建了生产就绪的Airflow部署。本教程将带你快速掌握使用该Helm Chart部署Apache Airflow的完整流程。 ## 准备你的环境:部署前的必备条件 在开始部署之前,请

gitblog_00703的博客 793

kube-airflow 快速部署:一条 kubectl create 命令拉起完整 Airflow 集群

如果你正在寻找一种**最简单的方式在 Kubernetes 上部署 Airflow**,那么 kube-airflow 正是你需要的工具。它是一套专为 Kubernetes 设计的 Airflow 运行方案,把 Docker 镜像和 Kubernetes 配置打包在一起,让新手也能用 **一条 kubectl create 命令** 拉起包含调度器、Web 界面、执行器和消息队列的完整 Airfl

gitblog_00290的博客 741

execa 文本行处理全指南:lines 选项、渐进式迭代与新行拆分

本文围绕 execa("Process execution for humans")的文本行(Text lines)处理能力展开,完整讲解三个核心场景:用 `lines` 选项把子进程输出一次性拆分成字符串数组、用 `for await` 对运行中的子进程输出做渐进式迭代、以及在不同场景下如何控制换行符(newline)的保留与剥离。读完本文,你将掌握 `lines`、`stripFinalNew

gitblog_00016的博客 867

Apache Airflow Kubernetes Executor:云原生执行

在现代数据工程领域,工作流调度系统的可扩展性和资源利用率是至关重要的挑战。传统执行器往往面临资源分配不均、环境隔离不足和弹性扩展困难等问题。Apache Airflow Kubernetes Executor 作为云原生时代的解决方案,通过将每个任务封装为独立的 Kubernetes Pod,实现了真正的资源隔离、弹性伸缩和高效的资源利用。 本文将深入探讨 Kubernetes Executor...

gitblog_00650的博客 1032
上一篇: Kubernetes生产实践系列之九:通过RPM安装Kubernetes HA集群
下一篇: Kubernetes生产实践系列之十一:Kubernetes Mysql Operator方案对比
cloudvtech
博客等级 码龄9年 533粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值