第五步如何升级一个Kubernetes集群|学习笔记

简介: 快速学习第五步如何升级一个Kubernetes集群

开发者学堂课程【云原生实践公开课第五步如何升级一个Kubernetes集群】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/698/detail/12270


第五步如何升级一个Kubernetes集群


内容介绍:

一、 升级的必要性&难点

二、 两种常见的升级方式

三、 集群升级三部曲

四、 升级一个ACK集群

 

一、 升级的必要性&难点

集群升级的必要性&难点

在Kubernetes领域,得益于活跃的开源社区,Kubernetes 的迭代速度较快,目前保持在每个季度发行一个新版本的节奏。新版本的

Kubernetes有着更为先进的新特性、更加全面的安全加固和漏洞修复。

1. 集群升级的必要性:

  • 可以使用新的feature,新的安全补丁,和诸多的 bugfix,充分享受Kubernetes

社区的发展红利。

  • 对于多集群的用户可以对集群的版本进行收敛,拉齐所管理的集群版本,从而

减少维护成本。

2. 集群升级的难点

  • 集群经过长时间的运行,积累了复杂的运行时状态。
  • 集群已经被进行了各种个性化配置。

那么这个时候再去对集群进行升级,就相当于是“给飞行中的飞机换引擎”,是一个非常复杂的事情。


二、 两种常见的升级方式

1. 两种常见的升级方式–原地升级

在软件升级领域,有两种主流的软件升级方式,即原地升级和替换升级。这两种升级方式同样适用于 Kubernetes 集群。这两种方式采用了不同的思路,存在着各自的利弊。

原地升级:

原地升级会通过在 ECS 上原地替换 Kubernetes 组件的方式,完成整个集群的升级工作。阿里云容器服务 Kubernetes 为客户提供的集群升级就是基于这种方式的。

以版本1.14升级到1.16为例,会通过直接升级节点上 Kubelet 及其配置的方式,将集群所有节点升级到1.16。好处是,在这个过程中节点保持运行,ECS的相关配置也不会被修改。如图所示。

image.png

原地升级会通过在 ECS 上原地替换 Kubernetes 组件的方式,完成整个集群的升级工作。阿里云容器服务 Kubernetes 为客户提供的集群升级就是基于这种方式的。

优点:

原地升级通过原地替换的方式对节点进行升级,从而保证了节点上的Pod不会因为集群升级而重建,确保了业务的连贯性。该种升级方式不对底层ECS进行修改和替换,保证了依赖特定节点调度的业务可以正常运行,也对ECS的包年包月客户更加友好。

缺点:

原地升级方式需要在节点上进行一系列升级操作,才能完成整个节点的升级工作。这就导致整个升级过程不够原子化,可能会在中间的某一步骤失败,从而导致该节点升级失败。原地升级的另一个缺点是需要预留一定量的资源,只有在资源足够的情况下升级程序才能在ECS上完成对节点的升级。

2. 两种常见的升级方式–替换升级

在软件升级领域,有两种主流的软件升级方式,即原地升级和替换升级。这两种升级方式同样适用于 Kubernetes 集群。这两种方式采用了不同的思路,存在着各自的利弊。

替换升级:

替换升级又称轮转升级。替换升级会逐个将旧版本的节点从集群中移除,并用新版本全新的节点来替换,从而完成整个 Kubernetes 集群的升级工作。

同样以版本1.14升级到1.16为例,替代轮转方式,会将集群中1.14版本的节点依次进行排水并从集群中移除,并直接加入1.16版本的节点。完成所有节点的轮转之后,整个集群就升级到1.16了。如图所示。

image.png

替换升级又称轮转升级。替换升级会逐个将旧版本的节点从集群中移除,并用新版本全新的节点来替换,从而完成整个Kubernetes集群的升级工作。

优点:

替代升级通过将旧版本的节点替换为新版本的节点从而完成集群升级。这个替换的过程相较于原地升级更为原子化,也不存在那么复杂的中间状态。所以也不需要在升级之前进行太多的前置检查。

缺点:

  • 替代升级将集群内的节点全部进行替换和重置,所有节点都会经历排水的过

程,这就会使集群内的pod进行大量的迁移重建。对于pod重建容忍度比较低的业务、只有单副本的应用、stateful set相关应用可能会因此发生不可用或者故障。

  • 节点经历重置,储存在节点本地磁盘上的数据都会丢失。
  • 这种升级方式可能会带来宿主机IP变化等问题,对包年包月用户也不够友好。


三、集群升级三部曲

前面的课程中,已经了解到,一个Kubernetes集群主要由master , worker和众多系统组件组成。那么对一个Kubernetes集群升级,也就是对集群中的这三个部分进行分别升级。故集群升级的三部曲为:

  • 滚动升级master
  • 分批升级worker
  • 系统组价升级( CoreDNS,kube-proxy)

image.png

滚动升级 master:

升级 master 主要是对管控面的三大件进行版本升级,主要包括:

  • 升级kube-apiserver
  • 升级kube-controller-manager
  • 升级kube-scheduler

为了保证 Kubernetesapiserver 的可用性不中断,kube-apiserver最少需要有两个,这样才可以实现滚动升级。

分批升级worker:

Worker升级主要是对节点上的kubelet及其依赖组件(如cni等)进行升级。为了保证集群中worker不会同时发生大批量的 kubelet重启,所以需要对worker节点进行分批升级。

核心系统组件:

为了保证集群中各个组件的兼容性,需要在升级集群的同时对集群中的核心系统组件进行同步升级,主要包括

  • Dns组件:CoreDNS
  • 网络转发组件:Kube-proxy


四、 升级一个ACK集群

ACK中提供了成熟稳定的集群升级功能。为客户提供了各项高阶功能

  • 前置检查:检查集群中潜在的隐患,确保集群升级平稳运行;
  • 升级暂停:可以随时暂停集群升级,检查集群中应用的状态;
  • 升级取消:可以在暂停升级之后取消升级

1. 手动升级一个ACK集群

演示:

首先打开容器服务的控制台点击急需升级来到了急需升级的页面。看到kubelet的版本是1.14.8,可以通过console命令查看APSO的版本可以看到的Gitversion也是1.14. 8的

开始集群的升级操作来到集群升级页面,点击升级可以看到,最先触发的是集训升级的前置检查功能前置检查功能会帮检查集群的各项升级隐患。

完成了集群升级的前置检查工作,并且master已经完成升级,对升级进行一下暂停。可以再通过control命令去查看一下对应的APSO的版本,可以看到Gitversion已经从1.14.8升级到了1.16.9

继续点击升级,设计管控系统会对集群内的所有 Kubernetes 节点进行升级。可以在这里看到节点的升级进度。

为了实现,原地升级,可以看到在 kube-upgrade 这个 name space,下面运行的一些升级的 completed。目前已经有一个 completed 是处于完成状态了,说明已经有一个节点完成升级,可以查看该节点的情况。可以看到已经有一个节点升级到1.16.9

第二个节点的升级任务还在 running中,等待第二个节点升级完成。

进行升级的页面上,实时查看整个升级的进度。可以看到已经完成了整个地区的升级。

目前。正在进行相关资源的一个清理工作。可以看到。Kubectl get ns 证明用的 ns已经被删除掉了,然后来看一下整个node个审计情况。好,可以看到三个node都已经完成了升级。然后整个集群,已经完成了升级工作,整个地区已经成功从1.14.8升级到了1.16.9这样就动手完成了一个 ACK 集群的升级工作

总结起来主要有以下几个步骤,

(1) 在容器服务控制台,点击集群升级

(2) 在升级页面点击升级

(3) 等待前置检查完

(4) 等待升级 master 完成

(5) 等待升级 worker 完成

(6) 集群升级完成

2. 集群升级的状态机

image.png

从一个集群正在运行中,开始升级到升级中,然后可以点击暂停,点击继续升级。从完全升级也可以再升级,暂停的时候取消升级,然后集群也会回到一个运行中的过程。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
298 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
263 89
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
302 9
|
7月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
9月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
895 33
|
9月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
521 19
|
9月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
12月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
9月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
340 0
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
11月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。

推荐镜像

更多