在私有网络上讨论 k8s

我试图在 Kubernetes 上为我的组织部署 Discourse,但遇到了一些问题。
当我尝试在 Kubernetes 上部署引导镜像时,它会尝试执行类似 git pull pupsgit pull discourse 的操作,但由于我处于无法访问互联网的私有网络中,这些操作无法完成,导致容器无法启动。是否有办法跳过这些步骤,以便我能成功部署?

你确定你部署的是一个已经引导过的镜像吗?听起来像是你向注册表推送了错误的镜像。

哦,是吗?我正在使用 ./launcher bootstrap app 创建的镜像。

所以你的意思是,最终生成的引导镜像不应该包含任何此类依赖?

是的,不会包含。引导完成后,会有一个 local_discourse/app 镜像。你需要将该镜像推送到注册表并在其他地方使用。

最后一个疑问,看来我推错了镜像,是我的疏忽。那么在推送正确的镜像后,我可以在 Kubernetes 部署时更改环境变量吗?比如 DISCOURSE_DB_HOST 等?因为我有独立的 PostgreSQL 集群和 Redis 集群!

我也犯过同样的错误。别担心,这是非常常见的失误。所以我才问了这个问题 :stuck_out_tongue:

嗯,这有点复杂。

虽然你可以轻松覆盖这些变量,只需在容器运行时添加必要的环境变量即可。但在引导过程中我们会运行数据库迁移。如果你在引导完成后尝试将镜像指向不同的数据库,数据库架构将会完全错误。这样做会让你陷入 unsupported-install(不支持的安装)的境地。

所以我已经有一个正在运行的 Discourse 实例,但它是在裸机上运行的。我想将其迁移到 Kubernetes,并连接到裸机实例所使用的同一个数据库。

或者,如果可能的话,我能否再次运行引导程序,将 DISCOURSE_DB_HOST 和 DISCOURSE_DB_NAME 指向裸机服务器正在使用的同一个数据库?

这应该能行!

在执行此操作时,你可能需要停止当前连接到数据库的 Discourse 容器,因为迁移可能会导致其行为异常。

如果我创建一个全新的空数据库并用它进行引导,那么我能否通过 UI 迁移数据(使用旧 Discourse 实例和新 Discourse 实例的 UI,例如 /admin/backups)?我想避免损坏旧数据库,因为它正被许多用户使用。

您无法从 UX 进行迁移。

请参阅 介绍部署后迁移。这允许您迁移数据库,使其同时适用于旧容器和新容器,然后在部署后执行最终迁移。

好吧,我试了你说的方法(推送了引导镜像),但似乎仍然收到同样的错误。

fatal: unable to access 'https://github.com/discourse/pups.git/': Failed to connect to github.com port 443: Connection timed out

我处于一个私有网络中,因此无法访问 github.com

@pfaffman @Falco 这是预期的行为吗?我是在 Kubernetes 上运行的。

这意味着你又推送了错误的镜像。

我可以修改内部的 /etc/hosts 文件来模拟所需的资源……然后添加所需内容。

更简单的方法是……插入一个带有 4G/SIM 连接的调制解调器/路由器。让网络将该设备识别为内部网络的默认路由器……连接……执行工作……断开连接。

这非常简单。

祝好

Keith John Hutchison - Ceiteach Seán Mac Úistin
Bringing Data to Life Pty. Ltd. (BD2L)

这次我相当确定::sweat_smile: 在运行 ./launcher bootstrap app 时是否有可能出现了错误?

此外,我甚至尝试使用了当前在裸机上运行并托管我们现有 Discourse 网站的 Discourse 镜像,并将其部署到 Kubernetes 上,结果也出现了与上述相同的错误。

即使在我的本地机器上,当我在没有网络的情况下运行

docker run local_discourse/app

时,似乎也会遇到上述错误。