一、部署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)
1、准备环境
准备环境
- 找一台联通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 容器。
2、创建集群
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分片的直写表。
3、创建表
- 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/k8s
可以执行下面命令去创建一个2分片的直写表。
4、读取数据
- 在完成建表后,可以使用以下命令查看集群状态,判断集群是否已经准备好可以读写。状态含义见Hape集群状态
### 当返回的结果中,sqlClusterInfo的clusterStatus为READY时集群已经准备好 hape gs havenask -c /ha3_install/hape_conf/k8s
二、Kubernetes模式相关问题排查
- 在kubernetes 模式下,排查问题基本上与之前的多机模式跟单机模式相似。它唯一与普通的模式不同的地方在于它可能有些问题需要借助 kubectl 工具去排查。
- 例如之前登录容器可能利用sshme 方法去登,然后看一些日志和问题排查,但是现在可能要用 kubectl 工具去登录容器。先重新建起来,看到集群的容器可能有问题,可以用 kubectl 这个命令去进去工作节点。
以上工作节点可能有问题,也有可能是 admin 节点有问题。也可以进入 admin 节点去看工作状态。
三、结尾
具体Havenask的Kubernetes模式视频可以通过链接查看,欢迎各位开发者使用。
关注我们:
Havenask 开源官网:https://havenask.net/
Havenask-Github 开源项目地址:https://github.com/alibaba/havenask
阿里云 OpenSearch 官网:https://www.aliyun.com/product/opensearch
钉钉扫码加入 Havenask 开源官方技术交流群: