Kubernetes Pod调度基础

1. ReplicaSet(复制集)

特点

  • 确保Pod副本数量:ReplicaSet负责确保用户定义的Pod副本数量在集群中始终维持不变。如果副本数量少于预期,ReplicaSet会创建新的Pod;如果副本数量多于预期,则会删除多余的Pod。
  • 基于标签选择器:ReplicaSet通过标签选择器(Label Selector)来跟踪和管理具有特定标签的Pod。
  • 模板创建:ReplicaSet使用一个Pod模板来创建新的Pod。当需要增加副本数量时,ReplicaSet会根据这个模板来创建新的Pod实例。

优点

  • 高可用性:通过确保Pod副本数量的稳定,ReplicaSet提高了应用的高可用性。
  • 简化管理:用户只需定义Pod的副本数量和标签选择器,ReplicaSet即可自动管理Pod的创建和删除,简化了应用的管理过程。

2. Deployment(无状态应用管理)

特点

  • 基于ReplicaSet:Deployment是建立在ReplicaSet之上的高级抽象,用于管理无状态应用。
  • 声明式配置:Deployment支持声明式配置,用户只需描述期望的状态,Deployment会自动将实际状态调整到期望状态。
  • 滚动更新和回滚:Deployment支持滚动更新功能,可以在不中断服务的情况下更新Pod的镜像或其他配置。同时,Deployment还支持版本回滚,可以在出现问题时快速恢复到之前的稳定版本。

优点

  • 增强的可管理性:与ReplicaSet相比,Deployment提供了更多的管理功能,如滚动更新和回滚等。
  • 提升用户体验:通过简化更新和回滚流程,Deployment提升了用户体验,使得应用的运维更加便捷。

3. DaemonSet(守护进程集)

特点

  • 确保每个节点运行一个Pod副本:DaemonSet确保集群中的每个节点都运行一个Pod的副本,通常用于运行守护进程类任务,如日志收集、监控等。
  • 节点选择:DaemonSet支持通过节点选择器(Node Selector)来指定Pod运行的节点。

优点

  • 系统级任务的自动化:DaemonSet能够自动在集群的每个节点上运行必要的守护进程类任务,减轻了管理员的负担。
  • 提升集群的运维能力:通过确保关键系统级任务的稳定运行,DaemonSet提升了集群的运维能力和可靠性。

4. StatefulSet(有状态应用管理)

特点

  • 管理有状态应用:StatefulSet用于管理有状态应用,它提供了稳定的网络标识、存储和启动顺序等特性。
  • 持久化存储:StatefulSet中的Pod可以挂载持久化存储卷(如PV/PVC),确保数据在Pod重启或重新调度后不会丢失。
  • 有序部署和扩展:StatefulSet支持Pod的有序部署和扩展,确保应用按照预定的顺序启动和扩展。

优点

  • 支持有状态应用:StatefulSet填补了Kubernetes在有状态应用管理方面的空白,使得Kubernetes能够支持更广泛的应用场景。
  • 提升应用的稳定性和可靠性:通过提供稳定的网络标识和持久化存储等特性,StatefulSet提升了有状态应用的稳定性和可靠性。

无状态应用于有状态应用

(1)无状态服务

特点:

1、数据方面:无状态服务不会在本地存储持久化数据,多个实例可以共享相同的持久化数据
2、结果方面:多个服务实例对于同一个用户请求的响应结果是完全一致的
3、关系方面:这种多服务实例之间是没有依赖关系
4、影响方面:在 k8s 控制器中动态启停无状态服务的 pod 并不会对其它的 pod 产生影响
5、示例方面:nginx 实例,tomcat 实例,web 应用

6、资源方面:相关的 k8s 资源有:Replicaset、ReplicationController、Deployment
7、创建方式:Deployment 被设计用来管理无状态服务的 pod
每个 pod 完全一致,原因如下:

  • 无状态服务内的多个 Pod 创建的顺序是没有顺序的
  • 无状态服务内的多个 Pod 的名称是随机的
  • pod 被重新启动调度后,它的名称与 IP 都会发生变化
  • 无状态服务内的多个 Pod 背后是共享存储的

8、扩缩容方式:随机缩容
由于是无状态服务,所以这些控制器创建的 pod序号都是随机值。并且在缩容也是随机,并不会明确缩容某一个 pod。因为所有实例得到的返回值都是一样,所以缩容任何一个 pod 都可以。

无状态服务不会在本地存储持久化数据,多个服务实例对于同一个用户请求的响应结果是完全·致的。这种多服务实例之间是没有依赖关系,比如 web 应用,在 k8s 控制器中动态启停无状态服务的 pod 并不会对其它的 pod 产生影响。
Deployment 被设计用来管理无状态服务的 pod,每个 pod 完全一致无状态服务内的多个 Pod 创建的顺序是没有顺序的。
无状态服务内的多个 Pod 的名称是随机的,pod 被重新启动调度后,它的名称与 IP 都会发生变化
无状态服务内的多个 Pod 背后是共享存储的。

(2)有状态服务

特点:

1、数据方面:有状态服务需要在本地存储持久化数据,典型的应用是分布式数据库
2、结果方面:实例之间,请求结果可能存在不一致
3、关系方面:分布式节点实例之间有依赖的拓扑关系,比如主从关系
4、影响方面:如果 K8S 停止分布式集群中任一实例 pod,就可能会导致数据丢失或者集群的 crash

5、示例方面:mysq1 数据库、kafka、zookeeper、Redis 主从架构
6、资源方面:statefulset
7、创建方式:statefulset 管理
statefu1 管理有状态的应用,Pod 有如下特征:
唯一性:每个 Pod 会被分配一个唯一序号,
顺序性:Pod 启动,更新,销毁是按顺序进行。
稳定的网络标识:Pod 主机名,DNS 地址不会随着Pod 被重新调度而发生变化,稳定的持久化存储:Pod 被重新调度后,仍然能挂载原有的 PV,从而保证了数据的完整性和一致性

无状态服务和有状态服务的比较:


无状态服务
服务不依赖自身的状态,实例的状态数据可以维护在内存中。
任何一个请求都可以被任意一个实例处理。
不存储状态数据,实例可以水平拓展,通过负载均衡将请求分发到各个节点。
在一个封闭的系统中,只存在一个数据闭环。
通常存在于单体架构的集群中。
有状态服务
服务本身依赖或者存在局部的状态数据,这些数据需要自身持久化或者可以通过其他节点恢复。
一个请求只能被某个节点(或者同等状态下的节点)处理。
存储状态数据,实例的拓展需要整个系统参与状态的迁移。
在一个封闭的系统中,存在多个数据闭环,需要考虑这些闭环的数据一致性问题。
通常存在于分布式架构中。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值