开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程: ACK 集群升级】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/913/detail/14566
ACK 集群升级
一、 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 资源进行排查。