shenmingbusujiku / Linux

关于Linux的学习和项目
0 stars 0 forks source link

pod控制器详解 #25

Open shenmingbusujiku opened 2 years ago

shenmingbusujiku commented 2 years ago

ReplicaSet(RS) ReplicaSet的主要作用是保证一定数量的pod正常运行,它会持续监听这些Pod的运行状态,一旦Pod发生故障,就会重启或重建。同时它还支持对pod数量的扩缩容和镜像版本的升降级。

Image

在这里面,需要新了解的配置项就是 spec 下面几个选项: replicas:指定副本数量,其实就是当前rs创建出来的pod的数量,默认为1 selector:选择器,它的作用是建立pod控制器和pod之间的关联关系,采用的Label Selector机制在pod模板上定义label,在控制器上定义选择器,就可以表明当前控制器能管理哪些pod了 template:模板,就是当前控制器创建pod所使用的模板板,里面其实就是前一章学过的pod的定义

Image

扩缩容

编辑rs的副本数量,修改spec:replicas: 6即可

kubectl edit rs NAME -n ns名称

当然也可以直接使用命令实现

使用scale命令实现扩缩容, 后面--replicas=n直接指定目标数量即可

kubectl scale rs NAME --replicas=2 -n ns名称 镜像升级

kubectl set image rs rs名称 容器=镜像版本 -n namespace

kubectl set image rs pc-replicaset nginx=nginx:1.17.1 -n dev 删除ReplicaSet

使用kubectl delete命令会删除此RS以及它管理的Pod

在kubernetes删除RS前,会将RS的replicasclear调整为0,等待所有的Pod被删除后,在执行 RS对象的删除

kubectl delete rs NAME -n ns名称 Deployment(Deploy) 为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器。值得一提的是,这种控制器并不直接管理pod,而是通过管理ReplicaSet来简介管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。

Image

Deployment主要功能有下面几个: 支持ReplicaSet的所有功能 支持发布的停止、继续 支持滚动升级和回滚版本

Image

查看deployment

kubectl get deploy NAME -n ns名称

查看rs

kubectl get rs -n ns名称 扩缩容 kubectl scale deploy NAME --replicas=数量 -n ns名称 镜像更新 deployment支持两种更新策略: 重建更新 和 滚动更新 ,可以通过 strategy 指定策略类型,支持两个属性 重建更新 1)编辑pc-deployment.yaml,在spec节点下添加更新策略

Image

2)创建deploy进行验证

变更镜像

kubectl set image deployment NAME nginx=nginx:1.17.2 -n ns镜像 滚动更新 1)编辑pc-deployment.yaml,在spec节点下添加更新策略

Image

2)创建deploy进行验证

变更镜像

kubectl set image deployment NAME nginx=nginx:1.17.3 -n ns名称 Horizontal Pod Autoscaler(HPA) Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自动调整,于是就产生了Horizontal Pod Autoscaler(HPA)这种控制器。

Image

部署HPA

Image

查看hpa

kubectl get hpa -n ns名称 DaemonSet(DS) DaemonSet类型的控制器可以保证在集群中的每一台(或指定)节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建。

Image

DaemonSet控制器的特点: 每当向集群中添加一个节点时,指定的 Pod 副本也将添加到该节点上 当节点从集群中移除时,Pod 也就被垃圾回收了

Image

查看daemonset

kubectl get ds -n ns名称 -o wide Job Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。Job特点如下: 当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量 当成功结束的pod达到指定的数量时,Job将完成执行

Image

关于重启策略设置的说明: 如果指定为OnFailure,则job会在pod出现故障时重启容器,而不是创建pod,failed次数不变 如果指定为Never,则job会在pod出现故障时创建新的pod,并且故障pod不会消失,也不会重启, failed次数加1 如果指定为Always的话,就意味着一直重启,意味着job任务会重复去执行了,当然不对,所以不 能设置为Always

Image

查看job

kubectl get job -n ns名称 -o wide -w CronJob(CJ) 以Job控制器资源为其管控对象,并借助它管理pod资源对象,CronJob可以在特定的时间点(反复的)去运行job任务。

Image

需要重点解释的几个选项: schedule: cron表达式,用于指定任务的执行时间 /1 <分钟> <小时> <日> <月份> <星期> 分钟 值从 0 到 59. 小时 值从 0 到 23. 日 值从 1 到 31. 月 值从 1 到 12. 星期 值从 0 到 6, 0 代表星期日 多个时间可以用逗号隔开; 范围可以用连字符给出;可以作为通配符; /表示每... concurrencyPolicy: Allow: 允许Jobs并发运行(默认) Forbid: 禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行 Replace: 替换,取消当前正在运行的作业并用新作业替换它

查看cronjob

kubectl get cronjobs -n ns名称

Image