【技术解析 | 实践】部署Kubernetes模式的Havenask集群

间隙填充
正睿科技  发布时间:2024-06-24 13:34:16  浏览数:364
关于正睿.png    

部署Kubernetes模式Havenask集群

它主要分为四个步骤:首先准备 k8s 的环境,然后创建对应集群,然后创建表,最后在这个表中进行 SQL 语句的读写。

1719205820853064022.png

大家可以先参考 Havenask 官网或Github中的文档进行了解。
(hape工具参考: https://havenask.net/#/doc/sql/petool/intro)
(kubernetes部署参考: https://havenask.net/#/doc/v1-2-0/sql/petool/startcluster/k8smode)


准备环境

  1. 准备一个k8s集群,确保能够访问最新的havenask镜像。建议k8s集群至少包括10台集群4core cpu & 15G mem的机器

  2. 找一台联通k8s集群的主控机用于后续运行hape命令。获取k8s集群的kubeconfig(可以从k8s集群的主节点机器的~/.kube/config中获取,或者从云服务厂商处直接获取), 拷贝到主控机的~/.kube/config上,使得这台机器可以使用kubectl访问k8s的接口

  3. 创建并进入hape容器

wget https://github.com/alibaba/havenask/releases/download/v1.2.0/create_container.sh
./create_container.sh <container_name> <image>
/<container_name>/sshme

K8S集群需要有主控机,能够访问K8S 群的接口,一般来说需要去拷贝集群的kubeconfig到对应路径,集群也可以从主控机上访问,然后要在主控机上去下载链接,去创建 HAPE 容器。


创建集群

hdfs配置

  • 由于k8s模式的havenask集群需要在集群内部不同机器之间共享配置、索引等数据,因此需要搭建hdfs文件系统,用户要确保k8s集群池中的所有节点都能访问该hdfs地址

  • 接下来在havenask集群中k8s配置/ha3_install/hape_conf/k8s的global.conf中修改以下变量:
    global.conf文件的dataStoreRoot:havenask的所有元数据和索引文件都会放在这个hdfs路径上面,需要确保存在且能被k8s集群中的机器访问
    c2K8sNamespace(可选):表示集群admin和c2(介绍见c2调度器)所在的k8s命名空间,默认为havenask-master
    k8sNamespace(可选):表示集群worker所在的k8s命名空间,默认为havenask-worker

  • hdfs遇到问题可以进一步参考多机模式下hdfs配置不成功

因为 havenask 集群中很多的文件都是通过 hdfs 共享的,所以要确保k8s 集群的池子当中所有节点都能够访问这个地址,需要把 hdfs 地址配置到 hdfs 的配置中,准备好了所有的配置,接下来可以用这个命令来验证一下集群是不是配置都比较正常。

hape validate -c /ha3_install/hape_conf/k8s

K8S 集群没法在所有物理机上预先准备镜像,所以有些进程创建时由于在拉镜像所以可能比较慢。可以预先用命令来帮助准备环境,把镜像都拉到这些机器上。它主要是拉起了一个k8s 的demonset。如果集群是第一次准备,大概可能要准备 20-30 分钟。可以用kubectl 的命令来看看 daemons 是否已经准备好。


创建havenask集群

hape start havenask -c /ha3_install/hape_conf/k8s

  • 无论集群是否创建成功,都可以执行gs子命令查看集群状态,也可以用kubectl get pods命令查看集群对应的容器。

  • 使用kubectl查看集群容器状态的时候,需要注意的是k8s模式下havenask集群的admin默认创建在havenask-master命名空间,worker默认创建在havenask-worker命名空间。其中havenask-master命名空间中可以看到一个c2和c2-proxy的无状态服务,介绍见c2调度器

kubectl get pods -n havenask-master
kubectl get pods -n havenask-worker

这些容器可以分为两个部分,一个是 master 的一些节点,就是集群当中的admin。另一个 worker 节点,是被 admin 拉起来的一些工作节点。
它们分别在两个命名空间里面。可以用kubectl 看到它们的一些容器的情况,可以看到很多节点都被拉起。然后创建表,可以执行下面命令去创建一个2分片的直写表。


创建表

  • havenask表分为直写表和全量表两种,可以选择其中一种进行创建,或两种都创建

  • 创建直写表
    -t表示表名字
    -p表示分片数。多机模式下,假设有N张表,其中最大分片为M,那么所有表的分片要求必须要么是1,要么是M
    -s表示schema路径

hape create table -t in0 -p 2 -s /ha3_install/example/cases/normal/in0_schema.json -c /ha3_install/hape_conf/k8

可以执行下面命令去创建一个2分片的直写表。


读取数据

在完成建表后,可以使用以下命令查看集群状态,判断集群是否已经准备好可以读写。状态含义见Hape集群状态

### 当返回的结果中,sqlClusterInfo的clusterStatus为READY时集群已经准备好
hape gs havenask -c /ha3_install/hape_conf/k8s


Kubernetes模式相关问题排查

在kubernetes 模式下,排查问题基本上与之前的多机模式跟单机模式相似。它唯一与普通的模式不同的地方在于它可能有些问题需要借助 kubectl 工具去排查。

例如之前登录容器可能利用sshme 方法去登,然后看一些日志和问题排查,但是现在可能要用 kubectl 工具去登录容器。先重新建起来,看到集群的容器可能有问题,可以用 kubectl 这个命令去进去工作节点。
1719207117832042548.png


以上工作节点可能有问题,也有可能是 admin 节点有问题。也可以进入 admin 节点去看工作状态。         

 相关问题排查链接


结尾

具体Havenask的Kubernetes模式视频可以通过链接查看,欢迎各位开发者使用。

视频链接


问题没解决? 我们帮您!

如果您在本文中未能找到解决当前问题的办法,不用担心——正睿专业技术支持团队随时待命

服务项目.png

获取更多帮助

文章来源:阿里云开发者社区 作者:xijie.xu