基于Kubernetes
前言
为了让用户更好地适应Cloud Native使用场景,能够在私有云、公有云场景中实现数据集成需求。TIS提供了基于Kubernetes的一键部署方案。
本文介绍基于基于Kubernetes的TIS部署方案
为了提供一个标准化的Kubernetes容器环境,使用了阿里云ACK产品进行演示。
用户如使用自行部署的Kubernetes容器,只需进行少量Kubernetes Yaml配置修改即可。
在演示过程中,会将TIS分成多个组件作为Kubernetes的ReplicaSet
或Deployments
资源,确保了应用在分布式环境中高可用、自动伸缩、资源隔离。具体来说在Kubernetes环境中分成了以下组件:
- TIS 控制台,提供基于 Web UI界面的 数据管道创建、维护、执行触发、删除等生命周期相关的操作流程
- 基于PowerJob的分布式DAG任务调度组件,用于在分布式环境中执行基于DataX的任务,以应对企业级数仓中快速、高效执行大量T+1数据同步任务的需求
- 提供Flink基于Kubernetes的一键部署方案,实现了 Kubernetes Application 和 Kubernetes Session 两种部署方式。为TIS中定义的数据管道提供高效准实时同步功能。
环境准备
在阿里云ACK 中申请Kubernete容器服务,因为本文目的只作演示,用完即走,所以申请Serverless、按时付费的容器即可。
申请流程第一步: - 勾选为专有网络配置SNAT选项,可让TIS访问公网环境,从而运行期加载插件
- 勾选使用EIP暴露API server选项,这样TIS中可以调用Kubernetes API创建资源
申请流程第二步: - 选中 CoreDNS服务,可以让Kubernetes集群中的组件可以使用域名相互访问
完成后,继续点击下一步完成Kubernetes容器服务创建申请阿里云云盘 ,作为Kubernetes中TIS组件的存储卷,保证每次重启后不丢失之前的操作记录
云盘申请地址 - 确保与Kubernetes在同一个区
如需将PowerJob、TIS元数据管理使用高可用的MySQL数据库,可在阿里云产品页面中申请MySQL版本的RDS。Demo演示期间,会直接在Kubernetes集群中临时启动一个MySQL Pod供使用,可跳过此步。
获得Kurbernete 集群配置Yaml配置文件。
- 使用以下脚本用来启动TIS控制台节点,集群中其他组件,如PowerJob及Flink组件可通过TIS调用Flink API的方式启动(无需使用yaml配置脚本)
Github项目文件路径:https://github.com/datavane/tis/blob/v4.0.0/tis-k8s/tis-console.yaml
- 使用以下脚本用来启动TIS控制台节点,集群中其他组件,如PowerJob及Flink组件可通过TIS调用Flink API的方式启动(无需使用yaml配置脚本)
安装和设置 kubectl 客户端。有关详细信息请参见:https://kubernetes.io/zh-cn/docs/tasks/tools/
部署集群
现在就让我来带领您一步步完成TIS Kubernetes集群部署吧
耐心等待阿里云ACK Kubernetes 集群初始化完成,估计要4分钟左右 | |
| |
执行 kubectl cluster-info确认本地是否已正常连接ACK服务 |
接下来,修改准备阶段已经Checkout到本地的/tis-k8s/tis-console.yaml文件,修改csi-pv存储卷配置,使用云盘静态存储卷详细说明
apiVersion: v1
kind: PersistentVolume
metadata:
name: csi-pv
labels:
alicloud-pvname: disk-pv
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: diskplugin.csi.alibabacloud.com
# 修改成本地申请的参数
volumeHandle: "d-bp15txxxxxxxx"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.diskplugin.csi.alibabacloud.com/zone
operator: In
values:
# 修改成本地申请的参数
- "cn-hangzhou-k"
利用Kubernetes Yaml创建TIS ReplicaSet资源,执行:kubectl apply -f ./tis-console.yaml
kubectl apply -f ./tis-console.yaml
service/tis-console-loadbalancer created
service/tis-console-cluster-svc created
persistentvolume/csi-pv created
persistentvolumeclaim/disk-pvc created
configmap/tis-config created
replicationcontroller/tis-console created
查看 tis-console-loadbalancer
服务暴露的IP服务地址
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 58m
tis-console-cluster-svc ClusterIP 192.168.55.151 <none> 8080/TCP,56432/TCP 95s
tis-console-loadbalancer LoadBalancer 192.168.200.225 47.96.149.229 8080:31583/TCP 95s
发现tis-console-loadbalancer
通过loadBalance方式向公网暴露的IP地址为47.96.149.229
。
这样通过在浏览器中输入:http://47.96.149.229:8080 就能打开TIS了
|
接下来就能在TIS中配置数据管道了
继续部署
当管道配置完成之后,需要执行批量数据同步、增量实时数据同步,可以继续利用TIS的功能模块在K8S集群中创建对应的执行组件:
- 分布式批量数据同步, 部署PowerJob组件
- 分布式实时数据同步,