首页 > 其他分享 >在K8S中,Deployment和Statefulset有何区别?

在K8S中,Deployment和Statefulset有何区别?

时间:2024-08-06 15:38:36浏览次数:13  
标签:StatefulSet 持久 有何 更新 Statefulset 应用 Deployment Pod K8S

在Kubernetes中,DeploymentStatefulSet 都是用来管理应用的资源对象,但是它们的设计目的和服务场景有所不同。下面详细解释这两种资源的区别:

1. Deployment
  • 用途:

    • Deployment 主要用于管理无状态应用,即那些不需要持久化数据或者不需要唯一网络标识符的应用。
    • 它提供了一种简单的方式来部署和更新应用,支持滚动更新和回滚。
  • 特点:

    • 每个 Pod 都是可替换的,具有相同的配置和环境。
    • Pod 的命名是随机生成的,没有固定的顺序或标识。
    • Deployment 通过 ReplicaSet 来管理 Pod 的副本数。
    • 支持滚动更新策略,允许逐个替换 Pod,以保持服务的可用性。
    • 不提供持久化的网络标识符或持久化存储。
  • 用例:

    • Web 应用服务器。
    • 微服务。
    • 任何不需要持久化数据或特定网络标识的应用。
2. StatefulSet
  • 用途:

    • StatefulSet 用于管理有状态应用,即那些需要持久化数据或具有唯一网络标识符的应用。
    • 它提供了持久化存储和稳定的网络标识符,适用于需要保持数据完整性和服务身份的应用。
  • 特点:

    • Pod 具有唯一的、持久的网络标识符(如 DNS 名称)。
    • Pod 的命名是基于索引的,具有固定的顺序和标识。
    • StatefulSet 通过 Headless Service 来提供稳定的网络标识符。
    • 支持持久化存储,通常与 PersistentVolumeClaim 结合使用。
    • 支持有序的创建和删除 Pod,这在需要特定顺序执行初始化脚本或清理操作的情况下非常有用。
    • 通常不支持滚动更新,因为需要考虑数据的一致性和服务的连续性。
  • 用例:

    • 数据库集群(如 MySQL、Cassandra)。
    • 分布式缓存系统(如 Redis 集群)。
    • 任何需要持久化数据或特定网络标识的应用。
3. 关键区别总结
  1. 状态性:

    • Deployment: 适用于无状态应用。
    • StatefulSet: 适用于有状态应用。
  2. 网络标识:

    • Deployment: Pod 没有稳定的网络标识。
    • StatefulSet: Pod 具有稳定的网络标识,如 DNS 名称。
  3. 更新策略:

    • Deployment: 支持滚动更新,逐个替换 Pod。
    • StatefulSet: 不直接支持滚动更新,通常需要手动管理更新过程。
  4. 存储:

    • Deployment: 不提供持久化存储。
    • StatefulSet: 支持持久化存储,通常与 PersistentVolumeClaim 结合使用。
  5. Pod 命名:

    • Deployment: Pod 的命名是随机的。
    • StatefulSet: Pod 的命名是基于索引的,具有固定的顺序。
  6. Pod 管理:

    • Deployment: 通过 ReplicaSet 管理 Pod。
    • StatefulSet: 通过 StatefulSet 直接管理 Pod。
  7. 服务发现:

    • Deployment: Pod 通常通过 Service 发现。
    • StatefulSet: Pod 通过 Headless Service 发现,并且具有稳定的 DNS 名称。
  8. 更新操作:

    • Deployment: 支持自动回滚和暂停/恢复更新。
    • StatefulSet: 更新通常需要更谨慎的操作,可能需要手动干预。

综上所述,你可以根据你的应用需求选择合适的资源对象进行管理。对于无状态应用,使用 Deployment 可以提供简便的部署和更新流程;而对于有状态应用,使用 StatefulSet 可以确保数据的安全性和服务的连续性。

标签:StatefulSet,持久,有何,更新,Statefulset,应用,Deployment,Pod,K8S
From: https://www.cnblogs.com/huangjiabobk/p/18345286

相关文章

  • K8s和docker的关系
    k8s(kubernetes)是一个容器编排器,没容器的话也没编排。所以他是一个容器编排的系统,主要围绕pods进行工作。pods是k8s生态中最小的调度单位,可以包容一个或者多个容器。k8s是一个docker容器的管理工具核心功能:自愈:重启启动失败的容器,在节点不可用时,替换节点上的容器,对用户定义的不......
  • kubeadm安装k8s
    目录1.环境准备2.所有节点安装docker3.所有节点安装kubeadm4.Nginx负载均衡部署5.部署K8S集群6.所有节点部署网络插件flannel1.环境准备(1)在所有节点上安装Docker和kubeadm(2)部署KubernetesMaster(3)部署容器网络插件(4)部署KubernetesNode,将节点加入Kubernetes集群中(5)部署Das......
  • k8s RBAC权限控制
    前言在之前的文章中介绍了k8s如何生成一个完整的kubeconfig文件,单纯的生成kubeconfig文件,不对user或group进行权限绑定是无法访问k8s集群的,今天就介绍一下k8s中RBAC鉴权相关的内容RBAC介绍基于角色的权限控制,在k8s为了实现这种机制,RBACAPI声明了四种Kubernetes对象:R......
  • kubekey是一个k8s轻量工具
    Skiptocontent NavigationMenukubesphere/kubekey    CodeIssues302Pullrequests20DiscussionsActionsProjectsWikiSecurity        masterBreadcrumbskubekey/README_zh-CN.md ......
  • k8s-Pod滚动重启方法
    在Kubernetes中,有多种方法可以进行滚动重启Pod。以下是几种常用的方法:一、通过修改Pod的YAML部署文件进行滚动更新通过修改Pod的YAML部署文件并应用这些更改,可以触发Pod的滚动更新。具体步骤如下:修改Pod的YAML文件,使其内容发生变化(例如更新镜像版本或环境变......
  • 19. rs、deploy和Jenkins集成K8S实现CICD实战
    1.rs控制器1.作用可以实现Pod的副本控制。相比rc资源,其功能性更强且更加轻量级。2.案例1-rs实现类似rc的功能[root@master231rs]#cat01-rs-xiuxian-matchLabels.yamlapiVersion:apps/v1kind:ReplicaSetmetadata:name:rs-xiuxianspec:#指定Pod的副本数量r......
  • 【K8s】专题八:Kubernetes 服务调度详解
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录一、基本介绍二、工作原理三、节点绑定四、亲和性调度1、亲和性类型2、亲和性规则3、NodeAffinity4、PodAffinity五、反亲和性调度1、反......
  • k8s
    K8sPod:自主式Pod:死亡后没有控制器将其拉起控制器管理的Pod:死亡后控制器能够将其拉起Pod内容器:当一个Pod创建后,会立即在Pod内创建一个pause容器,该Pod内其他容器公用该容器的网络协议栈;因此,一个Pod中两个容器的端口不能相同,一个容器访问另一个容器的端口,直接用l......
  • Java面试题:请问接口与抽象类有何区别?
    引言在OOD(面向对象设计)中,经常会用到抽象类或接口。而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互替换。事实上,虽然他们有很多相似点,但也有很大差异。面试官通常会问你他们到底有哪些差异,以考察你的面向对象功力够不够。下面我就从三个层面谈......
  • kubeasz 制作k8s 集群离线安装包
    转载:kubeasz制作k8s集群离线安装包kubeasz制作k8s集群离线安装包大家好,欢迎来到运维有术本文介绍了,利用ezdown制作kubeasz离线部署k8s集群所需的离线安装包。使用kubeasz离线安装k8s集群需要下载四个部分:kubeasz项目代码二进制文件(k8s、etcd、container......