Skip to main content
Version: 4.0.0-rc1

基于Kubernetes

前言

为了让用户更好地适应Cloud Native使用场景,能够在私有云、公有云场景中实现数据集成需求。TIS提供了基于Kubernetes的一键部署方案。

本文介绍基于基于Kubernetes的TIS部署方案

tip

为了提供一个标准化的Kubernetes容器环境,使用了阿里云ACK产品进行演示。

用户如使用自行部署的Kubernetes容器,只需进行少量Kubernetes Yaml配置修改即可。

在演示过程中,会将TIS分成多个组件作为Kubernetes的ReplicaSetDeployments 资源,确保了应用在分布式环境中高可用自动伸缩资源隔离。具体来说在Kubernetes环境中分成了以下组件:

  1. TIS 控制台,提供基于 Web UI界面的 数据管道创建、维护、执行触发、删除等生命周期相关的操作流程
  2. 基于PowerJob的分布式DAG任务调度组件,用于在分布式环境中执行基于DataX的任务,以应对企业级数仓中快速、高效执行大量T+1数据同步任务的需求
  3. 提供Flink基于Kubernetes的一键部署方案,实现了 Kubernetes ApplicationKubernetes Session 两种部署方式。为TIS中定义的数据管道提供高效准实时同步功能。

环境准备

  1. 阿里云ACK 中申请Kubernete容器服务,因为本文目的只作演示,用完即走,所以申请Serverless、按时付费的容器即可。

    申请流程第一步:
    1. 勾选为专有网络配置SNAT选项,可让TIS访问公网环境,从而运行期加载插件
    2. 勾选使用EIP暴露API server选项,这样TIS中可以调用Kubernetes API创建资源
    申请流程第二步:
    1. 选中 CoreDNS服务,可以让Kubernetes集群中的组件可以使用域名相互访问

    完成后,继续点击下一步完成Kubernetes容器服务创建
  2. 申请阿里云云盘 ,作为Kubernetes中TIS组件的存储卷,保证每次重启后不丢失之前的操作记录

    云盘申请地址
    1. 确保与Kubernetes在同一个区
  3. 如需将PowerJob、TIS元数据管理使用高可用的MySQL数据库,可在阿里云产品页面中申请MySQL版本的RDS。Demo演示期间,会直接在Kubernetes集群中临时启动一个MySQL Pod供使用,可跳过此步。

  4. 获得Kurbernete 集群配置Yaml配置文件。

  5. 安装和设置 kubectl 客户端。有关详细信息请参见:https://kubernetes.io/zh-cn/docs/tasks/tools/

部署集群

现在就让我来带领您一步步完成TIS Kubernetes集群部署吧

耐心等待阿里云ACK Kubernetes 集群初始化完成,估计要4分钟左右
  1. 拷贝ACK kubernetes公网访问凭证
  2. 写入到本地凭证保存文件中 vi ~/.kube/aliyun
  3. 设置环境变量 KUBECONFIG,执行: export KUBECONFIG=~/.kube/aliyun
执行 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了

  1. 由于ReplicaSettis-console对应Pod中设置了data目录卷,而初始的data目录是一个空目录,TIS启动之后需要执行初始化过。
  2. 点击开始初始化按钮,触发初始化流程,稍等片刻就可完成,重新刷新页面便可进入TIS。

接下来就能在TIS中配置数据管道了

继续部署

当管道配置完成之后,需要执行批量数据同步、增量实时数据同步,可以继续利用TIS的功能模块在K8S集群中创建对应的执行组件: