K8s 控制器
k8s 常见的控制器:replicaset, deployment, statefulset, daemonset, job, cronjob
前面我们学习了Pod,那我们在定义pod 资源时,可以直接创建一个kind:Pod 类型的自主式pod, 但是这存在一个问题,假如pod 被删除了,那这个pod 就不能自我恢复,就会彻底被删除,线上这种情 况非常危险,所以今天就给大家讲解下pod 的控制器,所谓控制器就是能够管理pod,监测pod 运行状 况,当pod 发生故障,可以自动恢复pod。也就是说能够代我们去管理pod 中间层,并帮助我们确保每一 个pod 资源始终处于我们所定义或者我们所期望的目标状态,一旦pod 资源出现故障,那么控制器会尝 试重启pod 或者里面的容器,如果一直重启有问题的话那么它可能会基于某种策略来进行重新布派或者 重新编排;如果pod 副本数量低于用户所定义的目标数量,它也会自动补全;如果多余,也会自动终止 pod 资源。
Replicaset
ReplicaSet 是 k8s 中的一种副本控制器,简称rs ,主要作用是控制由其管理的pod ,使pod 副本的数量始终维持在预设的个数。它的主要作用就是保证一定数量的Pod 能够在集群中正常运行,它会持续监听这些Pod 的运行状态,在Pod 发生故障时重启 pod,pod 数量减少时重新运行新的 Pod 副本。官方推荐不要直接使用ReplicaSet,用Deployments 取而代之,Deployments 是比ReplicaSet 更高级的概念,它会管理ReplicaSet 并提供很多其它有用的特性,最重要的是Deployment 支持声明式更新,声明式更新的好处是不会丢失历史变更。所以Deployment 控制器不直接管理Pod 对象,而是由 Deployment 管理ReplicaSet ,再由ReplicaSet 负责管理Pod 对象。
kubectl explain rs # 查看 replicaset 有哪些字段
kubectl explain rs.metadata # 查看 replicaset metadata 子字段
replicaset 实现 pod 扩缩容和更新
扩缩容可以直接修改 yaml 文件中的副本数字段 replicas 然后执行 kubectl apply -f replicaset.yaml 即可。
更新操作基本也是相同的,直接更新 yaml 文件执行命令即可。只不过最后需要手动的执行删除 pod 命令(kubectl delete pods fronted-glb2c),通过 replicaset 自动启动功能启动新的镜像容器。replicaset 资源没法滚动更新,只能手动删除。后面讲的 Deployment 资源可以设置更新策略。