【发布时间】:2021-09-18 17:23:50
【问题描述】:
我是 Kubernetes 和 Docker 的新手,我正在研究无状态和有状态的概念,我知道无状态微服务不会在主机上存储数据,而有状态微服务需要在主机上进行某种存储为请求提供服务,但如果由我决定,我将始终使用有状态的,为什么我应该使用无状态的 Pod?无国籍有什么好处?
【问题讨论】:
标签: docker kubernetes stateless stateful
我是 Kubernetes 和 Docker 的新手,我正在研究无状态和有状态的概念,我知道无状态微服务不会在主机上存储数据,而有状态微服务需要在主机上进行某种存储为请求提供服务,但如果由我决定,我将始终使用有状态的,为什么我应该使用无状态的 Pod?无国籍有什么好处?
【问题讨论】:
标签: docker kubernetes stateless stateful
对于典型的 Kubernetes Pod,它将由更高级别的控制器(如 Deployment)管理。您可以将部署设置为具有replicas: 3,以便如果其中一个失败,其他两个可以承担负载。在更新时,现有的 Pod 将被删除并重新创建。如果负载很重,您可以设置一个 HorizontalPodAutoscaler 来增加您的副本数,这将在需要时创建更多 pod。
如果您的容器是无状态的,那么所有这些都非常简单,并且对kubectl delete pod 没有任何后果。
有状态 pod 的问题在于状态。 Kubernetes 给你一些choices on where to store data,但是大部分一次只能在一个 pod 上使用;如果您有多个副本,那么每个副本通常都需要自己的本地存储,并且应用程序需要知道如何协调它的多个副本。 (或者,如果您可以设置 NFS 服务器之类的东西,应用程序需要知道如何处理并发写入。)在操作上,您需要知道如何备份和恢复在整个过程中创建的所有单个小卷。方式。
一种标准方法是尽量减少存储状态的位置数量,并使用来自无状态应用程序的网络 I/O 将内容放置在位置上。状态甚至不需要在集群中:如果您的应用程序在 AWS 中运行,您可以拥有主要将数据存储在 RDS 托管的关系数据库和 Amazon 的 S3 对象存储中的容器,但在本地不保留任何内容,然后您可以使用普通的这些集群外存储的备份和管理方法。
【讨论】: