k8s–基础–15–Deployment和ReplicaSet的区别


1、ReplicaSet

  1. 核心作用在于帮助用户创建指定数量的pod副本,并确保pod副本一直处于满足用户期望的数量,起到多退少补的作用,并且还具有自动扩容缩容等机制

1.1、主要由三个部分组成

  1. 用户期望的pod副本数:用来定义由这个控制器管控的pod副本有几个
  2. 标签选择器:当pod挂掉的时候,replicaset就通过标签选择器,选择指定标签的pod模板,再通过pod模板创建pod。
  3. pod资源模板:定义一个Pod模板,且需要给pod模板设置标签。给标签选择器使用

2、Deployment

  1. ReplicaSet并不是我们直接使用的控制器,kubernetes建议我们使用Deployment
  2. Deployment控制器是工作在ReplicaSet之上的,Deployment通过控制ReplicaSet来控制pod,并不是直接控制pod。
  3. Deployment有ReplicaSet的所有功能
  4. Deployment支持自动扩容缩容,滚动更新和回滚等机制,并提供了一个声明式的定义功能,这种声明式定义使得我们将来创建资源时可以基于声明的逻辑来定义,我们那些所有定义的资源可以随时重新进行声明,随时改变我们在apiserver上的定义的目标期望状态,只要那些资源支持动态运行时修改,都能修改
  5. 是帮我们管理无状态的应用的最好的控制器
  6. pod副本数量可以大于节点数量的,那么可能一个节点上就会运行多个pod副本,它们之间没有精确的对应关系
  7. 在我们运行容器的时候应该在每一个节点上收集容器和节点级别的日志
  1. 容器的日志也会存在节点上的,它们通过逻辑卷的方式映射到所在的节点之上的
  2. 要想实现收集日志,需要在节点上部署一个日志收集代理,如filebeat和flume等程序,一个节点上只需要部署一个日志收集代理即可,是节点级别工作的,收集一个节点上pod中运行的所有容器的日志以及当前节点自身生成的日志的,然后把收集到的日志发送给一个专门做日志收集的服务器上(如elk集群等),但是如果node节点上部署的代理日志收集程序挂了,怎么办,可以通过控制器实现高可用