面试题答案
一键面试基本原理
Kubernetes滚动更新机制允许在不中断服务的情况下,逐步将旧版本的容器替换为新版本。它通过控制Pod的创建和销毁速率,实现新旧版本的平稳过渡。在后端开发容器化场景下,滚动更新能确保应用在更新过程中持续可用,减少对用户的影响。
主要组件
- Deployment:用于管理Pod和ReplicaSet,定义了Pod的期望状态,包括副本数量、容器镜像版本等。它是实现滚动更新的核心资源对象。
- ReplicaSet:确保指定数量的Pod副本始终处于运行状态。Deployment通过创建和管理ReplicaSet来控制Pod的数量和版本。
- kube - controller - manager:集群的控制中心,包含多个控制器,其中Deployment Controller负责处理Deployment的更新操作,监控实际状态与期望状态的差异,并进行调整。
工作流程
- 更新定义:用户通过修改Deployment的配置,如容器镜像版本,来触发滚动更新。例如,
kubectl set image deployment/my - app my - app=my - app:v2
,将my - app
Deployment中my - app
容器的镜像更新为v2
版本。 - 创建新的ReplicaSet:Deployment Controller根据更新后的配置创建一个新的ReplicaSet,该ReplicaSet使用新的容器镜像。
- 逐步替换旧Pod:Deployment Controller开始逐步增加新ReplicaSet中的Pod数量,同时减少旧ReplicaSet中的Pod数量。每次增加和减少的Pod数量由
maxSurge
和maxUnavailable
参数控制。maxSurge
:指定在滚动更新过程中,超出期望副本数的最大Pod数量。可以是具体数字或百分比,默认值为25%。例如,若期望副本数为4,maxSurge
为25%,则更新过程中最多有5个Pod(4 + 1)。maxUnavailable
:指定在滚动更新过程中,不可用的最大Pod数量。同样可以是具体数字或百分比,默认值为25%。如期望副本数为4,maxUnavailable
为25%,则更新过程中最多有1个Pod不可用。
- 监控与验证:在滚动更新过程中,Kubernetes持续监控新Pod的健康状态,通过
readinessProbe
检查新Pod是否准备好接收流量。若新Pod健康检查失败,滚动更新会暂停,以便用户排查问题。只有当新Pod通过健康检查后,才会继续滚动更新。 - 完成更新:当旧ReplicaSet中的Pod全部被替换为新ReplicaSet中的Pod时,滚动更新完成,应用成功升级到新版本。此时,旧的ReplicaSet会被保留,以便在需要时进行回滚操作。
- 回滚操作:如果在更新过程中发现问题,可以使用
kubectl rollout undo deployment/my - app
命令回滚到上一个稳定版本。Deployment Controller会根据保留的旧ReplicaSet信息,将Pod恢复到之前的版本状态。