Skip to content

Latest commit

 

History

History
191 lines (164 loc) · 7.95 KB

File metadata and controls

191 lines (164 loc) · 7.95 KB
title linktitle date type weight sidebar_position
基于Kubernetes
kubernetes
2021-03-30
book
9
4

import Link from '/src/components/Link'; import Figure from '/src/components/Figure'; import BZhan from '/src/components/BZhan';

export const MetaVer = () => { return <span style={{'color':'blue'}}>{metadata.version} }

export const GithubK8SYamlUrl = () => { let fileUrl = 'https://github.com/datavane/tis/blob/v' + metadata.version + '/tis-k8s/tis-console.yaml' ; return

  • 使用以下脚本用来启动TIS控制台节点,集群中其他组件,如PowerJob及Flink组件可通过TIS调用Flink API的方式启动(无需使用yaml配置脚本)
    Github项目文件路径:{fileUrl}

}

前言

为了让用户更好地适应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集群中创建对应的执行组件:

  • 分布式批量数据同步, <Link href={require("../powerjob/index.mdx")} >部署PowerJob组件
  • 分布式实时数据同步, <Link href={require("../flink-cluster/native.mdx")} >部署基于Kubernetes的Flink