部署Kubernetes模式Havenask集群
它主要分为四个步骤:首先准备 k8s 的环境,然后创建对应集群,然后创建表,最后在这个表中进行 SQL 语句的读写。
大家可以先参考 Havenask 官网或Github中的文档进行了解。
(hape工具参考: https://havenask.net/#/doc/sql/petool/intro)
(kubernetes部署参考: https://havenask.net/#/doc/v1-2-0/sql/petool/startcluster/k8smode)
准备环境
准备一个k8s集群,确保能够访问最新的havenask镜像。建议k8s集群至少包括10台集群4core cpu & 15G mem的机器
找一台联通k8s集群的主控机用于后续运行hape命令。获取k8s集群的kubeconfig(可以从k8s集群的主节点机器的~/.kube/config中获取,或者从云服务厂商处直接获取), 拷贝到主控机的~/.kube/config上,使得这台机器可以使用kubectl访问k8s的接口
创建并进入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 这个命令去进去工作节点。
以上工作节点可能有问题,也有可能是 admin 节点有问题。也可以进入 admin 节点去看工作状态。
结尾
具体Havenask的Kubernetes模式视频可以通过链接查看,欢迎各位开发者使用。
问题没解决? 我们帮您!
如果您在本文中未能找到解决当前问题的办法,不用担心——正睿专业技术支持团队随时待命
文章来源:阿里云开发者社区 作者:xijie.xu