目录
前言
环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6
在上一篇《pod的介绍、命令行创建pod》我们介绍了何为pod,以及如何在命令行创建pod,但这都不是我们在生产环境的常规操作,我们在生产环境中一般是通过控制器来创建pod的,并使用控制器来管理pod。本篇我们来论述何为pod控制器。
何为pod控制器
pod控制器,是用于管理、部署pod的一种k8s中重要的资源,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会新建pod的资源。这样,当有了控制器来管理pod,我们就能轻松的通过配置控制器,让控制器来帮我们实现我们所期望的pod扩容、缩容,即使当pod出现异常挂掉,控制器也能立即重新启动一个pod,因为控制器的本质其实就是实时检查pod数量使其符合我们预先设定的值。
常用pod控制器
常用的pod控制器有一下几种:
ReplicationController: 比较原始的pod控制器,已经被废弃,了解即可,有ReplicaSet替代;
ReplicaSet: 保证指定数量的pod运行,并提供pod数据变更,镜像版本变更;
DaemonSet: 在集群每个node上都运行一个pod,确保全部Node 上运行一个 Pod 的副本,适用于每个node工作节点后台日志收集等场景;
CronJob: 用于执行周期性定时任务的pod,主要用于执行周期性计划,类似于Linux的crontab定时任务;
Job: 用于一次性计划任务的pod,执行完毕pod就立即退出,类似于Linux的at命令;
Deployment: 通过创建DaemonSet来创建pod,支持滚动升级,版本回退,Deployment是最常用的pod控制器;
Horizontal Pod Autoscaler: 可以根据集群负载自动调整pod的数量,实现自动扩容缩容,削峰填谷;
StatefulSet: 管理又状态的应用;
ReplicationController介绍(已废弃,基本不会用到这种控制器)
ReplicationController,简写rc,是k8s中一种pod控制器,在新版本中,rc已经被取代,所以这里了解rc即可;
ReplicationController会持续监控正在运行的pod列表,并保证相应标签类型的pod数量与期望的相符,如正在运行的pod太少,rc就会根据pod模板来创建新的副本,如果正在运行的pod太多,rc将会删除多余的pod。
总之,ReplicationController的工作就是确保pod数据始终与其定义的标签选择器选中的pod数量相匹配,如果不匹配,rc将会根据所需,采取适当的操作来协调pod数量。
rc的三大部分
1、label selector,标签选择器,用于确定rc作用于哪些pod,反过来说哪些pod可以被rc管理;
2、replica,副本数,指定运行的pod数量;
3、pod template,pod模板,用于创建新的pod副本,pod就是根据模板来创建的。
rc的实现原理
rc与pod其实是通过标签和标签选择器来进行管联的,当改变一个pod的标签,那么该pod就会脱离rc的管理,而rc 发现少了一个pod,又会根据模板重新创建一个pod来满足副本数。如果先独立创建了pod并定义了标签,然后再创建rc,rc的标签筛选器和已存在的pod的标签相同,那么创建rc时,rc直接接管已存在的pod,rc根本不会创建新的pod,这就说明,rc与pod的根本就是通过标签和标签选择器来进行管联的。
更改rc的标签选择器和pod模板会怎样
更改rc的标签选择器和pod模板对正在运行的pod没有影响,更改标签选择器会使现有的pod脱离rc的范围,因此rc会停止关注它们,它们称为无人托管的pod。如果更改了pod模板,该模板仅影响由rc创建的新的pod。
创建一个ReplicationController
下面就来创建一个ReplicationController资源:
[root@master ~]# vim rc_nginx.yaml
apiVersion: v1
kind: ReplicationController #创建一个ReplicationController控制器
metadata:
name: rc-nginx #控制器名称
namespace: default #命名空间
spec:
replicas: 3 #表示pod副本数
selector: #定义标签选择器,用于说明rc控制管理的是带有哪些标签的pod
app: nginx #标签app=nginx
template: #定义pod模板,pod模板就是用来创建pod
metadata:
labels: #pod标签,注意:pod标签必须与上面标签选择器定义的标签相同,否者rc就不知道如何关联pod
app: nginx
spec:
containers:
- image: nginx:1.7.9
name: nginx-container
ports:
- containerPort: 80
[root@master ~]# kubectl apply -f rc_nginx.yaml #应用yaml文件
[root@master ~]# kubectl get rc,pod --show-labels #查看rc和pod
NAME DESIRED CURRENT READY AGE LABELS
replicationcontroller/rc-nginx 3 3 3 43m app=nginx
NAME READY STATUS RESTARTS AGE LABELS
pod/rc-nginx-4drqr 1/1 Running 0 43m app=nginx
pod/rc-nginx-cn8wv 1/1 Running 0 43m app=nginx
pod/rc-ng

本文详细介绍了Kubernetes中管理Pod的控制器,包括已被废弃的ReplicationController、其替代者ReplicaSet、用于确保每个节点运行一个Pod的DaemonSet、一次性任务的Job以及周期性任务的CronJob。这些控制器在集群中确保Pod的稳定运行、自动扩展和任务调度。ReplicationController和ReplicaSet主要负责保持Pod副本数量的稳定,而DaemonSet保证每个节点至少有一个Pod副本。Job和CronJob则针对一次性或周期性任务设计,Job执行完成后自动结束,CronJob按预设时间间隔定期执行任务。
最低0.47元/天 解锁文章
1086

被折叠的 条评论
为什么被折叠?



