AIOps 一场颠覆传统运维的盛筵
1087
2023-03-26
Flink on k8s 讲解与实战操作
一、概述
其针对数据流的分布式计算提供了数据分布,数据通信及容错机制等功能。
Flink 官网:
不同版本的文档:
flink on k8s 官方文档:
GitHub 地址:
二、Flink 运行模式
官方文档:
Flink on yarn 有三种运行模式:
yarn-session 模式(Seesion Mode) yarn-cluster 模式(Per-Job Mode) Application 模式(Application Mode)
【温馨提示】Per-Job 模式(已弃用),Per-job 模式仅由 YARN 支持,并已在 Flink 1.15 中弃用。它将被丢弃在 FLINK-26000 中。
三、Flink on k8s 实战操作
1)flink 下载
下载地址:
2)构建基础镜像
3)session 模式
Flink Session 集群作为长时间运行的 Kubernetes Deployment 执行。你可以在一个 Session 集群上运行多个 Flink 作业。每个作业都需要在集群部署完成后提交到集群。
Kubernetes 中的 Flink Session 集群部署至少包含三个组件:
运行JobManager的部署 TaskManagers池的部署 暴露JobManager 的 REST 和 UI 端口的服务
1、Native Kubernetes 模式
参数配置:
【1】构建镜像 Dockerfile
开始构建镜像
【2】创建命名空间和 serviceaccount
# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account
【3】创建 flink 集群
【4】提交任务
./bin/flink run \--target kubernetes-session \-Dkubernetes.cluster-id=my-first-flink-cluster \-Dkubernetes.namespace=flink \-Dkubernetes.jobmanager.service-account=flink-service-account \./examples/streaming/TopSpeedWindowing.jar # 参数配置./examples/streaming/WordCount.jar-Dkubernetes.taskmanager.cpu=2000m \-Dexternal-resource.limits.kubernetes.cpu=4000m \-Dexternal-resource.limits.kubernetes.memory=10Gi \-Dexternal-resource.requests.kubernetes.cpu=2000m \-Dexternal-resource.requests.kubernetes.memory=8Gi \-Dkubernetes.taskmanager.cpu=2000m \
【温馨提示】注意 jdk 版本,目前 jdk8 是正常的。
【5】查看
kubectl get pods -n flinkkubectl logs -f my-first-flink-cluster-taskmanager-1-1
【6】删除 flink 集群
kubectl delete deployment/my-first-flink-cluster -n flinkkubectl delete ns flink --force
2、Standalone 模式
【1】构建镜像
默认用户是 flink 用户,这里我换成 admin,根据企业需要更换用户,脚本可以通过上面运行的 pod 拿到。
启动脚本 docker-entrypoint.sh
编排 Dockerfile
开始构建镜像
【2】创建命名空间和 serviceaccount
# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account
【3】编排 yaml 文件
flink-configuration-configmap.yaml
jobmanager-service.yaml可选服务,仅非 HA 模式需要。
jobmanager-rest-service.yaml 可选服务,将 jobmanager rest端口公开为公共 Kubernetes 节点的端口。
taskmanager-query-state-service.yaml 可选服务,公开 TaskManager 端口以访问可查询状态作为公共 Kubernetes 节点的端口。
以上几个配置文件是公共的
jobmanager-session-deployment-non-ha.yaml
taskmanager-session-deployment.yaml
【4】创建 flink 集群
kubectl create ns flink# Configuration and service definitionkubectl create -f flink-configuration-configmap.yaml -n flink# servicekubectl create -f jobmanager-service.yaml -n flinkkubectl create -f jobmanager-rest-service.yaml -n flinkkubectl create -f taskmanager-query-state-service.yaml -n flink# Create the deployments for the clusterkubectl create -f jobmanager-session-deployment-non-ha.yaml -n flinkkubectl create -f taskmanager-session-deployment.yaml -n flink
镜像逆向解析 dockerfile
alias whaler="docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler"whaler flink:1.14.6-scala_2.12
查看
kubectl get pods,svc -n flink -owide
Web UI 地址:
【5】提交任务
./bin/flink run -m local-168-182-110:30081 ./examples/streaming/WordCount.jar
kubectl logs flink-taskmanager-54649bf96c-zjtkh -n flink
【6】删除 flink 集群
kubectl delete -f jobmanager-service.yaml -n flinkkubectl delete -f flink-configuration-configmap.yaml -n flinkkubectl delete -f taskmanager-session-deployment.yaml -n flinkkubectl delete -f jobmanager-session-deployment.yaml -n flinkkubectl delete ns flink --force
【7】访问 flink web
端口就是jobmanager-rest-service.yaml文件中的 NodePort
4)application 模式(推荐)
Kubernetes 中一个基本的 Flink Application 集群部署包含三个组件:
运行JobManager的应用程序 TaskManagers池的部署 暴露JobManager 的 REST 和 UI 端口的服务
1、Native Kubernetes 模式(常用)
【1】构建镜像 Dockerfile
开始构建镜像
【2】创建命名空间和 serviceacount
# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account
【3】创建 flink 集群并提交任务
【注意】 local是应用模式中唯一支持的方案。local 代表本地环境,这里即 pod 或者容器环境,并非宿主机。
查看
kubectl get pods pods,svc -n flink
kubectl logs -f my-first-application-cluster-taskmanager-1-1 -n flink
【4】删除 flink 集群
kubectl delete deployment/my-first-application-cluster -n flinkkubectl delete ns flink --force
2、Standalone 模式
【1】构建镜像 Dockerfile
启动脚本 docker-entrypoint.sh
编排Dockerfile
【2】创建命名空间和 serviceacount
# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account
【3】编排 yaml 文件
flink-configuration-configmap.yaml
jobmanager-service.yaml可选服务,仅非 HA 模式需要。
jobmanager-rest-service.yaml 可选服务,将 jobmanager rest端口公开为公共 Kubernetes 节点的端口。
xxxxxxxxxx
1
apiVersion: v1
2
kind: Service
3
metadata:
4
name: flink-jobmanager-rest
5
spec:
6
type: NodePort
7
ports:
8
- name: rest
9
port: 8081
10
targetPort: 8081
11
nodePort: 30081
12
selector:
13
app: flink
15171921232527
taskmanager-query-state-service.yaml 可选服务,公开 TaskManager 端口以访问可查询状态作为公共 Kubernetes 节点的端口。
jobmanager-application-non-ha.yaml ,非高可用
【温馨提示】注意这里的挂载/mnt/bigdata/flink/usrlib,最好这里使用共享目录。
taskmanager-job-deployment.yaml
【4】创建 flink 集群并提交任务
kubectl create ns flink# Configuration and service definitionkubectl create -f flink-configuration-configmap.yaml -n flink# servicekubectl create -f jobmanager-service.yaml -n flinkkubectl create -f jobmanager-rest-service.yaml -n flinkkubectl create -f taskmanager-query-state-service.yaml -n flink# Create the deployments for the clusterkubectl create -f jobmanager-application-non-ha.yaml -n flinkkubectl create -f taskmanager-job-deployment.yaml -n flink
查看
kubectl get pods,svc -n flink
【5】删除 flink 集群
kubectl delete -f flink-configuration-configmap.yaml -n flinkkubectl delete -f jobmanager-service.yaml -n flinkkubectl delete -f jobmanager-rest-service.yaml -n flinkkubectl delete -f taskmanager-query-state-service.yaml -n flinkkubectl delete -f jobmanager-application-non-ha.yaml -n flinkkubectl delete -f taskmanager-job-deployment.yaml -n flinkkubectl delete ns flink --force
【6】查看
kubectl get pods,svc -n flinkkubectl exec -it flink-taskmanager-54cb7fc57c-g484q -n flink -- bash
发表评论
暂时没有评论,来抢沙发吧~