搭建之前了解一下 腾讯云实时计算平台
    通过开发的web平台 创建任务.在生成flink 集群.再通过提交作业生成具体的task
    腾讯云是选用下图的native application方案.也是flink官方推荐的方案

    image.png

    初步要做成腾讯云这样的简单平台 先简单看一下腾讯实时计算是怎么做的

    这一步是开通资源的概述页面.展示的是k8s集群的信息.
    image.png

    这是集群页面
    image.png
    集群详情.看样子是在k8s master安装了flink
    image.png
    jar管理 就是用的S3协议的对象存储 做了版本控制
    image.png

    最重要的作业处理

    image.png
    新建作业
    image.png

    作业详情
    image.png

    实际上就是用的flink的能力
    image.png

    下面是我自己设计平台的流程图

    搭建flink on k8s 集群 native Application模式 - 图10

    flink 跟k8s 交互原理
    后面补图

    根据官网的部署模式大概清楚流程
    image.png
    环境准备
    入门部分假设正在运行的Kubernetes 集群满足以下要求:

    • Kubernetes >= 1.9。
    • KubeConfig,它可以访问列表、创建、删除 pod 和服务,可通过~/.kube/config. 您可以通过运行来验证权限kubectl auth can-i pods。
    • 启用 Kubernetes DNS。
    • default具有RBAC权限的服务帐户来创建、删除 Pod。

    创建命名空间 和用户权限

    1. 创建kubernets命名空间
    2. kubectl create namespace flink-application-cluster
    3. 1
    4. ⑤,创建该空间的用户 flink (自定义)
    5. kubectl create serviceaccount flink -n flink-application-cluster
    6. 1
    7. ⑥,给该用户赋权
    8. (不创建用户和赋权启动时候会报 "权限"错)
    9. kubectl create clusterrolebinding flink-role-binding-flink \
    10. --clusterrole=edit \
    11. --serviceaccount=flink-application-cluster:flink

    ①,将自己的项目jar包 和 flink镜像 打在一起生成新的镜像

    1. FROM flink
    2. RUN mkdir -p $FLINK_HOME/usrlib
    3. COPY /path/of/my-flink-job.jar $FLINK_HOME/usrlib/my-flink-job.jar

    ②,构建镜像

    docker build -t wordcount:1.0(你的镜像自定义名字) ./

    ③,如果有本地仓库的push到本地仓库 harbor

    docker tag wordcount:1.0 192.168.xx.xx:30002/gtcom/wordcount:1.0
    docker push 192.168.xx.xx:30002/gtcom/wordcount:1.0

    在创建并发布 Docker 镜像后custom-image-name,您可以使用k8s 主节点安装的flink 目录用 以下命令启动应用程序集群:

    1. ./bin/flink run-application \
    2. --target kubernetes-application \
    3. -Dkubernetes.cluster-id=my-first-application-cluster \
    4. -Dkubernetes.container.image=custom-image-name \
    5. local:///opt/flink/usrlib/my-flink-job.jar

    local 可以使用hdfs 或者oss对象地址

    该kubernetes.cluster-id选项指定集群名称并且必须是唯一的。如果不指定此选项,则 Flink 将生成一个随机名称。
    该kubernetes.container.image选项指定用于启动 pod 的图像。
    部署应用程序集群后,您可以与之交互:
    2.查看运行的任务列表 4 取消运行的任务

    1. # List running job on the cluster
    2. $ ./bin/flink list --target kubernetes-application -Dkubernetes.cluster-id=my-first-application-cluster
    3. # Cancel running job
    4. $ ./bin/flink cancel --target kubernetes-application -Dkubernetes.cluster-id=my-first-application-cluster <jobId>


    参考资料
    官网
    https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/resource-providers/native_kubernetes/

    csdn相关资料
    https://blog.csdn.net/weixin_36058946/article/details/116592026

    在 k8s Application 模式下,指定运行 jar 包时,只能使用 “local” schema。此处的 local 指的是 kubernetes.container.image 指定的 docker 镜像,不是 flink 客户端。所以只能运行镜像中的 jar 包。那如何运行用户自定义的 jar 包呢?参考一下资料
    部署踩坑相关
    https://blog.csdn.net/qq_24036471/article/details/122453390