目录
pod的创建方式:
- 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建
- 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建
什么是pod控制器:
Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样 的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如 果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod。
pod控制器的分类:
- ReplicaSet:保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级
- Deployment:通过控制ReplicaSet来控制Pod,并支持滚动升级、回退版本
- Horizontal Pod Autoscaler:可以根据集群负载自动水平调整Pod的数量,实现削峰填谷
- DaemonSet:在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务
- Job:它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务
- Cronjob:它创建的Pod负责周期性任务控制,不需要持续后台运行
- StatefulSet:管理有状态应用
分类详解:
ReplicaSet:
主要作用:保证一定数量的pod的正常运行,一旦某个pod发生故障,他会重新启动或重建,也支持pod的扩缩及镜像版本的更迭。
扩缩容指令:
- 使用编辑指令,即
kubectl edit rs 名称 -n 命名空间
回车后编辑修改里面的replicas属性,修改为所需要的值,保存退出即可。
-
直接使用下面命令即可
kubectl scale rs 名称 --replicas=指定值 -n 命名空间
镜像的更迭:
-
使用编辑指令,即
kubectl edit rs 名称 -n 命名空间
回车后编辑修改里面的镜像版本属性,修改为所需要的版本,保存退出即可。
-
直接使用下面指令即可
kubectl set image rs 名称 容器名称=容器所指定的镜像版本 -n 命名空间
Deployment:
主要作用:有ReplicaSet的全部功能,且还具有版本回退更新的功能,本质时通过操纵ReplicaSet来对pod进行操作的。
扩缩容指令:
与ReplicaSet类似
版本更新:
- 重建更新:先删除老的版本,重建新的版本
spec:
strategy: # 策略
type: Recreate # 重建更新
- 滚动更新:杀死一部分,就启动一部分,在更新的过程中存在两个版本的pod。
spec:
strategy: # 策略
type: RollingUpdate # 滚动更新策略
rollingUpdate:
maxSurge: 25% #默认值
maxUnavailable: 25% #默认值
注意:滚动更新时,会产生一个新的RS控制器,新的RS增加一个pod后,老的RS控制器会减少一个一个pod,从而完成更新操作。 而更新完成后,老的RS并不会杯删除,而是会保留,用于做版本的回退。
版本回退:
指令如下:
kubectl rollout status deploy 名称 -n 命名空间 # 查看当前升级版本的状态
kubectl rollout history deploy 名称 -n 命名空间 # 查看升级历史记录
kubectl rollout undo deployment 名称 --to-revision=版本号 -n 命名空间 # 版本回滚到指定版本,若没有指定版本,则回退至前一版本
金丝雀发布:
概念:在版本更新时,新的RS生成一个pod后,老的RS还没删除时,就先暂停更新操作,然后先让一小部分请求去新的RS中的pod,看更新后功能是否正常运行,若不可以,则直接回到老版本即可,若可以则继续更新。
指令:只需在更新镜像的指令后再加上pause(暂停版本升级即可),可以正常运行则使用resume(继续已暂停的版本升级过程)继续更新即可。