如何在k8s上安装部署NebulaGraph

  • nebula 版本:V2.6.2
  • 部署方式:分布式
  • 安装方式:基于k8s原生安装

问题描述:
我想在k8s上部署NebulaGraph,目前我从官网上了解到可以用以下两种方式在k8s安装部署:

  1. Nebula Operator (https://docs.nebula-graph.com.cn/2.6.2/nebula-operator/3.deploy-nebula-graph-cluster/3.1create-cluster-with-kubectl/)
  2. 基于Helm进行集群部署(https://nebula-graph.com.cn/posts/how-to-deploy-nebula-graph-in-kubernetes/)

我的需求:
我不想依赖Operator和Helm进行部署,而是基于k8s原始的yaml来进行安装部署,不依赖helm和Nebula Operator,请问有相关的文档吗?以及基于k8s部署,如何进行磁盘挂载和映射的文档?

Helm 已经弃用了,现在 Operator 是唯一的方式。

你可以用operator部署一套,然后参考其中创建的所有资源,为了方便做这件事儿,我做了这个项目:https://github.com/wey-gu/nebula-operator-kind 如果你本地有docker 就可以一行拉起来一套环境,然后你 kubectl get all 就能看到所有的资源了。

 kubectl get all
NAME                                   READY   STATUS    RESTARTS   AGE
pod/nebula-graphd-0                    1/1     Running   0          3d6h
pod/nebula-metad-0                     1/1     Running   0          3d6h
pod/nebula-storaged-0                  1/1     Running   0          3d6h
pod/nebula-storaged-1                  1/1     Running   0          3d6h
pod/nebula-storaged-2                  1/1     Running   0          3d6h

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                 AGE
service/kubernetes                   ClusterIP   10.96.0.1       <none>        443/TCP                                 3d6h
service/nebula-graphd-svc            ClusterIP   10.96.128.47    <none>        9669/TCP,19669/TCP,19670/TCP            3d6h
service/nebula-graphd-svc-nodeport   NodePort    10.96.191.111   <none>        9669:30000/TCP,19669:30001/TCP          3d6h
service/nebula-metad-headless        ClusterIP   None            <none>        9559/TCP,19559/TCP,19560/TCP            3d6h
service/nebula-storaged-headless     ClusterIP   None            <none>        9779/TCP,19779/TCP,19780/TCP,9778/TCP   3d6h



NAME                               READY   AGE
statefulset.apps/nebula-graphd     1/1     3d6h
statefulset.apps/nebula-metad      1/1     3d6h
statefulset.apps/nebula-storaged   3/3     3d6h

嗯,我大致明白您的意思。就是说自己基于nebula operator部署一套nebulagraph集群后,再通过k8s命令,自己整理一套yaml安装脚本。是这个意思吧?

我看了您提供的https://github.com/wey-gu/nebula-operator-kind,没有看的特别的明白,个人对k8s掌握的不是特别的熟悉,您这边有原生yaml安装nebulagraph的配置吗?类似于flink官网这样的k8s安装模式:Kubernetes 设置 | Apache Flink

是的,https://github.com/wey-gu/nebula-operator-kind 是一个帮你安装一个在 docker 内置的小 k8s 环境,然后在里边自动部署所有 nebula-operator 的依赖和配置然后再自动部署 nebula operator,然后再部署一个小的 nebula 集群的一键安装工具(甚至包括storage provider)。安装好了,您自己可以获取 pod 的 yaml。

Nebula 是有状态的应用,一般至少用 statefulset 部署,这部分模板在 operator 的仓库里应该也可以获取不过用 operator 来起来再 get 看可能最方便。

我看到雷神老师在 typing 了,等他给你更准确的信息哈~~~~

1 个赞

我们早期有提供helm的部署方式,后来更新到了operator方式,目前安装也非常简洁,helm一条命令就能搞定,如果你使用过程中有不理解的地方或者文档描述不准确,我们可以随时解答

1 个赞

好的,我先按您给的方法尝试,感谢您的解答!

嗯,感谢您的回答!是这样的,operator方式确实大大降低了安装部署的门槛,就像部署hadoop生态用CDH管理一样,但是有些项目部署场景,不能够直接用CDH,而需要用原生部署。所以我才需要扒开operator的yaml,自己拼装。

我想请教一下,operator安装的NebulaGraph集群,其storage存储的数据放在了那里?如果服务重启,或者pod删除后新建,会丢数据吗?能指定宿主机的挂载盘吗?

存储的数据要看你使用哪种storage provisioner,本地存储还是网络存储,服务重启磁盘是不会删除的,这个由配置项控制;指定盘挂载是可以的,但目前是交由operator控制了,底层是storage controller控制,目前不支持指定挂载。

好的,明白了,感谢您的耐心解答!我先消化两位老师的内容,后续有问题再来叨扰!再次感谢!

突然又想到一个思路,开发试玩 k8s 上的 nebula 的话,可以用 kompose 这个项目把 docker-compose 转换为 k8s 资源

很惊喜能在周末得到您的回复,显然您非常热爱自己的工作和产品,非常值得我学习。您目前提供的有两种方式:一、基于已部署operator进行分析和转化,二、基于已部署的docker-compose进行学习和转换。我将在接下来的时间认真分析和研究一下。再次感谢!

哈~ 二只是转换 docker-compose 的 yaml 到 k8s 的资源的 yaml,不需要 docker compose 部署应该。

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。