参考:

先介绍下k8s中,三种常见的控制器类型:

  • Deployment(部署,最常用)
  • StatefulSet(有状态集合)
  • DaemonSet(守护进程集合)

Kubernetes中的Deployment、StatefulSet和DaemonSet有以下区别:

1、应用场景:

  • Deployment 适用于无状态的应用场景,如:Web/API服务等。也就是说,即使一个Pod运行失败,也不需要从这个Pod中恢复数据。一般来说,开发一个有状态的应用程序需要更多的工作,因此无状态的应用程序更为常见。另外,可以指定pod副本的运行数量,并处理pod的增删改以达到yml文件的预期配置。
  • StatefulSet 适用于有状态的应用场景,如:需要持久化存储的应用程序:数据库、消息队列等。每个Pod都有明确且不变的唯一标识,以便在pod重启或迁移时保持状态稳定性。
  • DaemonSet 适用于运行系统级别的守护进程,如:系统监控、日志采集等任务。在每个节点都需要运行一个Pod副本的场景。

2、副本控制和调度:

  • Deployment 的副本支持动态扩缩容,副本管理(调度和回滚),滚动升级等。
  • StatefulSet 支持Pod的有序部署和扩展。但不能动态地增加或减少Pod副本(需要使用 kubectl eidt statefulset xxxkubectl apply -f xxx.yml 来手动修改 .spec.replicas 字段的值,进而修改其pod副本数)。
  • DaemonSet 会确保集群中的每个节点都有一个Pod副本运行,且这个Pod不会离开该节点。当集群中有节点加入或删除时,相应的Pod副本也会加入或删除。

3、存储:

  • Deployment 不需要特别的存储支持,因为是无状态的。
  • StatefulSet 需要为每个Pod提供独立的存储,这可以通过后端存储完成。
  • DaemonSet 的每个Pod需要挂载到特定的存储。

总的来说,根据应用场景和需求,可以选择合适的k8s控制器来部署和管理应用程序。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐