目录
文章目录
概述
目标是使用Kubernetes作为flink的资源管理器,抛弃较重的YARN集群模式,可以很好的与现有的其他应用进行资源共用。
预下载资源文件
flink编译版本,解压可用
系统相关镜像1
系统相关镜像2
系统相关镜像3
Linux 集群描述
尽可能模拟生产使用了总计4台虚拟机做安装
没有给集器配置Host,因为使用Rancher启动K8s的时候,Node节点解析不到Host,应该是我没有找到对应配置,小伙伴可以自行测试
集器IP | 备注 |
---|---|
20.20.0.185 | Rancher-Master |
20.20.0.186 | K8s-Master |
20.20.0.187 | K8s-Node1 |
20.20.0.188 | K8s-Node2 |
版本
所有操作指令都仅只依赖于如下版本,如果需要更新版本进行迭代,可以查看官进行操作
Rancher-Docker-Kubernetes 版本相互依赖 更换版本 请查看官网
- docker-ce-18.09.0
- rancher-2.5.5
- K8S
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.2", GitCommit:"52c56ce7a8272c798dbc29846288d7cd9fbae032", GitTreeState:"clean", BuildDate:"2020-04-16T11:56:40Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
- K8S
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.7", GitCommit:"1dd5338295409edcfff11505e7bb246f0d325d15", GitTreeState:"clean", BuildDate:"2021-01-13T13:15:20Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
- Flink-1.11
- Scala-2.11
部署K8S环境
为了方便制作进出环境,这里使用Rancher的方式部署K8S,尽快进行测试
配置Yum
阿里官方镜像站 点击对应 操作系统 安装配置Yum
安装相关yum依赖和工具
yum install -y wget telnet net-tools lrzsz vim zip unzip yum-utils device-mapper-persistent-data lvm2
阿里官方镜像站 搜索Docker-ce 配置Docker Yum源
安装docker
查看Docker版本
yum list docker-ce --nogpgcheck --showduplicates | sort -r
安装对应版本Docker
yum install docker-ce-18.09.0
启动服务
systemctl start docker
开机启动
systemctl enable docker
配置国内镜像加速
vim /etc/docker/deamon.json
增加
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
加载配置-重启
systemctl deamon-reload && systemctl restart docker
安装Rancher
Rancher文档
方便安装,使用Docker启动Rancher
可以将相关DockerImage先Load到本地这样可以提高安装速度后续增加我这版本需要的各种镜像资源
Docker启动Rancher
docker run -d --privileged --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher:latest
这样就可以在 20.20.0.185上查看到Rancher页面了
在初始化配置Rancher的时候 <SERVER_IP> 这里填写自己的Racher的主机IP 我这里使用的是20.20.0.185
安装K8s 工作集群
为了增加安装效率,建议将镜像优先装到Docker里
更详细的安装教程,请看Racher的文档
这里直接在主界面点击添加集群,添加自定义集群,按照所需要的配置安装即可
我这里选用的网络是Flannel、外部负载Ingress,主机命令增加Etcd、Control Plane,复制SSH指令,粘贴到K8s-Master上执行
坐等Master启动后,点击升级,复制SSH终端指令,不带Etcd和Control Plane,复制SSH指令,粘贴到K8s-Node1、K8s-Node2上执行等待增加完成
至此,集群安装完成
添加KubeCtl命令上下文
添加上下文,Racher文档也有想写解释,如果英文不错,直接看,中文版,翻译的还是挺绕口的
点击新建的集群,点击Kubeconfig文件,放到有用Kubectl的集器上,记得版本要对应上,然后就可以连接集群了
这里需要注意的是,由于集群连接时通过Rancher的Master进行代理的,所以上下文中存在两个集群地址
使用Kubectl config指令进行切换默认连接集群,这个文件对于发布flink任务是有关的,所以这里需要注意
运行FlinkDemo
Flink官方文档
从1.11版本才算比较正常的支持K8s,后续应该会支持的更好
查看关于Session模式,部署与运维->集群与部署->Native Kubernetes
仔细查看要求,里面有关于K8s相关权限的要求,懂K8s权限的可以自己看,我这边直接给出指令
下面代码 ==<>==包含的需要自己定义,都是名称随便写,不过要记住
FlinkSession关于K8s的基础环境
创建命名空间
kubectl create namespace <name-space>
创建ServiceAccount
kubectl create serviceaccount <service-account-name> -n <name-space>
添加权限
kubectl create clusterrolebinding <role-name> --clusterrole=edit --serviceaccount=<name-space>:<service-account-name>
编译Flink/下载启动指令集-启动
这里可以自己选择编译对应版本的Flink源码,会比较慢
也可以通过我这边提供的资源下载直接丢进去就能用,已经编译好了
启动Session
./kubernetes-session.sh -Dkubernetes.namespace=<name-space> -Dkubernetes.jobmanager.service-account=<service-account-name> -Dkubernetes.cluster-id=<cluster-id> -Dtaskmanager.memory.process.size=2048m -Dkubernetes.taskmanager.cpu=1 -Dtaskmanager.numberOfTaskSlots=2 -Dresourcemanager.taskmanager-timeout=3600000
这里可以再补充一个参数
-Dkubernetes.rest-service.exposed.type=[ClusterIp/NodePort/LoadBalancer]
这三个参数可以自行查找一下对应的意思,默认LoadBalancer
咱们测试使用NodePort
增加好这个参数,启动就会直接发给你一个地址,就可以访问监控界面了
这里有可能返回的地址是你得RancherMaster地址,这需要你切换一下KubeConfig的上下文,默认集群
启动Demo
./flink run -d -e kubernetes-session -Dkubernetes.namespace=<name-space> -Dkubernetes.cluster-id=<cluster-id> <jar-path>
启动结束,通过Web界面,就可以看到对应自启动的TaskManager了
还有一些具体的参数,比如停止任务,对应的TaskManager会自动清理等,官方文档里面慢慢翻,东西太多
至此,再K8s上运行FlinkSession已经完成