01 引言
flink-kubernetes-operator是由Java
实现的,它允许用户通过kubectl
等原生k8s
工具管理Flink
应用程序及其生命周期,描述如下:
A Kubernetes operator for Apache Flink, implemented in Java. It allows users to manage Flink applications and their lifecycle through native k8s tooling like kubectl.
简单的说:flink-kubernetes-operator
是在 Kubernetes
集群上运行 Flink
应用的工具。它简化了Flink
应用在 Kubernetes
集群上的部署、扩展和管理。 flink-kubernetes-operator
可以将 Flink 作业定义为 Kubernetes
资源,这样可以更容易地将 Flink
作业作为 Kubernetes
基础架构的一部分管理。Operator
负责创建运行Flink
作业所需的资源,如 pods
、services
和配置,此外,operator
还提供了例如自动扩展、自动恢复和滚动更新的功能。
总的来说,Flink Kubernetes 操作员简化了 Flink 应用的部署和管理,使得在 Kubernetes 集群上运行 Flink 作业更加容易。
Github地址:https://github.com/apache/flink-kubernetes-operator
相关流程:
02 资料
相关资料如下:
- 源码:https://github.com/apache/flink-kubernetes-operator
- 文档地址:https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-main/
- 快速入门:https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-main/docs/try-flink-kubernetes-operator/quick-start/
- 下载地址:https://flink.apache.org/downloads.html
- Operator 镜像:https://hub.docker.com/r/apache/flink-kubernetes-operator/tags
- 视频教程:https://www.youtube.com/watch?v=bedzs9jBUfc&t=2121s
功能概览(可参考详情):
- 部署和监控Flink应用程序、会话和作业部署
- 升级、挂起和删除部署
- 完整的日志记录和指标集成
- 灵活的部署和与
Kubernetes
工具的本地集成
03 实践
根据官网的快速入门教程,下面记录一下操作。
3.1 环境准备
本地电脑需要准备如下的环境:
- docker:https://docs.docker.com/
- kubernetes:https://kubernetes.io/
- helm:https://helm.sh/docs/intro/quickstart/
以上的环境准备主要就是为了kubectl
和 helm
命令能在本地使用。
3.1.1 安装docker和kubernetes
下载Docker Desktop (https://www.docker.com/products/docker-desktop/),安装完成后,在设置里enable kubernetes
即可以安装docker
和kubernetes
环境了。
3.1.2 安装helm
MacOS:
brew install helm
Windows:
choco install kubernetes-helm
Linux:
## 参考安装指南:https://helm.sh/docs/intro/install/
3.2 部署Operator
step1: 安装证书管理器
安装证书管理器(在Kubernetes
集群上安装证书管理器,以便添加webhook
组件)
kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
查看pods
是否运行都正常(红框都为Running表示正常):
kubectl get pods -A
step2: 安装operator
现在可以安装稳定的flink-kubernetes-operator
版本,这里使用的是1.3.1版本(稳定的版本可以查看:https://flink.apache.org/downloads.html):
helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.3.1/ helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator
ok,查看pod
的状态(下图红框为Running
状态,表示部署成功了):
kubectl get pods -A
当然也可以看看helm
的列表:
helm list
3.3 提交作业
Operator启动完成后,可以提交flink作业了,这里使用官方的资源文件basic.yaml,其内容如下:
################################################################################ # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ################################################################################ apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: basic-example spec: image: flink:1.15 flinkVersion: v1_15 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
执行:
kubectl create -f https://raw.githubusercontent.com/apache/flink-kubernetes-operator/release-1.3/examples/basic.yaml
如果报错了(如下图),我们直接在本地新建一个basic.yaml
文件,并把内容复制进去,再次执行:
kubectl create -f basic.yaml
创建成功:
查看pod
,可以看到正在运行:
如果需要打开flink web
监控页面,需要暴露端口,命令如下:
kubectl port-forward svc/basic-example-rest 8081
浏览器输入地址:http://localhost:8081
可以看到Flink
任务正在运行中。
04 文末
本文主要记录了flink-kubernetes-operator的一些笔记,只能说是按照教程一步一步来操作,后续的文章会介绍其原理及详细用法,谢谢大家的阅读,本文完!