author:魏静崎
2025年5月12日
K8s学习
来源:学习b站薪享宏福Kubernetes课程
1、控制器
在 Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes集群内部的管理控制中心或者说是”中心大脑”。例如,Node 控制器负责监控节点的状态,并在节点出现故障时,执行自动化修复流程,确保集群始终处于预期的工作状态。
2、Pod控制器
ReplicationController 和 ReplicaSet
ReplicationController(RC)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的 Pod 来替代;而如果异常多出来的容器也会自动回收;
在新版本的 Kubernetes 中建议使用 ReplicaSet 来取代 ReplicationController 。ReplicaSet 跟ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式的 selector;
Deployment
Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义 ( declarative ) 方法,用来替代以前的 ReplicationController 来方便的管理应用。声明式是被动的,而命令式是主动且直接的。
kubectl replace: 使用新的配置完全替换掉现有资源的配置。这意味着新配置将覆盖现有资源的所有字段和属性,包括未指定的字段,会导致整个资源的替换(命令式)
kubectl apply: 使用新的配置部分地更新现有资源的配置。它会根据提供的配置文件或参数,只更新与新配置中不同的部分,而不会覆盖整个资源的配置(声明式)
滚动更新:在更新时,通过将原本re的rep副本数-1,新的rep+1,来完成新老rs的逐步替换,但是老的rs不会删除,因为只是一个存在于etcd的资源清单,基本不占用资源,并且方便回滚。
kubectl create、apply、replace命令
create:创建资源对象
-f:通过基于文件创建,如果此文件描述的对象存在,则再次提交不会应用
apply:创建资源对象、修改资源对象
-f:基于文件创建,如果目标对象和文件本身发生改变,则会根据文件的指定修改目标对象的属性(部分更新)
replace:创建资源对象、修改资源对象
-f:基于文件创建,如果目标对象和文件本身发生改变,则会重建此对象(替换)
更新策略
Deployment 可以保证在升级时只有一定数量的 Pod 是 down 的。默认的,它会确保至少有比期望的Pod数量少一个是up状态(最多一个不可用)
Deployment 同时也可以确保只创建出超过期望数量的一定数量的 Pod。默认的,它会确保最多比期望的 Pod 数量多一个的 Pod 是 up 的(最多 1 个 surge )
DaemonSet
DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod
使用 DaemonSet 的一些典型用法:
运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
在每个 Node 上运行日志收集 daemon,例如fluentd、logstash
在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond
总结:需要node上有且只有一个的pod
Job
Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
CronJob
Cron Job 管理基于时间的 Job,即:
在给定时间点只运行一次
周期性地在给定时间点运行
使用条件:当前使用的 Kubernetes 集群,版本 >= 1.8(对 CronJob)
- 本文作者: 魏静崎
- 本文链接: https://slightwjq.github.io/2025/05/05/K8s学习-4 Pod控制器/
- 版权声明: 该文章来源及最终解释权归作者所有