【发布时间】:2022-01-19 20:34:15
【问题描述】:
嗨!
我的问题与通过 k8s 部署 node.js 应用程序、架构模式以及将它们与 DB 连接有关。
alpha | beta | gamma1 | gamma2
我有以下 node.js 应用程序服务,其中一些可以通过应用程序实例(如 gamma)进行扩展,另一些是独立的,它们都构建在带有 .Dockefile 的单个 docker 映像中并从中运行。
我也有一个非云数据库,比如 elastic 和 mongo 从他们的容器中运行 .env: mongo | elastic
就目前而言,我的docker-compose.yml 就像一个典型的 node.js 示例应用程序,但具有通用卷和桥接网络(除了我有多个 node.js 应用程序):
version: '3'
services:
node:
restart: always
build: .
ports:
- 80:3000
volumes:
- ./:/code
mongo:
image: mongo
ports:
- 27017:27017
volumes:
- mongodb:/data/db
volumes:
mongodb:
networks:
test-network:
driver: bridge
当前部署:
所有这些东西都运行在单个 docker-compose.yml 文件的单个重型 VPS(X CPU 内核、Y RAM、Z SSD,所有内容加载 70%)上。
我想问和实现的目标:
既然一个VPS已经不够用了,我想开始用k8s和rancher。所以问题是关于正确部署:
例如,我在一个专用网络中连接了N VPS,每个 VPS 是一个连接在一个集群中的工作程序,(使用 Rancher,当然,其中一个是主节点)这给了我 X 个内核,Y RAM 和其他共享资源。
-
我是否需要另一个单独的集群(或专用网络中的 VPS 机器,但不属于集群的一部分)并在其上运行 DB?或者我可以在同一个集群中部署数据库?如果集群中的每个 VPS(worker)只有 40GB 卷,而 DB 的增长会超过这个卷呢? Worker 的共享资源是否包括共享卷空间?
-
拥有一个可以启动所有应用程序的映像是否正确,或者在 k8s 的情况下,我应该为每个服务拥有一个单独的 docker 映像吗?因此,如果我在一个单一存储库中有 5 个 node.js 应用程序,我应该有 5 个单独的 docker-image,而不是一个通用的?
我知道我的问题可能有一个复杂的答案,所以我很高兴看到,不仅仅是答案,还有链接或与问题相关的任何内容。如果您知道以及如何询问,则更容易找到或用 Google 搜索。
【问题讨论】:
标签: node.js docker kubernetes deployment