kubernetes 在生产中,如何定义Pod的架构?[已关闭]

9jyewag0  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(90)

已关闭此问题为not about programming or software development。它目前不接受回答。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
19天前关闭。
Improve this question
如果我有2层应用程序。Web层和数据库层。那么我们如何构建pod架构呢?
1.通过在一个Pod中创建Web和数据库的2个容器,并复制它来加载。或
1.创建Web和数据库的命名空间。在一个pod中创建一个web容器,并在web命名空间中复制它,并为其分配服务。在一个pod中也有一个数据库容器,并在数据库命名空间中复制它,并为它分配服务。数据库服务通过Web层访问。我们只将Web服务暴露给外部世界。
如果还有其他方法,请分享。
感谢您发送编修。
我想为Web应用程序创建豆荚的最佳方法。

mw3dktmi

mw3dktmi1#

您几乎总是应该通过为应用程序创建Deployment和为数据库创建StatefulSet来实现这一点。两者都需要配套服务。
如果您考虑数据库组件,它具有持久存储。根据您正在使用的数据库,您可能无法运行多个副本(PostgreSQL,MySQL),或者您可能需要执行特殊工作以使多个副本一起工作。如果将应用程序和数据库捆绑到一个Pod中,那么在不创建新数据库的情况下就无法扩展应用程序,然后每个副本都有一个不同的数据库,因此会出现数据一致性问题。单独的Pod还意味着您可以升级应用程序,而无需重新启动数据库。
在大多数情况下,你不应该创建裸Pod。您现在的无状态应用程序应该由Deployment管理,它支持多个(相同)副本和零停机升级。您的数据库应该在StatefulSet中,它管理每个副本的存储(每个副本都有自己的PersistentVolumeClaim),并具有不同的升级规则以避免共享存储。
我还将提出使用集群外数据库的可能性。数据库对磁盘大小和速度以及其他组件可能没有的备份有特殊要求,并且运行不在Kubernetes中的外部数据库可能是有意义的。
您可以选择是使用一个名称空间还是多个名称空间。在我所工作的产品中,我们发现在生产环境中为每个应用程序组件提供一个单独的名称空间是最易于管理的,但是在面向开发人员的设置中部署到单个名称空间中是最容易管理的。这主要影响一些Kubernetes内部关系可以使用的内容(服务只指向自己命名空间中的Pod)和DNS名称,但不会真正影响您的主应用程序流。

相关问题