首页 > 其他分享 >k8s 说一下deployment,statefulset,daemonset 的区别

k8s 说一下deployment,statefulset,daemonset 的区别

时间:2023-09-03 21:32:57浏览次数:42  
标签:statefulset Kubernetes deployment 副本 daemonset Deployment Pod 节点 DaemonSet


鱼弦:全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)

k8s 说一下deployment,statefulset,daemonset 的区别_容器

在 Kubernetes(K8s)中,Deployment、StatefulSet和DaemonSet是三种常用的控制器对象,用于管理应用程序的部署和运行。它们在不同的场景下有不同的特点和用途。

  1. Deployment(部署):
    Deployment是Kubernetes中最常用的控制器之一,用于管理无状态的应用程序。它提供了应用程序的副本管理、自动扩展、滚动升级等功能。Deployment通过ReplicaSet实现副本管理,可以确保指定数量的Pod副本正在运行,并处理Pod的创建、删除和更新。Deployment适用于无状态应用程序,如Web服务、API服务等。
  2. StatefulSet(有状态集合):
    StatefulSet用于管理有状态的应用程序,这些应用程序通常需要持久性存储和稳定的网络标识。与Deployment不同,StatefulSet为每个Pod提供唯一的标识符和稳定的网络标识,以便在Pod重新启动或迁移时保持状态的稳定性。它还支持有序部署和扩展,并提供有状态应用程序所需的有序启动和终止策略。StatefulSet适用于数据库、消息队列、存储节点等有状态应用程序。
  3. DaemonSet(守护进程集合):
    DaemonSet用于在Kubernetes集群的每个节点上运行一个Pod副本,确保每个节点上都有一个Pod的副本在运行。与Deployment和StatefulSet不同,DaemonSet不关心副本数量,而是关注集群中的每个节点。当新节点加入集群时,DaemonSet会自动在新节点上创建Pod副本;当节点从集群中删除时,相应的Pod副本也会被删除。DaemonSet适用于运行系统级别的守护进程、日志收集器、监控代理等。

 

Deployment(部署)原理解释:
        Deployment是Kubernetes中用于管理无状态应用程序的控制器对象。它的主要原理是通过定义一个期望的状态(Desired State)来管理Pod的副本数量,并确保实际运行的Pod副本与期望状态保持一致。Deployment使用ReplicaSet来实现副本管理,ReplicaSet则使用Pod模板创建和管理Pod副本。

流程图:

+----------------------+
                                      |                      |
                                      |   Deployment         |
                                      |                      |
                                      +----------+-----------+
                                                 |
                                                 |
                                                 |
                                                 v
                                      +----------+-----------+
                                      |                      |
                                      |   ReplicaSet         |
                                      |                      |
                                      +----------+-----------+
                                                 |
                                                 |
                                                 |
                                                 v
                                      +----------+-----------+
                                      |                      |
                                      |   Pod                |
                                      |                      |
                                      +----------------------+

使用场景:

  • 适用于无状态应用程序,如Web服务、API服务等。
  • 需要进行副本管理、自动扩展和滚动升级的应用程序。

代码示例实现:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest

文献材料链接:

当前使用Deployment的产品:

  • Kubernetes本身是使用Deployment来管理Kubernetes集群中的核心组件和应用程序。
  • 很多云服务提供商(如AWS、Azure、Google Cloud等)的Kubernetes托管服务也使用Deployment来管理用户的应用程序部署。
  • 许多企业和组织在生产环境中使用Kubernetes时,也广泛使用Deployment来管理应用程序的部署。
  1. StatefulSet(有状态集合)原理解释:
    StatefulSet是Kubernetes中用于管理有状态应用程序的控制器对象。它的主要原理是为每个Pod提供唯一的标识符和稳定的网络标识,以保持状态的稳定性。StatefulSet通过控制Pod的创建、删除和更新,以及提供有序启动和终止策略来管理有状态应用程序。每个Pod都有一个唯一的标识符和网络标识,这使得Pod在重新启动或迁移时能够保持稳定的状态。

流程图:

+----------------------+
                                      |                      |
                                      |   StatefulSet        |
                                      |                      |
                                      +----------+-----------+
                                                 |
                                                 |
                                                 |
                                                 v
                                      +----------+-----------+
                                      |                      |
                                      |   PersistentVolume   |
                                      |                      |
                                      +----------------------+
                                                 |
                                                 |
                                                 |
                                                 v
                                      +----------+-----------+
                                      |                      |
                                      |   Pod                |
                                      |                      |
                                      +----------------------+

使用场景:

  • 适用于有状态应用程序,如数据库、消息队列、存储节点等。
  • 需要提供有序部署、有序扩展和稳定的网络标识的应用程序。

代码示例实现:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  serviceName: my-service
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest

文献材料链接:

当前使用StatefulSet的产品:

  • 许多数据库产品(如MySQL、PostgreSQL)在Kubernetes中使用StatefulSet来管理数据库实例的部署和运行。
  • 一些消息队列系统(如Kafka)也使用StatefulSet来管理节点的部署和运行。
  • 企业和组织在需要管理有状态应用程序的场景中广泛使用StatefulSet来管理应用程序的部署。
  1. DaemonSet(守护进程集合)原理解释:
    DaemonSet是Kubernetes中用于在每个节点上运行一个Pod副本的控制器对象。它的主要原理是在集群中的每个节点上创建一个Pod副本,以确保每个节点都有一个Pod运行。当新节点加入集群时,DaemonSet会自动在新节点上创建Pod副本;当节点从集群中删除时,相应的Pod副本也会被删除。DaemonSet适用于运行系统级别的守护进程、日志收集器、监控代理等任务。

流程图:

+----------------------+
                                      |                      |
                                      |   DaemonSet          |
                                      |                      |
                                      +----------+-----------+
                                                 |
                                                 |
                                                 |
                                                 v
                                      +----------+-----------+
                                      |                      |
                                      |   Pod                |
                                      |                      |
                                      +----------------------+

使用场景:

  • 适用于在每个节点上运行一个Pod的任务,如守护进程、日志收集器、监控代理等。
  • 需要在集群中动态管理节点上的任务的部署和运行。

代码示例实现:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx:latest

文献材料链接:

当前使用DaemonSet的产品:

  • 许多日志收集器和监控代理(如Fluentd、Prometheus Node Exporter)在Kubernetes中使用DaemonSet来在每个节点上运行相应的Pod副本。
  • 一些网络代理和边缘计算相关的产品也使用DaemonSet来在节点上运行相应的任务。
  • 企业和组织在需要在每个节点上运行特定任务的场景中,使用DaemonSet来管理任务的部署和运行。

标签:statefulset,Kubernetes,deployment,副本,daemonset,Deployment,Pod,节点,DaemonSet
From: https://blog.51cto.com/chenfenglove/7343355

相关文章

  • 关于Kubernetes-v1.23.6-集群测试-创建一个nginx的deployment进行验证
    关于k8s集群环境搭建完成后,我们可以通过创建一个deployment进行效果的测试这里以nginx为例,还是在k8s-master上进行创建kubectlcreatedeploymentnginx--image=nginxkubectlexposedeploymentnginx--port=80--type=NodePort这里--port只是指定了容器(container )暴......
  • daemonset只运行在指定节点
    1.spec.template.spec.nodeSelector如,只在node标签有daemonset=true的节点上运行pod:apiVersion:apps/v1kind:DaemonSetmetadata:name:ssd-monitor-nodelabelnamespace:controller-testspec:selector:matchLabels:app:ssd-monitor-nodelabelte......
  • 部署 Statefulset 服务 Zookeeper
    部署Statefulset服务Zookeeper创建Zookeeper镜像下载Zookeeper二进制包mkdirzkcdzk/wgethttps://dlcdn.apache.org/zookeeper/zookeeper-3.8.1/apache-zookeeper-3.8.1-bin.tar.gz编写zk配置脚本cat<<EOF>zkGenConfig.sh#!/usr/bin/envbashZK_USER=${Z......
  • Kubernetes守护进程集 DaemonSet
    守护进程集DaemonSet守护进程集也有副本数概念,但是副本数概念并不是通过配置清单的方式人为去定义的,他是靠你当前集群的节点个数,比如我当前集群之前安装集群安装的网络插件calico[root@k8s-master1deployment]#kubectlgetpods-nkube-systemNAME......
  • Kubernetes Deployment控制器创建pod k8s
    Deployment因为RCRS无法支持动态更新Deployment支持动态更新无状态应用管理Deployment控制器下面就是ReplicaSet当我们创建Deployment的时候实际上会给我们创建一个同名的ReplicaSet控制器,这个RS上面是我们对应的pod节点更新的时候,Deployment是支持自动更新的,RS也可以更新,就是......
  • 【Azure K8S | AKS】在AKS中创建 StatefulSet 示例
    问题描述【AzureK8S|AKS】在AKS集群中创建PVC(PersistentVolumeClaim)和PV(PersistentVolume)示例【AzureK8S|AKS】进入AKS的POD中查看文件,例如PVCVolumeMounts使用情况【AzureK8S|AKS】在不丢失文件/不影响POD运行的情况下增加PVC的大小基于前三篇博文中使用的......
  • 10.ReplicaSet手动蓝绿部署、滚动发布、回滚及Deployment自动滚动发布、回滚及金丝雀
    Kubernetes的控制器Kubernetes的控制器类型◼打包于ControllerManager中内置提供的控制器,例如ServiceController、DeploymentController等◆基础型、核心型控制器◆打包运行于kube-controller-manager中◼插件或第三方应用的专用控制器,例如Ingress插件ing......
  • 11.DaemonSet的应用编排机制
    DaemonSet的应用编排机制DaemonSet:在集群中的每个节点上,都要部署一个且只能部署目标应用的一个实例;也可以基于标签选择器管控一组Pod副本;DaemonSet在什么场景中可以用到:我们使用zabbix监控目标主机的时候,通常在每一个目标主机上面部署一个zabbix.agent,但没必要在一个节......
  • kubernetes-Deployment和DaemonSet
    在Kubernetes中,Deployment和DaemonSet是两个不同的资源类型,用于不同的目的。Deployment用于在集群中运行可扩展的应用程序,可以管理Pod的副本数量,执行滚动升级和回滚操作。DaemonSet用于确保在集群的每个节点上运行一个Pod副本。它通常用于部署运行在每个节点上的系统级别的服务......
  • k8s 学习笔记之 Pod 控制器——StatefulSet
    StatefulSetStatefulSet是用来管理有状态应用的工作负载API对象。StatefulSet用来管理某Pod集合的部署和扩缩,并为这些Pod提供持久存储和持久标识符。和Deployment类似,StatefulSet管理基于相同容器规约的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个......