【梳理】k8s使用Operator搭建Flink集群(高可用可选)

这篇具有很好参考价值的文章主要介绍了【梳理】k8s使用Operator搭建Flink集群(高可用可选)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 架构图

【梳理】k8s使用Operator搭建Flink集群(高可用可选),云原生,kubernetes,flink,容器

参考:部署验证demo

2. helm 安装operator

安装cert-manager依赖
Jetstack/cert-manager 是 Kubernetes 生态系统中的一款开源项目,它提供了一种自动化的方式来管理 TLS 证书的生命周期

kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
# helm 安装 , 包含 deploy*1 、cm*1、crd*2 以及 rbac sa webhook
kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.7.0/
helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator

3. 集群知识

k8s上的两种模式:Native和Standalone

Flink Kubernetes Operator 支持:原生部署native(默认)和独立部署standalone

可以使用部署规范中的 mode 字段设置部署模式。

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
...
spec:
  ...
  mode: standalone

两种CR

FlinkDeployment CR 定义了 Flink 应用程序和会话集群部署。

FlinkSessionJob CR 定义了 Session 集群上的会话任务(Job)

Flink Kubernetes Operator 支持两种主要类型的部署:Application集群 和 Session集群 ,k8s上不支持Job集群。

4. 运行集群实例

Demo1:Application 集群

一次性任务,只有一个Job,执行器和逻辑代码打包成一个jar,直接运行,运行即结束。

# 此crd创建后,operator会创建:
# 1个deploy(即jobmanager,镜像为flink:1.17)
# 1个pod(即taskManager,镜像也是flink:1.17,任务jar包在镜像中)
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-example
spec:
  image: flink:1.17
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
    parallelism: 2
    upgradeMode: stateless

注:k8s不支持Job集群,可以看做是 Flink Application 集群”客户端运行“的替代方案。集群管理器为每个提交的作业启动一个集群。

Demo2:Session集群

多租户,多个job,每个sessionjob代表一个job,有提交jar包的功能。
Session使用与Application 集群类似的规范,唯一的区别是 job 未定义。

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-session-deployment-example
spec:
  image: flink:1.17
  flinkVersion: v1_17
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  serviceAccount: flink
---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:
  name: basic-session-job-example
spec:
  deploymentName: basic-session-deployment-example
  job:
    jarURI: https://repo1.maven.org/maven2/org/apache/flink/flink-examples-streaming_2.12/1.16.1/flink-examples-streaming_2.12-1.16.1-TopSpeedWindowing.jar
    parallelism: 4
    upgradeMode: stateless

---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:
  name: basic-session-job-example2
spec:
  deploymentName: basic-session-deployment-example
  job:
    jarURI: https://repo1.maven.org/maven2/org/apache/flink/flink-examples-streaming_2.12/1.16.1/flink-examples-streaming_2.12-1.16.1.jar
    parallelism: 2
    upgradeMode: stateless
    entryClass: org.apache.flink.streaming.examples.statemachine.StateMachineExample

注:为了方便访问,可以再创建ingress。svc端口默认为8081,指向svc-rest即可。

优劣

  • Session集群,是常规的共享方式。
  • Application集群,提供了更好的隔离,生命周期与程序逻辑有关。
  • Job集群,适合长期运行、要求高稳定性的大型作业。(启动慢)

5. 高可用部署

Flink 提供了两种高可用服务实现:

  • ZooKeeper:每个 Flink 集群部署都可以使用 ZooKeeper HA 服务。它们需要一个运行的 ZooKeeper 复制组(quorum)。
  • Kubernetes:Kubernetes HA 服务只能运行在 Kubernetes 上。
    注:Flink 持久化元数据和 job 组件,直到作业执行成功、被取消或最终失败,再删除。

我在实践时,遇到两个问题:

问题1:High availability should be enabled when starting standby JobManagers

直接增加jobManager的副本数提示上述错误,要先做选举配置,我选择的是k8s实现,下面仅列出修改部分,注意flinkConfigurationpodTemplate两部分:

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
spec:
  flinkConfiguration:
    high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory
    high-availability.storageDir: file:///flink-data/ha
    web.upload.dir: /flink-data  #会自动创建flink-web-upload目录保存上传的jar包
  jobManager:
    replicas: 2
  taskManager:
    replicas: 2
  podTemplate:
    spec:
      containers:
        - name: flink-main-container
          volumeMounts:
            - mountPath: /flink-data
              name: flink-volume
      volumes:
        - name: flink-volume
          persistentVolumeClaim:
            claimName: flink-ha

问题2:The base directory of the JobResultStore isn’t accessible

如果没有正确挂载存储卷提示上述错误。
官方demo配置的卷是宿主机的路径,如下:文章来源地址https://www.toymoban.com/news/detail-850873.html

      volumes:
        - name: flink-volume
          hostPath:
            path: /tmp/flink  # 如果宿主机上没有这个路径会报错
            type: Director

6. 补充

  1. 拉取国外镜像比较困难,可以使用https://dockerproxy.com/
  2. 搭建多租户PaaS平台,可以使用Session方式,新任务可以通过CR进行管理,也可以由页面添加jar包。
  3. 本文内容来源于Flink官网,进行翻译、简化、整理,供大家参考~

到了这里,关于【梳理】k8s使用Operator搭建Flink集群(高可用可选)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高可用containerd搭建K8s集群【v1.25】

    [toc] 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 集群中所有机器之间网络互通 可以访问外网,需要拉取镜像 禁止swap分区 角色 IP k8s-master1 192.168.4.114 k8s-master2

    2024年02月09日
    浏览(42)
  • 【kubernetes】k8s高可用集群搭建(三主三从)

    目录 【kubernetes】k8s高可用集群搭建(三主三从) 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名(根据主机角色不同,做相应修改) 5、主机名映射 6、将桥接的IPv4流量传递到iptables的链 7、时间同步 8、master之间进行免密登录设置 三、

    2024年02月09日
    浏览(43)
  • 基于Docker搭建多主多从K8s高可用集群

    主机规划 master - 最低两核心,否则集群初始化失败 主机名 IP地址 角色 操作系统 硬件配置 ansible 10.62.158.200 同步工具节点 CentOS 7 2 Core/4G Memory master01 10.62.158.201 管理节点01 CentOS 7 2 Core/4G Memory master02 10.62.158.202 管理节点02 CentOS 7 2 Core/4G Memory master03 10.62.158.203 管理节点03 CentOS

    2024年04月22日
    浏览(40)
  • 【云原生】搭建k8s高可用集群—更新于2023.04

    假设现在有3个node节点和3个master节点,node1到底是连到master1还是连到master2还是master3,需要有人来分配,这个中间人就是load balancer,load balancer起到两个作用,一是负载。二是检查master状态,如果master1异常,就会使node连到master2上,如果master1正常,则正常提供服务。由于节点

    2023年04月16日
    浏览(39)
  • Kubeadm方式搭建K8s高可用集群【1.23.0版本】

    官方文档: 二进制下载地址 环境规划: pod网段:10.244.0.0/16 service网段:10.10.0.0/16 注意: pod和service网段不可冲突,如果冲突会导致K8S集群安装失败。 主机名 IP地址 操作系统 备注 master-1 16.32.15.200 CentOS7.8 安装keepalived、nginx实现高可用 master-2 16.32.15.201 CentOS7.8 安装keepalived、

    2023年04月22日
    浏览(55)
  • 搭建单机版K8S运行Flink集群

    环境要求 操作系统: CentOS 7.x 64位 Kubernetes版本:v1.16.2 Docker版本:19.03.13-ce Flink版本:1.14.3 使用中国YUM及镜像源  1.安装Kubernetes: 1.1 创建文件:/etc/yum.repos.d/kubernetes.repo,内容如下: 1.2  执行安装命令:  1.3 启动kubelet服务并设置开机自启: 2.安装Docker: 2.1 创建文件:

    2023年04月26日
    浏览(47)
  • k8s 搭建基于session模式的flink集群

    不废话直接上代码,都是基于官网的,在此记录一下 Kubernetes | Apache Flink flink-configuration-configmap.yaml jobmanager-service.yaml  Optional service, which is only necessary for non-HA mode. Session cluster resource definitions # jobmanager-session-deployment-non-ha.yaml taskmanager-session-deployment.yaml  kubectl apply -f xxx.ya

    2024年02月10日
    浏览(36)
  • Flink K8S Operator 离线安装

    2.1 添加helm仓库 2.2 安装 chart 如果报如下错误: 则需要添加 --set webhook.create=false 参数

    2024年03月16日
    浏览(37)
  • 使用kubeadm搭建高可用的K8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更

    2024年02月08日
    浏览(48)
  • 使用rancher rke2配置高可用k8s集群

    RKE2 结合了 RKE1.x 版本(以下简称 RKE1)和 K3s 的优点和特性。 从 K3s 中,它继承了可用性、易操作性和部署模式。 从 RKE1 来看,它继承了与上游 Kubernetes 的紧密一致性。在一些地方,K3s 与上游的 Kubernetes 有分歧,以便为边缘部署进行优化,但 RKE1 和 RKE2 可以与上游保持密切一

    2023年04月26日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包