Kubernetes 部署 Nebula 图数据库集群

TeamD
发布于 2022-10-14 16:10
浏览
0收藏

摘要

数据库容器化是最近的一大热点,Kubernetes 能给数据库带来故障恢复、存储管理、负载均衡、水平拓展等好处。而它在图数据库 Nebula Graph 中可以发挥什么作用呢?

Kubernetes 是什么

 

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

 

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

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

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

 

●  etcd  保存了整个集群的状态

●  apiserver  提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制

●  controller manager  负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

●  scheduler  负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上

●  kubelet  负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理

●  Container runtime  负责镜像管理以及 Pod 和容器的真正运行(CRI)

●  kube-proxy  负责为 Service 提供 cluster 内部的服务发现和负载均衡

除了核心组件,还有一些推荐的 Add-ons:

 

●  kube-dns 负责为整个集群提供 DNS 服务

●  Ingress Controller  为服务提供外网入口

●  Heapster  提供资源监控

●  Dashboard  提供 GUI

●  Federation  提供跨可用区的集群

●  Fluentd-elasticsearch  提供集群日志采集、存储与查询

Kubernetes 和数据库

 

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

 

●  故障恢复: Kubernetes 提供故障恢复的功能,数据库应用如果宕掉,Kubernetes 可以将其自动重启,甚至将数据库实例迁移到集群中其他节点上

●  存储管理: Kubernetes 提供了丰富的存储接入方案,数据库应用能透明地使用不同类型的存储系统

●  负载均衡: Kubernetes Service 提供负载均衡功能,能将外部访问平摊给不同的数据库实例副本上

●  水平拓展: Kubernetes 可以根据当前数据库集群的资源利用率情况,缩放副本数目,从而提升资源的利用率

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

Kubernetes 在 Nebula Graph 的实践

 

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 集群的资源利用率情况水平伸缩 Nebula 集群,从而提升资源的利用率。

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

 

集群部署 

机器规划

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

 

操作系统使用的 CentOS-7.6.1810 x86_64

 

●  虚拟机配置

●  4 CPU

●  8G 内存

●  50G 系统盘

●  50G 数据盘A

●  50G 数据盘B

●  Kubernetes 集群版本 v1.16

●  Nebula 版本为 v1.0.0-rc3

●  使用本地 PV 作为数据存储

kubernetes 集群规划

 

以下为集群清单

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

kubernetes 集群规划

 

●  安装 Helm

●  准备本地磁盘,并安装本地卷插件

●  安装 nebula 集群

●  安装 ingress-controller

 

安装 Helm

Helm 是 Kubernetes 集群上的包管理工具,类似 CentOS 上的 yum,Ubuntu 上的 apt-get。使用 Helm 可以极大地降低使用 Kubernetes 部署应用的门槛。

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

上图为 Helm 的工作原理,描述了 Helm 的 4 个关键组件 Helm(客户端)、Tiller(服务器)、Repository(Chart 软件仓库)、Chart(软件包)之间的关系。由于本篇文章不做 Helm 详细介绍,有兴趣的小伙伴可自行阅读《Helm 入门指南》

 

下载 Helm

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

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

查看 Helm 版本

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

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

设置本地磁盘

在每台机器上做如下配置

 

创建 mount 目录

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

格式化数据盘

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

挂载数据盘

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

设部署本地卷插件

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

修改 v2.3.3/helm/provisioner/values.yaml

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

将 hostDir: /mnt/fast-disks 改成 hostDir: /mnt/disks 将# storageClass: true 改成 storageClass: true

然后执行:

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

部署 nebula 集群

下载 nebula helm-chart 包

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

设置 Kubernetes slave 节点

 

下面是 Kubernetes 节点列表,我们需要设置 slave 节点的调度标签。可以将 192.168.0.2,192.168.0.3,192.168.0.4 打上 nebula: "yes" 的标签。

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

具体操作如下:

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

调整 nebula helm chart 默认的 values 值

 

nebula helm-chart 包目录如下:

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

我们需要调整 master/kubernetes/values.yaml  里面的 MetadHosts 的值,将这个 IP List 替换本环境的 3 个 k8s worker 的 ip。

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

通过 helm 安装 nebula

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

部署 Ingress-controller

Ingress-controller 是 Kubernetes 的一个 Add-Ons。Kubernetes 通过 ingress-controller 将 Kubernetes 内部署的服务暴露给外部用户访问。Ingress-controller 还提供负载均衡的功能,可以将外部访问流量平摊给 k8s 中应用的不同的副本。

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

 

选择一个节点部署 Ingress-controller

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

编写 ingress-nginx.yaml 部署文件

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

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

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

访问 nebula 集群

 

查看 ingress-nginx 所在的节点:

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

访问 nebula 集群:

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

 FAQ 

 

如何搭建一套 Kubernetes 集群?

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

 

你也可以通过 minikube 搭建本地的 Kubernetes 集群,参考文档:https://kubernetes.io/docs/setup/learning-environment/minikube/

 

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

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

 

如何查看 nebula 集群状况?

使用kubectl get pod | grep nebula命令,或者直接在 Kubernetes 内置的 dashboard 上查看 nebula 集群副本的运行状况。

 

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

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



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

分类
标签
已于2022-10-14 16:10:17修改
收藏
回复
举报
回复
    相关推荐