
SeaTunnel 在 Kubernetes 上的 Local Mode 部署指南单 Pod 运行作业的验证与实战【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel本指南以 SeaTunnel 官方 Kubernetes 文档中的 Local Mode 章节为核心系统讲解如何在 Kubernetes 集群中以单个 Pod 或 Job 运行一个 SeaTunnel 作业。你将掌握从作业配置HOCON编写、ConfigMap 挂载、Pod 清单编写到日志查看与清理的完整闭环同时结合仓库源码说明-e local部署模式的底层语义并明确 Local Mode 与生产级集群模式的适用边界。Local Mode 是什么Local Mode 是 SeaTunnel 在 Kubernetes 上最轻量的一种部署形态它将一个 SeaTunnel 作业运行在一个 Pod或 Kubernetes Job中。该模式不提供集群级高可用HA不适合作为长期运行的生产集群其定位是验证镜像、验证连接器、验证作业配置的一次性运行环境。在 Kubernetes 部署总览 中SeaTunnel 在 Kubernetes 上共有三种部署模式Local Mode 是其中最基础的一种模式Kubernetes 工作负载适用场景生产建议Local ModePod 或 Job本地验证、演示、临时作业不建议作为长期运行的集群Hybrid Cluster ModeStatefulSetMaster 与 Worker 同进程的小型集群简单场景可支持但非首选Separated Cluster ModeMaster StatefulSet Worker StatefulSet生产集群、稳定调度、独立扩缩容推荐从源码理解-e local的含义Local Mode 在命令行层面体现为-e local或--deploy-mode local参数。在 MasterType.java 中该枚举定义了 SeaTunnel 作业可提交的目标LOCAL(local)面向 ST-Engine 的本地运行模式CLUSTER(cluster)面向 ST-Engine 的集群运行模式其余REMOTE、YARN_SESSION、KUBERNETES_SESSION等面向 Flink 引擎。在 ClientCommandArgs.java 中-m/--master/-e/--deploy-mode是同一组参数的不同别名其默认值为CLUSTER因此显式传入-e local是进入 Local Mode 的必要条件。对应地ClientExecuteCommand.java 中做了如下处理当masterType为LOCAL时作业以本地模式执行源码注释明确说明 LOCAL mode does not require running the job status runnerLocal Mode 仅支持MASTER_AND_WORKER角色即 Master 与 Worker 在同一进程内这与 Hybrid Cluster Mode 的运行形态一致但规模上仅有一个 Pod引擎配置被设置为ExecutionMode.LOCAL即 SeaTunnel 引擎以本地执行模式启动不组建跨节点集群。前置准备在开始之前你需要具备一个可用的 Kubernetes 集群本地验证可使用 Minikube例如minikube start --kubernetes-versionv1.23.3一个可运行kubectl的客户端环境一个 SeaTunnel 镜像例如seatunnel:3.0.0仓库文档中的示例镜像版本请以你实际构建/拉取的镜像标签为准私有镜像仓库时为 Pod 配置imagePullSecrets。关于镜像的构建方式可参考 Kubernetes 部署总览 中的镜像推荐章节将常用连接器、依赖与基础配置打入镜像避免运行时下载依赖带来的不确定性。创建作业配置Local Mode 的第一步是编写 SeaTunnel 作业配置HOCON 格式。以下示例是一个流式作业从 FakeSource 读取数据写入 Console Sink。将其保存为seatunnel.streaming.confenv { parallelism 2 job.mode STREAMING checkpoint.interval 2000 } source { FakeSource { parallelism 2 plugin_output fake row.num 16 schema { fields { name string age int } } } } sink { Console { } }各配置块含义如下env.parallelism 2作业整体并行度Local Mode 下会按该并行度在 Pod 内的单引擎实例上调度任务env.job.mode STREAMING作业模式STREAMING表示流式作业若为批处理可改为BATCHenv.checkpoint.interval 2000检查点间隔毫秒。注意Local Mode 下检查点与状态恢复属于本地引擎行为不涉及集群共享存储生产集群模式下的 checkpoint 配置请参考 Kubernetes 配置 中的 Checkpoint Storage 章节source.FakeSource内置的模拟数据源连接器row.num 16表示生成 16 行数据schema.fields定义了两列字段namestring与ageintsink.Console将数据打印到控制台便于在kubectl logs中直接观察结果。将配置注入 PodConfigMapKubernetes 中推荐使用 ConfigMap 保存非敏感配置再通过subPath挂载为容器内的具体文件。执行以下命令创建 ConfigMapkubectl create configmap seatunnel-job-config \ --from-fileseatunnel.streaming.confseatunnel.streaming.conf该命令将本地的seatunnel.streaming.conf文件内容存入名为seatunnel-job-config的 ConfigMap。关于配置挂载有两处需要特别注意详见 Kubernetes 配置不要将 ConfigMap 整体挂载覆盖/opt/seatunnel/config目录除非该 ConfigMap 同时包含镜像所需的所有文件如jvm_options、jvm_master_options、jvm_worker_options等不要把数据库密码、对象存储密钥、Token、私钥等敏感值写进 ConfigMap。ConfigMap 文件内容不会解析 Kubernetes 的secretKeyRef敏感信息应通过 Secret 环境变量或挂载文件注入。Local Mode 仅为验证用途但同样应遵循这一安全习惯。创建并运行 Pod将以下清单保存为seatunnel-local.yamlapiVersion: v1 kind: Pod metadata: name: seatunnel-local labels: app: seatunnel mode: local spec: restartPolicy: Never containers: - name: seatunnel image: seatunnel:3.0.0 imagePullPolicy: IfNotPresent command: - /bin/sh - -c - /opt/seatunnel/bin/seatunnel.sh --config /data/seatunnel.streaming.conf -e local env: - name: SEATUNNEL_HOME value: /opt/seatunnel resources: requests: cpu: 1 memory: 2Gi limits: cpu: 1 memory: 4Gi volumeMounts: - name: job-config mountPath: /data/seatunnel.streaming.conf subPath: seatunnel.streaming.conf volumes: - name: job-config configMap: name: seatunnel-job-config这份清单中的关键设计点restartPolicy: Never作业型 Pod 运行结束后不会被 Kubelet 反复重启适合运行一次即结束的验证场景若希望具备失败重试语义可将 workload 换为 Kubernetes Job启动命令/opt/seatunnel/bin/seatunnel.sh --config /data/seatunnel.streaming.conf -e local--config指定作业配置路径-e local指定 Local Mode对应前文 MasterType.java 中的LOCAL(local)SEATUNNEL_HOME/opt/seatunnel引擎定位安装目录、plugins/、lib/等运行目录的环境变量volumeMounts使用subPath: seatunnel.streaming.conf仅将 ConfigMap 中的单个文件挂载为/data/seatunnel.streaming.conf避免整目录挂载覆盖镜像内的其他配置resources.requests/limits验证场景下的初始资源建议1 核/2Gi 请求、1 核/4Gi 上限实际应按数据量与连接器特性调整。应用清单并观察运行kubectl apply -f seatunnel-local.yaml查看日志kubectl logs -f seatunnel-local对于流式作业job.mode STREAMINGFakeSource 生成的数据会被 Console Sink 持续打印到 stdout你可以据此确认镜像、连接器与作业配置是否工作正常。清理资源验证结束后删除 Podkubectl delete -f seatunnel-local.yaml也可以删除先前创建的 ConfigMapkubectl delete configmap seatunnel-job-config由于restartPolicy: Never且未使用持久化存储Local Mode 不残留运行状态这是它适合用完即弃验证场景的重要原因。Local Mode 的调试与常见问题Local Mode 是最小化的运行单元出现问题时排查链路也最直接镜像问题拉取失败或启动即退出优先检查imagePullPolicy、imagePullSecrets与镜像标签是否可达连接器缺失作业中引用了未打入镜像的连接器插件时引擎会在启动阶段报找不到插件。插件的正确放置位置是${SEATUNNEL_HOME}/plugins自定义连接器与${SEATUNNEL_HOME}/libTransform 插件及需要进入进程 classpath 的扩展 jar详见 Kubernetes 配置 - 插件加载配置语法错误HOCON 配置解析失败时kubectl logs中会输出解析异常堆栈可对照上文配置块逐项检查资源不足requests/limits设置过小可能导致 OOMKilled观察kubectl describe pod seatunnel-local中的容器状态与退出原因。如需更完整的集群运维手段查看集群状态、访问 REST API、扩缩容 Worker、滚动更新、PodDisruptionBudget、常见故障排查可参考 Kubernetes 运维指南。何时不应使用 Local Mode模式选择建议官方文档对 Local Mode 的使用边界给出明确建议Local Mode 用于验证镜像、连接器和作业配置。如果你需要以下能力则应切换到 Separated Cluster ModeMaster StatefulSet Worker StatefulSet生产推荐长期运行的常驻服务Local Mode 无 HAPod 退出即作业终止REST API 提交作业集群模式下通过seatunnel-masterService 暴露 REST API默认 8080 端口支持curl提交与查询作业Local Mode 的作业生命周期与 Pod 绑定不具备该能力集群故障转移多 Master 参与选举与 IMap 状态备份backup-count至少为 1 时建议不少于 2 个 Master 副本独立扩缩容Worker 可独立扩缩容以调整可用 slot 数量kubectl scale statefulset seatunnel-worker --replicasN计算资源与调度资源相互隔离。此外中间态的 Hybrid Cluster Mode 让 Master 与 Worker 同进程运行、每个节点都可参与选举与执行适合小型集群但当任务负载高时执行负载可能影响 Master 选举、调度与 REST API 稳定性因此生产环境同样优先推荐 Separated Cluster Mode。小结Local Mode 是 SeaTunnel 在 Kubernetes 上最小可运行的部署形态一个作业、一个 Pod、一份 HOCON 配置、一次kubectl apply。它虽然没有集群高可用却是验证镜像、连接器与作业配置最快、成本最低的路径。理解其-e local的底层语义对应源码 MasterType.java 中的LOCAL枚举以及在 ClientExecuteCommand.java 中被设置为ExecutionMode.LOCAL能帮助你准确判断何时用它做验证、何时切换到生产级的 Separated Cluster Mode。【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考