Skip to content

在 Kubenetes 之上快速搭建大数据集群

Notifications You must be signed in to change notification settings

xujiyou-drift/drift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Drift

目标是做一个 Kubernetes 之上的 "CDH"

实际上是一个 Kubernetes Operator

可以通过界面部署和管理大数据组件

支持持久化储存

支持外部访问

支持的组件

  • ZooKeeper 3.6.1
  • Kafka 2.5.0
  • Yarn
  • HDFS
  • HBase
  • Hive
  • Spark
  • Flink

Getting Start

前提是有一个 Kubernetes 集群,并且集群中安装有 Ingress Controller。

第一步,创建命名空间:

kubectl create ns drift

第二步,使用 helm 部署 Drift:

git clone https://github.com/xujiyou-drift/drift-helm-chart.git
cd drift-helm-chart
helm install my-drift ./drift \
 --namespace drift \
 --set ingress.host=drift.test.bbdops.com

等待 Pod 创建完成:

kubectl get pods -n drift --watch

第三步,配置 hosts 或 dns,比如我这里在本机配置 hosts:

10.28.109.30 drift.test.bbdops.com

第四步,等几分钟之后,浏览器打开界面:http://drift.test.bbdops.com ,用户名及密码为 admin/admin

login

第五步,输入各组件所在的命名空间,和要选择的组件,目前仅支持 ZooKeeper 和 Kafka,ZooKeeper 是必须的:

select

第六步,数据储存类和卷大小,如果集群没有配置储存类,也可以选择跳过:

pvc

第七步,配置组件,Kafka 的外部访问地址需要填写,可以填写宿主机主机名,我这里主机名为 drift-1:

config

第八步,点击完成:

complete

等待 Pod 创建完成:

home

或者使用命令观察 Pod 创建过程:

kubectl get pods -n bigdata --watch

由于 Kafka 依赖 ZooKeeper ,所以 Kafka 会自动重启几次。

创建完成如下图所示:

pods

在界面上的效果如下图:

view-pods

内部测试

在 k8s 集群内部测试 ZooKeeper 集群和 Kafka 集群,先来测试 ZooKeeper:

kubectl -n bigdata exec -i  -t zookeeper-cluster-0 -- bash
zkServer.sh status
zkCli.sh

测试Kafka,注意,kafka 在 ZooKeeper 中使用的路径不是默认的 / ,而是 /kafka :

kubectl -n bigdata exec -i  -t kafka-cluster-0 -- bash
kafka-topics.sh --zookeeper zookeeper-cluster-0.zookeeper-cluster-headless-service:2181/kafka --create --topic one --replication-factor 3 --partitions 3

kafka 生产者:

kubectl -n bigdata exec -i  -t kafka-cluster-0 -- bash
kafka-console-producer.sh --bootstrap-server kafka-cluster-0.kafka-cluster-headless-service:9092,kafka-cluster-1.kafka-cluster-headless-service:9092,kafka-cluster-2.kafka-cluster-headless-service:9092 --topic one

kafka 消费者:

kubectl -n bigdata exec -i  -t kafka-cluster-1 -- bash
kafka-console-consumer.sh --bootstrap-server kafka-cluster-0.kafka-cluster-headless-service:9092,kafka-cluster-1.kafka-cluster-headless-service:9092,kafka-cluster-2.kafka-cluster-headless-service:9092 --topic one --from-beginning

在生产者的命令行里随便几条数据,会在消费者的命令行里看到数据打印

外部测试

在集群外部,可以使用 Java 或其他语言的库进行连接,为了方便,可以下载官方的二进制包,使用其中的客户端工具进行测试。

外部测试 ZooKeeper,端口映射:

kubectl port-forward zookeeper-cluster-0 -n bigdata 32181:2181 --address 0.0.0.0

测试 ZooKeeper:

zkCli.sh -server drift-1:32181

在外部连接 Kafka 需要专门设置,在上面已经设置了外部可访问的地址,可以查看 Kafka 对外开放的 service:

kubectl get svc -n bigdata 

这里为每一个 Kafka 的 Pod 都绑定了一个一一对应的 Service。

测试外部连接Kafka:

kafka-console-producer.sh --bootstrap-server drift-1:31090,drift-1:31091,drift-1:31092 --topic one
kafka-console-consumer.sh --bootstrap-server drift-1:31090,drift-1:31091,drift-1:31092 --topic one --from-beginning

kafka

使用的镜像

使用到的镜像都是定制的镜像,不可以使用其他人做的镜像。 构建镜像的代码在:https://github.com/xujiyou-drift/drift-images

前端

前端使用 Vue.JS 构建,代码在:https://github.com/xujiyou-drift/drift-vue

卸载

删除大数据组件:

kubectl delete ZooKeeper zookeeper-cluster -n bigdata
kubectl delete Kafka kafka-cluster -n bigdata

再删除 Drift

helm uninstall my-drift ./drift --namespace drift

Releases

No releases published

Packages

No packages published

Languages