基于k8s1.15搭建Flink集群(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/RivenDong/article/details/102620898

1. 前言

容器化部署是目前业界非常流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。随着Docker容器编排工具Kubenetes近几年逐渐流行起来,大多数企业也逐渐使用Kubernetes来管理集群容器资源。Flink也在最近的版本中支持了Kubernetes部署模式,让用户能够基于Kubernetes来构建Flink Session Cluster,也可以通过Docker镜像的方式向Kubernetes集群中提交独立的Flink任务。

2. 实验环境

Kubernetes集群:
两台8G的虚拟机,CentOS 7.7版本, 关闭防火墙
对应软件版本:

  • Kubernetes v1.15.0
  • calico 3.8.2
  • nginx-ingress 1.5.5
  • Docker 18.09.7

3. 集群搭建

3.1 Yaml 配置

在Kubernetes上构建Flink Session Cluster,需要将Flink集群中的组件对应的Docker镜像分别在k8s集群中启动,其中包括JobManager、TaskManager、JobManagerServices三个镜像服务,其中每个镜像服务都可以从中央镜像仓库中获取,用户也可以构建本地的镜像仓库,针对每个组件所相应的Kubernetes的yaml配置如下:

3.1.1 JobManager Yaml 配置

主要提供运行JobManager组件镜像的参数配置,包括JobManager自身的参数,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: flink-jobmanager
spec:
    replicas: 1
    template:
        metadata:
            labels:
                app: flink
                component: jobmanager
        spec:
            containers:
            - name: jobmanager
              image: flink:1.9
              args:
              - jobmanager
              ports:
              - containerPort: 6123
                name: rpc
              - containerPort: 6124
                name: blob
              - containerPort: 6125
                name: query
              - containerPort: 8081
                name: ui
              env:
              - name: JOB_MANAGER_RPC_ADDRESS
                value: flink-jobmanager

3.1.2 TaskManager Yaml 配置

主要提供运行TaskManager组件的参数配置,以及TaskManager自身的参数,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
    name: flink-taskmanager
spec:
    replicas: 2
    template:
        metadata:
            labels:
                app: flink
                component: taskmanager
        spec:
            containers:
            - name: taskmanager
              image: flink:1.9
              args:
              - taskmanager
              ports:
              - containerPort: 6121
                name: data
              - containerPort: 6122
                name: rpc
              - containerPort: 6125
                name: query
              env:
              - name: JOB_MANAGER_RPC_ADDRESS
                value: flink-jobmanager

3.1.3 JobManagerServices 配置

主要为Flink Session 集群提供对外的RestApi和UI地址,使得用户可以通过Flink UI 的方式访问集群并获取任务和监控信息,配置文件如下:

apiVersion: v1
kind: Service
metadata:
    name: flink-jobmanager
spec:
    type: NodePort
    ports:
    - name: rpc
      port: 6123 
    - name: blob
      port: 6124
    - name: query
      port: 6125
    - name: ui
      port: 8081
      nodePort: 30001
    selector:
        app: flink
        component: jobmanager

3.2 启动Flink Session Cluster

当各个组件服务配置文件定义完毕后,就可以通过使用以下Kubectl命令,创建Flink Session Cluster,集群启动完成后就可以通过JobManagerServices中配置的WebUI端口访问 Flink Web 页面。


kubectl create -f jobmanager-service.yaml

kubectl create -f jobmanager-deployment.yaml

kubectl create -f taskmanager-deployment.yaml

使用如下命令,查看pod:

kubectl get pods -o wide

在这里插入图片描述说明已经pod已经启动完毕,查看Flink容器:
在这里插入图片描述然后访问Flink 的 Web UI 界面:
在这里插入图片描述
说明启动成功,并且可以添加Job在上面运行:
在这里插入图片描述

3.3 停止Flink Session Cluster

kubectl delete-f jobmanager-service.yaml

kubectl delete -f jobmanager-deployment.yaml

kubectl delete -f taskmanager-deployment.yaml

4. 坑

  1. 一定要指定flink镜像的版本,否则默认的latest可能不是你需要的版本
  2. JOB_MANAGER_RPC_ADDRESS 的 value 要与 JobManagerServices的metadata.name 保持一致。

猜你喜欢

转载自blog.csdn.net/RivenDong/article/details/102620898