文章目录
- 架构图
- 安装cert-manager依赖
- helm 安装operator
- 运行集群实例
- k8s上的两种模式:Native和Standalone
- 两种CR
- Demo1:Application 单任务
- Demo2:Session 多任务
- 创建ingress
- 总结
架构图
参考:部署验证demo
安装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 安装operator
# 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
运行集群实例
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
Session使用与Application 集群类似的规范,唯一的区别是 job 未定义。
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
Demo2:Session 多任务
多个job,每个sessionjob代表一个job,有提交jar包的功能。
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,创建一个ingress指向svc-rest即可进行访问。
总结
- 拉取国外镜像比较困难,可以使用https://dockerproxy.com/
- 搭建多租户PaaS平台,可以使用Session方式,新任务可以通过CR进行管理,也可以由页面添加jar包。
- 本文内容来源于Flink官网,进行翻译、简化、整理,供大家参考~