在分布式系统开发过程中,本地调试集群中的数据库是一个常见需求。Sealos 作为一款以 Kubernetes 为内核的云操作系统,提供了在云环境中部署和管理高可用数据库的能力。默认情况下,Sealos 仅允许用户在云环境内部访问数据库资源,不支持从本地或者集群外部进行访问。对于需要直接从他们的开发环境中管理和调试数据库的开发者来说,这可能会造成很大的不便。
为了解决这一问题,本教程将会提供一种方案,让开发者能够在本地环境中调试和管理 Sealos 集群内的数据库。
获取 kubeconfig 文件
kubeconfig
文件是一个配置文件,用于管理对 Kubernetes 集群的访问。这个文件为 kubectl 命令行工具以及其他 Kubernetes 客户端库提供了必要的信息,是连接和管理 Kubernetes 集群的钥匙。而 Sealos 的内核是 Kubernetes,所以我们可以使用这个文件来连接和管理 Sealos 集群。
可以通过以下步骤来获取 Sealos 集群的 kubeconfig:
- 浏览器进入 Sealos 桌面:https://cloud.sealos.top
- 点击右上角的用户头像。
- 在下拉菜单中点击 kubeconfig 右边的复制按钮。
安装 OpenLens
OpenLens 是一款开源的 Kubernetes 集群管理工具,它提供了一个集成开发环境 (IDE) 来控制 Kubernetes 集群。使用 OpenLens 我们就可以通过图形化界面来连接 Sealos 集群了,项目地址:
OpenLens 支持 macOS、Windows 和 Linux,具体安装方法可以参考项目仓库的 README👆。本文以 macOS 为例,安装方法如下:
$ brew install --cask openlens
安装完成后,打开 OpenLens,进入 Catalog 的 Clusters 选项,然后将鼠标悬停在右下角的 “+” 上:
点击 “+” 上方的 “Add from kubeconfig” 按钮:
然后将之前复制的 kubeconfig 内容粘贴到输入框,并点击 “Add cluster”:
点击 “Add to Hotbar” 图标,这个集群就会被固定到左边的侧栏:
点击左侧的集群入口,然后点击 Workloads 中的 Pods,便可以看到自己在 Sealos 云上部署的所有容器。
点击 Network 中的 Services,便可以看到所有的 Service,也就是各个应用的集群内网负载均衡入口。
开启端口转发
以 MongoDB 为例,我们来演示如何在本地调试 Sealos 中的数据库。
首先,在 OpenLens 的 Services 界面点击 MongoDB 数据库的 Service,在右边打开的窗口中点击 “Forward”:
在弹出的窗口中填入自己本地想要监听的端口,并取消 “Open in Browser”,然后点击 “Start”:
这样就会将 Sealos 中 MongoDB 数据库的 27017 端口转发到本地的 27017 端口,我们就可以通过本地的 27017 端口来访问 Sealos 中的 MongoDB 数据库了。
本地调试 Sealos 中的数据库
浏览器进入 Sealos 桌面,打开数据库 App,进入 MongoDB 数据库的详情页面,点击 connection 下方的连接地址,便会将地址复制到剪切板中:
图中的连接地址为:
mongodb://root:pb2ggdpm@fastgpt-qxfpfpob-mongo-mongodb.ns-sbjre322.svc:27017
我们需要将其修改为:
mongodb://root:pb2ggdpm@127.0.0.1:27017/?directConnection=true
我们将远程的服务地址替换为了本地的地址和端口,并添加了 directConnection=true
参数以允许直接连接 (因为本地地址属于代理地址)。
我们使用 MongoDB 本地客户端访问这个连接地址 (mongodb://root:pb2ggdpm@127.0.0.1:27017/?directConnection=true
),就可以调试 Sealos 中的数据库了。
以 MongoDB Compass 客户端为例,macOS 可以通过以下命令安装:
$ brew install mongodb-compass
打开 MongoDB Compass,输入本地连接地址,然后点击 Connect:
连接成功:
通过上述步骤,你现在可以在本地环境中调试 Sealos 集群中的数据库了,你也可以通过此方案将本地数据库的数据迁移到 Sealos 的数据库中。
如果您更喜欢使用命令行来操作,可以直接使用 kubectl 来转发端口,参考命令如下:
$ kubectl port-forward svc/{service-name} {local-port}:{remote-port}
- {service-name} 是您希望在本地访问的远程服务的名称。
- {local-port} 是您希望将远程服务转发到的本地计算机端口。
- {remote-port} 是远程服务正在监听的端口。
- 执行该命令后,您需要保持命令窗口开启,以便维持端口转发过程。
要了解更多关于 kubectl 的端口转发的详细信息,您可以访问 Kubernetes 官方文档,地址如下: