自学k8s系列~06之滚动更新
Pod健康检查与服务可用性检查
Kubenetes 对 Pod 的健康检查可用两类探针来进行检查: LivenessProbe 和 ReadinessProbe 。
LivenessProbe
判断容器是否存活,主要是对 Running 状态进行检测,如果检测到不健康,则将该容器杀掉然后根据容器的重启策略做相应的处理。如果容器没有指定 LivenessProbe 探针,则 kubelet 认为该容器永远是健康的。
ReadinessProbe
ReadinessProbe 探针主要用于判断容器服务是否可用,即是否处于(Ready状态)。达到 Ready 状态的 Pod 才可以接收请求,如果容器不是 Ready 状态则自动将该容器从 Service 的 Endpoing 列表中隔离出去。当容器恢复到 Ready 状态时,再将容器加入到 Endping 列表中。这样就能保证容器如果没有处于 Ready 状态就不会有流量请求到该 Pod 上。
探针实现方式
LivenessProbe 和 ReadinessProbe 都可以配置以下三种实现方式和自定义扩展的方式。
ExecAction
在容器内部执行一个命令,如果该命令返回码为 0 ,则标志着该容器健康。
1 | apiVersion: v1 |
创建了一个文件位于 /tmp 目录下,10 秒后将期删除,然后探针去检测该文件。该 Pod 会被判断为不健康,执行多次重启。
1 | kubectl get pod liveness |
TCPSocketAction
通过容器的 IP 地址和端口号执行 TCP 检查,如果能够建立 TCP 链接,则表明容器健康。
1 | apiVersion: v1 |
通过 RESTARTS
可以查看到重启的次数
1 | kubectl get pods |
HTTPGetAction
通过容器的 IP 地址、端口号及路径调用 HTTP GET 方法,如果响应码(HttpStatusCode) 大于等于 200 且小于 400,则表明容器健康。
1 | apiVersion: v1 |
Pod的升级
Pod 升级时,使用 kubectl edit xxx.yaml
,将自动进行 Pod
升级操作。升级过程如下:
- 先创建一个新的
ReplicaSet
,将副本设为1. - 老的
ReplicaSet
副本缩减1. - 重复以上过程
升级策略
- 重建(Recreate): 设置
spec.strategy.type=Recreate
。在创建Pod
的时候会先杀掉所有正在运行的Pod
,然后创建新的Pod
- 滚动更新(RollingUpdate): 设置
spec.strategy.type=RollingUpdate
。Deployment
会以滚动更新的方式来逐个更新Pod
,配合参数spec.strategy.type.RollingUpdate.maxUnavailabel
和spec.strategy.type.RollingUpdate.maxSurge
可以控制滚动更新的过程。
Pod的回滚
Pod的扩缩容
Pod
的扩缩容其实就是维持 Pod
的数量,当 Pod
数量增加是就是扩容,当 Pod
数量减少时就是缩容。扩缩容有手动和自动两种方式。
- 手动扩缩容:手动的去调整
pod
的数量。通过--replicas
指定Pod
的数量,也可以在 yaml 文件中调整spec.replicas
的值 - 自动扩缩容:使用者指定一些指标并指定
Pod
数量的范围,系统将在这个范围内自动调整Pod
的数量。
手动扩缩容
- 命令方式
1 | kubectl scale deployment pod_name -- replicas podNumber #通过指定 --replicase 来指定 pod 数量完成扩缩容 |
- yaml 方式
1 | apiVersion: apps/v1 |
自动扩缩容
自动扩缩容指标:Pod 资源使用率、Pod 自定义指标、Object 自定义指标或外部自定义指标。
- todo 自动扩缩容目前暂时没有场景,不深入研究。
写在最后
自学 k8s 系列,到这里我准备暂时告一段落了,等过三个月后再回来复习复习 k8s 的内容。2021-08-24开始学习 k8s 到今天 2021-09-07 也有 15 天时间,时间也不算长。当时学习 k8s 是因为现在 k8s 实在太火了,各种大会各路大牛几乎都在提 k8s ,这么火的东西我想要了解它到底是什么(应用层面^_^)。k8s 的基本概念和一些简单操作也算是入门了,在当前的工作中也没有这方面的应用场景,所以打算暂停了,同时为了避免自己学过的东西遗忘也定下了 3 个月后再回来复习的目标。
- 2021-12-07 开始回来复习 k8s 的内容。