2022-05-19
< view all postsFlink除Standalone模式外,还支持YARN、Docker、k8s等多种配置方式,其中k8s部署又能分为standalone on Kubernetes和Native Kubernetes两种。这篇笔记记录一下standalone on Kubernetes方式的部署流程。
使用`minikube`建立一个单机k8s集群。在这种方案下,k8s的安装主要包括以下三个组件:
选择手动下载RPM package进行安装,即使是在隔离互联网的系统也能够使用这种方式:
首先根据Linux发行版本,可以选择相应的安装文档作参考。
以CentOS为例,可以在此处浏览所有支持的CentOS版本和架构,选择合适的包下载
Docker的完整安装包括四个包,其中三个包是必须的:docker-ce-cli、docker-scan-plugin、decker-ce
另一个包docker-ce-rootless-extras如果不需要rootless(非root安装)的话可以不下载
安装使用如下命令:
sudo yum install /path/to/package.rpm # Start Docker sudo systemctl start docker
测试安装:
sudo docker run hello-world
执行此命令后如果是在有互联网的环境,会联网下载一个hello-world镜像并运行,能够运行就说明安装成功。
可以直接从这里下载binary,之后安装:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl mkdir -p ~/.local/bin/kubectl mv ./kubectl ~/.local/bin/kubectl # and then append (or prepend) ~/.local/bin to $PATH
minikube支持amd64、arm64等指令集,有不同的binary包
例如安装amd64版本,可以使用:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
安装完成后启动:
minikube start
在使用`minikube`部署时首先要运行:
minikube ssh 'sudo ip link set docker0 promisc on'
Standalone部署有两种可选模式:Application Mode、Session Mode,Application Mode模式下部署的集群只用于跑一个特定的应用(即jar包),而Session Mode部署模式则能够运行多任务、接受提交新任务。我们主要使用的应该是Session Mode,下面都以Session Mode为例。
non-HA部署时需要提供四个配置文件,可以参考官网的配置示例。
配置文件编辑完成后,启用四个配置文件:
# Configuration and service definition kubectl create -f flink-configuration-configmap.yaml kubectl create -f jobmanager-service.yaml # Create the deployments for the cluster kubectl create -f jobmanager-session-deployment.yaml kubectl create -f taskmanager-session-deployment.yaml
完成之后可以用 kubectl get deployments 命令来查看部署的情况。
可以用 kubectl get pods 命令来查看 pods 的信息。
因为k8s容器的网络和外部默认是隔离的,使用 kubectl port-forward jobmanager-pod的名称 8081:8081 命令,创建一个端口转发,这样就可以从 http://localhost:8081 访问到flink默认的控制台页面。通过REST API,可以完成任务的提交和控制。
首先删除刚刚创建的non-HA的部署:
kubectl delete deploy flink-jobmanager kubectl delete deploy flink-taskmanager kubectl delete configmap flink-config kubectl delete serivce flink-jobmanager
HA部署需要三个配置文件,可以参考官网编辑相应的内容,之后使用类似的方法应用。
需要注意的是如果开启HA,则k8s的runtime必须连接到对应的HA存储,并且需要pods的service accounts具有创建修改和删除ConfigMaps的权限。参考此处。
Standalone模式不支持由Flink自动发起对task manager数量的调节,但通过k8s,可以方便地对task manager做手动扩缩:
kubectl scale deploy flink-taskmanager --replicas=3
这条命令就将task manager的数量调整为3。再运行 kubectl get pods ,会显示更新的信息。