Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区-51CTO.COM

Kubernetes 部署 Nebula 图数据库集群

ywz888
发布于 2022-10-11 11:56
浏览
0收藏

本文主要讲述 Nebula Graph 中的 K8s 实践以及如何使用 K8s 部署 Nebula Graph。


01 Kubernetes 是什么 


Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应用部署、规划、更新、维护的一套机制。

Kubernetes 在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以部署、维护和扩展应用程序的机制,组成 Kubernetes 的组件设计理念为松耦合可扩展,这样可以使之满足多种不同的工作负载。可扩展性在很大程度上由 Kubernetes API 提供,此 API 主要被作为扩展在内部组件以及 Kubernetes 上运行的容器中使用。

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

Kubernetes 主要由以下几个核心组件组成:

  • etcd 保存了整个集群的状态;
  • kube-apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
  • kube-controller-manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • kube-scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
  • kubelet 负责维护容器的生命周期,同时也负责 Volume 和网络的管理;
  • kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡。




02 Kubernetes 和数据库 



数据库容器化是近年的一大热点,Kubernetes 到底能为数据库带来什么好处呢?

  • 故障恢复:Kubernetes 提供故障恢复的功能,数据库应用如果宕掉,Kubernetes 可以将其自动重启,或者将数据库实例迁移到集群中其他节点上。
  • 存储管理:Kubernetes 提供了丰富的存储接入方案,数据库应用能透明地使用不同类型的存储系统。
  • 负载均衡:Kubernetes Service 提供负载均衡功能,能将外部访问均衡到不同的数据库实例副本上。
  • 水平拓展:Kubernetes 可以根据当前数据库集群的资源利用率情况,缩放副本数目,从而提升资源的利用率。

目前很多数据库,如:MySQL,MongoDB 和 TiDB 在 Kubernetes 集群中都能良好地运行。




03 Nebula Graph 的 K8s 实践



Nebula Graph 是一个开源的分布式图数据库,主要组件有:Query Engine 的 graphd,数据存储的 storaged,和元数据的 meted。在 Kubernetes 实践过程中,它主要给图数据库 Nebula Graph 带来了以下的好处:

  • Kubernetes 能均衡 nebula graphd,metad 和 storaged 不同副本之间的负载。graphd,metad 和 storaged 可以通过 Kubernetes 的域名服务自动发现彼此。
  • 通过 StorageClass,PVC 和 PV 可以屏蔽底层存储细节,无论使用本地卷还是云盘,Kubernetes 均可以透明对接。
  • 通过 Kubernetes 可以在数秒内成功部署一套 Nebula 集群,Kubernetes 也可以无感知地实现 Nebula 集群的升级。
  • Nebula 集群通过 Kubernetes 可以做到自我恢复,单体副本 crash,Kubernetes 可以重新将其拉起,无需运维人员介入。
  • Kubernetes 可以根据当前 Nebula 集群的资源利用率情况弹性伸缩集群规模,从而提升集群的性能。

下面来讲解下具体的实践内容。

3.1 集群部署

硬件和软件要求

这里主要罗列下本文部署涉及到的机器、操作系统参数:

  • 操作系统使用的 CentOS-7.6.1810 x86_64
  • 虚拟机配置
  • 4 核 CPU

  • 8G 内存

  • 50G 系统盘

  • 50G 数据盘 A

  • 50G 数据盘 B
  • Kubernetes 集群版本 v1.14+
  • Nebula 版本为 v2.0.0-rc1
  • 使用本地 PV 作为数据存储
  • CoreDNS 版本 1.6.0+

K8s 集群规划

以下为集群清单

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

K8s 待部署组件

  • 安装 Helm3
  • 准备本地磁盘,并安装本地卷插件
  • 安装 nebula 集群

3.2 安装 Helm3

Helm 是 Kubernetes 集群上的包管理工具,使用 Helm 可以极大地降低使用 Kubernetes 部署应用的门槛。本文不做 Helm 详细介绍,有兴趣的小伙伴可自行阅读《Helm 入门指南》。

下载安装 Helm

使用下面命令在终端执行即可安装 Helm

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

查看 Helm 版本

执行 helm version 命令即可查看对应的 Helm 版本,以本文为例,以下为输出结果:

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区


3.3 设置本地磁盘

在每台机器上做如下配置:

创建 mount 目录

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

格式化数据盘

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

挂载数据盘

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区


3.4 部署本地卷插件

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

修改 v2.4.0/helm/provisioner/values.yaml 中 classes 部分:将 hostDir: /mnt/fast-disks 改成 hostDir: /mnt/disks # storageClass: true 改成 storageClass: true 。然后执行:

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区


3.5 部署 nebula 集群

下载 nebula helm chart

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

设置 Kubernetes node节点

下面是 Kubernetes 节点列表,我们需要设置 node 节点的调度标签。可以将 192.168.0.2192.168.0.3192.168.0.4 打上 nebula: "cloud" 的标签。

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

具体操作如下:

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

调整 values 默认值

nebula helm chart 目录如下:

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

可以根据运行环境需求修改 charts/nebula/values.yaml 里面的默认值。

通过 helm 安装 nebula

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

访问 nebula 集群

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区



04 FAQ



4.1 如何搭建一套 Kubernetes 集群?

搭建高可用的 Kubernetes 可以参考社区文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/ 

4.2 如何调整 nebula 集群的部署参数?

在使用 helm install 时,使用 --set 可以设置部署参数,从而覆盖掉 helm chart 中 values.yaml 中的变量。参考文档:https://helm.sh/docs/intro/using_helm/

4.3 能否兼容 nebula v1.0.0+ 集群部署?

v1.0.0+ 不支持内部域名解析,需要修改 charts/nebula/values.yaml,配置如下:

Kubernetes 部署 Nebula 图数据库集群-鸿蒙开发者社区

4.4 如何在 K8s 集群外部访问 nebula 内部组件?

本文使用 NodePort 的方式访问 graphd 组件,其他的访问方式还有 hostPort、hostNetwork、Ingress、LoadBalancer,需要您根据实际的部署环境来定制。

4.5 如何查看 nebula 集群状况?

使用 kubectl get pods --namespace=default -l app.kubernetes.io=nebula 命令,或者直接在 Kubernetes dashboard 上查看 nebula 集群的运行状况。

4.6 如何使用其他类型的存储?

参考文档:https://kubernetes.io/zh/docs/concepts/storage/storage-classes/ 


文章转载自公众号:Nebula Graph Community


分类
标签
已于2022-10-11 11:56:33修改
收藏
回复
举报
回复
    相关推荐