企业级运维之云原生与Kubernetes实战课程
第四章第2讲 ACK集群升级
视频地址:
https://developer.aliyun.com/learning/course/913/detail/14566
一、 ACK集群升级流程
1. 集群升级难点
随着社区K8s版本的不断演进,新的版本有着更为先进的新特性、更加全面的安全加固和漏洞修复。阿里云ACK也会对社区版本做适配,并且提供一键升级集群的功能。
集群升级被比喻为“给飞行的飞机换引擎”,大多数Kubernetes用户对于集群升级都持保守态度。集群升级的难点主要有三个方面:
- 集群经过长时间运行后,已经积累了比较复杂的运行状态,升级会引发不可预见的异常问题;
- 每个集群都会有个性化的配置,这种千集群千面的情况,也增加了集群升级的复杂性;
- 云上运行K8s集群使用大量云计算底层资源,升级集群可能会对底层云资源产生不确定因素。
2. 集群升级流程
针对集群升级的难点,阿里云设计了集群升级流程如下:
集群升级首先会对系统组件、集群节点配置等进行预检查,预检查通过后才会进行升级操作,升级master、升级node以及升级核心组件,最后完成升级。
3. 集群升级入口
参考文档:https://help.aliyun.com/document_detail/86497.html
- 登录容器服务管理控制台,在控制台左侧导航栏中,单击集群,在集群列表页面中,选择目标集群,并在目标集群右侧的操作列下,选择更多–集群升级;
- 进入集群升级页面,会显示升级流程,系统会自动进行升级预检查,通过后才会进行后面的升级操作,如果集群存在不合理配置或潜在风险,则无法通过预检查。
二、升级预检查
通过对集群进行比较全面的预检,来消除升级集群的不确定性。
升级预检查主要包括三个方面:
1. 核心组件检查
- 网络组件:
确保网络组件版本和K8S目标版本兼容;
- Apiservice:
确保集群内所有apiservice可用;
- 节点:
确保节点全部健康;
2. 节点配置检查
- os配置:
yum、systemd、ntp是否正常以及内核参数设置是否合理;
- kubelet:
kubelet是否正常、配置是否正确;
- docker:
docker是否正常、配置是否正确;
3. 云资源检查
- apiserver的slb:
实例健康状态,端口配置(转发配置、acl控制);
- 集群的vpc、vswitch是否存在;
- 集群内的ecs实例:
确定健康状况和网络配置。
下图是升级预检查的检查报告示例,如果方框内的○都是绿色,则代表检查无异常。
如有红色的点,则代表有错误,单击查看详情按钮,跳转到集群运维页面,查看具体的失败原因。
三、集群升级三部曲
升级集群主要考量集群服务不中断、业务无感知。
1. 升级master
- 采用滚动升级,访问集群不可用;
- 升级master核心组件:
kube-apiserver
kube-controller-manager
kube-scheduler
注意:为保证Kubernetes的API Server可用性不中断,在master中的kube-apiserver至少需要2个,以实现滚动升级。
2. 升级node
- 采用分批升级策略;
- 主要升级kubelet、cni等组件;
3. 升级核心组件
- 根据社区的版本兼容矩阵;
- 组件包括:coredns、kube-proxy等。
本讲小结
1、回顾:本章讲解了集群升级的原理及过程。
2、思考:
- 某一个woker节点not ready,是否可以升级成功?
- 升级预检查失败该如何排查?
- 提示:可以针对升级预检查操作生成的namespace中的pods资源进行排查。
- 集群升级失败该如何排查?
- 提示:可以针对kube-upgrade这个命名空间中的pods资源进行排查。