我是 docker/contaners 等的新手。我在端口 8080 上的金属机器上运行着一个节点服务器。我让 NginX 作为它的反向代理运行。
应用程序为每个连接的客户端建立一个 Web 套接字,以方便实时聊天。目前,Websocket 映射处于进程内,这意味着我无法扩展到多个进程(是的,我知道,这很差劲);但是,我需要更新架构,以便允许用户与其他用户通信,即使他们连接到不同进程上的 Websocket。
数据库是Mongo。
问题是:如果我将它移植到 Kubernetes,它会是什么样子?它会取代什么,又会如何取代?我还会使用 NginX 吗?或者 Kubernetes 会提供一种充当反向代理的方法吗?如果我这样做,是否意味着我将能够部署我的应用程序任何地方,看看它能不能工作?应用容器会包含整个 CentOs/Node/etc 堆栈吗?
答案1
Kubernetes 可让您拥有一组金属机器,并将其视为一个集群。在集群中的机器之上,它将使用名为 Pod 和 ReplicaSet 的 kubernetes 对象来处理自动缩放数量的无状态节点 websocket 服务器的调度。
有一个名为 Ingress 的 kubernetes 对象,在大多数情况下它是底层的 nginx,并且可以替换您现有的 nginx。
您也可以在 kubernetes 中运行 mongo。Mongo 希望将数据存储在本地磁盘上。在 kubernetes 中执行此操作更复杂,但可行。
要处理 websocket 状态图,您可以在 kubernetes 中运行 redis,尽管 kubernetes 再次要求其运行的应用程序是无状态的,并且可以移动到集群中的任何节点。或者,它要求应用程序拥有自己的集群模型,并具有领导者选举和持久数据同步功能。
如果您完成了所有架构工作并准备好了所有 kubernetes 配置,那么您可以在任何人的 kubernetes 集群上部署整个应用程序系统。
一个名为 Helm 的工具https://helm.sh/致力于将 kubernetes 对象配置收集到包中,从而实现这种便利。
每个应用容器中通常都包含一个操作系统、特定于运行时的库,然后是应用程序本身。许多人使用具有最小操作系统的容器谱系,而不是完整发行版,例如带有大量用户空间命令行工具,因为人们通常不会通过 ssh 或 shell 进入容器。