k8s 中的 deployment,statefulset,daemonset 控制器的区别
k8s 中的 deployment,statefulset,daemonset 控制器的区别
·
参考:
- k8s 说一下deployment,statefulset,daemonset 的区别 原创
- Deployment、StatefulSet、DaemonSet的区别
- Deployment和Statefulset区别
- StatefulSet 和 Deployment 区别及选择方式
先介绍下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 xxx
或kubectl apply -f xxx.yml
来手动修改.spec.replicas
字段的值,进而修改其pod副本数)。 - DaemonSet 会确保集群中的每个节点都有一个Pod副本运行,且这个Pod不会离开该节点。当集群中有节点加入或删除时,相应的Pod副本也会加入或删除。
3、存储:
- Deployment 不需要特别的存储支持,因为是无状态的。
- StatefulSet 需要为每个Pod提供独立的存储,这可以通过后端存储完成。
- DaemonSet 的每个Pod需要挂载到特定的存储。
总的来说,根据应用场景和需求,可以选择合适的k8s控制器来部署和管理应用程序。
更多推荐
已为社区贡献1条内容
所有评论(0)