Overview

概述 #

Flink Kubernetes Operator 扮演控制平面的角色,用于管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的原生 Kubernetes 集成已经允许你直接在运行的 Kubernetes(k8s) 集群上部署 Flink 应用程序,但 自定义资源operator 模式 也已成为 Kubernetes 本地部署体验的核心。

Flink Kubernetes Operator 旨在承担人工操作 Flink 部署的职责。 人工操作者对 Flink 部署应该如何运行、如何启动集群、如何部署作业、如何升级作业以及出现问题时如何反应有着深入的了解。Operator 的主要目标是使这些活动自动化,而这无法仅通过 Flink 原生集成来实现。

特征 #

核心 #

  • 全自动 Job Lifecycle Management
    • 运行、暂停和删除应用程序
    • 有状态和无状态应用程序升级
    • 保存点的触发和管理
    • 处理错误,回滚失败的升级
  • 多 Flink 版本支持:v1.16, v1.17, v1.18, v1.19, v1.20
  • Deployment Modes:
    • Application 集群
    • Session 集群
    • Session job
  • Built-in High Availability
  • Extensible framework
  • Advanced Configuration management
    • 默认配置与动态更新
    • 作业级别的配置
    • 环境变量
  • POD augmentation via Pod Templates
    • 原生 Kubernetes POD 定义
    • 用于自定义容器和资源
  • Job Autoscaler
    • 收集延迟和利用率指标
    • 将作业顶点调整到理想的并行度
    • 根据负载的变化进行扩展和缩减

运营 #

内置示例 #

Operator 项目提供了各种内置示例,以展示如何使用 Operator 功能。这些示例维护在 operator 的仓库中,可以在这里 找到.

涵盖以下:

  • Application, Session 以及 SessionJob 的提交
  • 检查点和高可用配置
  • Java, SQL 和 Python Flink 作业
  • Ingress、日志和指标配置
  • 使用 Kustomize 的高级 operator deployment 技术
  • 更多…

已知问题和限制 #

JobManager 高可用性 #

Operator 为 Flink 作业提供具有高可用性的 Kubernetes HA 服务Zookeeper HA 服务。HA 解决方案可以从使用额外的 备用副本中受益,这将可以拥有更快的恢复时间,但是当 Leader JobManager 停机时,Flink 作业仍将重新启动。

JobResultStore 资源泄漏 #

为了缓解 FLINK-27569 的影响,Operator 在 FLINK-27573 中引入了一个解决方法: 设置 job-result-store.delete-on-commit=false 以及为每次集群启动设置唯一值的 job-result-store.storage-path。但这必须手动清理旧运行的存储路径,并始终保留最新目录:

ls -lth /tmp/flink/ha/job-result-store/basic-checkpoint-ha-example/
total 0
drwxr-xr-x 2 9999 9999 40 May 12 09:51 119e0203-c3a9-4121-9a60-d58839576f01 <- must be retained
drwxr-xr-x 2 9999 9999 60 May 12 09:46 a6031ec7-ab3e-4b30-ba77-6498e58e6b7f
drwxr-xr-x 2 9999 9999 60 May 11 15:11 b6fb2a9c-d1cd-4e65-a9a1-e825c4b47543

AuditUtils 可以记录自定义资源中的敏感信息 #

  • 按照 FLINK-30306 中的报告,当 Flink 自定义资源发生变化时,Operator 会记录更改,其中可能包含敏感信息。我们建议在运行时将机密信息注入到 Flink 容器中以减轻这种情况。
  • 请注意,任何可以访问自定义资源的人员已经可以访问潜在的敏感信息,但是只能访问日志的人员现在也可以看到这些信息。我们计划在后续版本中向 AuditUtils 引入遮蔽规则以改进此问题。