某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前言

  • 学习建议

  • Docker命令大全
  • Kubernetes教程

    • Kubernetes(K8s)学习教程 - 前言
    • 第1章-Kubernetes集群部署
    • 第2章-便捷性设置以及集群插件的安装
    • 第3章-基础操作
    • 第4章-集群升级
      • 1. 升级说明
        • 1.1 为什么要升级 Kubernetes?
        • 1.2 Kubernetes的升级限制和顺序
        • 不能跨版本升级
        • 升级顺序
      • 2. 集群升级
        • 2.1 升级 master
        • 升级 master 的 kubeadm
        • 升级 master 的集群组件
        • 升级 master 的 kubectl和kubelet
        • 2.2 升级 worker
        • 升级 worker 的 kubeadm
        • 升级 worker 的集群组件
        • 升级 worker 的 kubectl和kubelet
        • 2.3 升级另一台worker
      • 3. 小结
    • 第5章-Pod
    • 第6章-Pod生命周期与资源限制
    • 第7章-Pod与节点
    • 第8章-控制器Deployment
    • 第9章-Deployment镜像变更和滚动更新
    • 第10章-其他控制器-以及标签表达式
    • 第11章-控制器与节点驱逐
    • 暂缓更新
    • 练习题

    • 常用命令及yaml配置

  • CKS教程

  • 云原生安全
  • Kubernetes教程
carsaid
2023-10-09
目录

第4章-集群升级

原创

本博客原创文章,转载请注明出处

- name: 原创
  desc: 本博客原创文章,转载请注明出处
  bgColor: '#F0DFB1'
  textColor: '#1078E6'
1
2
3
4

# 第4章-集群升级

本章要点
了解 Kubernetes 的升级步骤
实施 Kubernetes 的升级

# 11. 升级说明

# 1.11.1 为什么要升级 Kubernetes?

每个 Kubernetes 版本的生命周期很短,在官方发布的发行版本历史 (opens new window)以及版本排期表 (opens new window)中可以看到,现在 Kubernetes 每年都会更新迭代,每个新版本的使用寿命只有 1.5 年左右。

  • 在今年 6 月份的时候,最新的 Kubernetes 版本是 1.27.3
  • 现在是 10 月份,最新版本是 1.27.6 和 1.28.2
  • 甚至 1.29 都快出来了

为了获得官方对 Kubernetes 的支持(例如安全补丁),我们每隔一段时间就需要更新 Kubernetes,以提高集群的安全性,并获取高版本中的新特性。

# 1.21.2 Kubernetes的升级限制和顺序

Kubernetes 的升级并不是随意的,需要遵循一些规则。

# 1.2.1不能跨版本升级

Kubernetes 不能跨版本升级,当前版本只能升级到下一个版本。

  • 例如 v1.26 版本可以升级到 v1.27
  • 但是 v1.26 版本不能升级到 v1.28

也就是说,如果你想将 1.26 升级到 1.28,则你需要进行两次升级,第一次先升级到 1.27,第二次再升级到 1.28。

# 1.2.2升级顺序

Kubernetes 需要按顺序升级。

节点的升级顺序:

  1. 先升级 master
  2. 如果有多台 master,则需要一台一台地升级
  3. 最后才升级 worker

软件的升级顺序:

  1. 先升级 kubeadm。前面提到过,kubeadm用于部署和管理整个集群,所以要优先升级它
  2. 升级集群组件
  3. 升级 kubectl 和 kubelet

具体的升级过程:

  1. 升级 master 上的 kubeadm
  2. 升级 master 上的集群组件
  3. 升级 master 上的 kubectl 和 kubelet
  4. 升级 worker 上的 kubeadm
  5. 升级 worker 上的集群组件
  6. 升级 worker 上的 kubectl 和 kubeclet

# 22. 集群升级

在升级之前,先查看一下 master 当前的版本:

kubectl get nodes
# 或
kubectl version --short
1
2
3

master 在集群中显示的版本为 v1.26.5,软件版本也为 v1.26.5。

Not Found Image

# 2.12.1 升级 master

# 2.1.1升级 master 的 kubeadm

此处通过 yum 来升级 kubeadm 软件包。

查看 kubeadm 的版本列表:

yum list kubeadm --showduplicates
1

绿色代表你当前已安装的版本。

Not Found Image

将 kubeadm 升级为 v1.27.6 版本:

yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes
1

确认无误后,输入 “y” 并回车,以确认安装。

Not Found Image

安装完成后,查看 kubeadm 软件的当前版本:

kubeadm version
1

软件更新成功,已经变成了 v1.27.6 版本。但是集群中的版本信息还没有变化,不用担心,这是正常的。

Not Found Image

成功更新 kubeadm 软件之后,我们可以查看 kubernetes 集群的更新计划:

kubeadm upgrade plan
1

从图中可以看到,我们的集群目前处于 v1.26.5 版本,你可以将其更新为 v1.26.9 版本。

此外,上方还有一条提示信息 “remote version is much newer: v1.28.2; falling back to: stable-1.27”。意思是说:发现了最新版本 v1.28.2,但是你首先需要更新为 1.27 版本,才能进一步更新为 v1.28。

Not Found Image

命令行的输出信息很多,继续往下拉,看到了另一个可更新的版本 v1.27.6,这正是我们想要的。

Not Found Image

# 2.1.2升级 master 的集群组件

在更新集群组件之前,需要先将 master 节点设置成维护模式:

kubectl drain www.k10.com --ignore-daemonsets

kubectl get nodes
1
2
3
Not Found Image

确保 master 已经处于维护模式,然后更新集群:

kubeadm upgrade apply v1.27.6
1

确认无误后,输入 “y” 并回车,以确认操作。

Not Found Image

此外,更新集群的同时还会更新 etcd 组件,该组件保存了集群的各种状态信息,例如配置信息、运行信息、网络信息等。

如果你担心 etcd 在更新的过程中发生什么闪失,导致信息丢失,则你可以添加标志符--etcd-upgrade=false以禁止 etcd 组件的更新:

kubeadm upgrade apply v1.27.6 --etcd-upgrade=false
1

集群的更新时间比较长,因为更新的过程中 需要下载镜像文件,具体的时间长短 取决于你的网络速度。在更新集群之前,你也可以执行命令kubeadm config images pull来提前下载镜像文件。

Not Found Image

当你看到 “[upgrade/successful]” 字样的时候,说明升级成功。

Not Found Image

# 2.1.3升级 master 的 kubectl和kubelet

kubeadm 软件和相关集群组件都已经升级完毕,下一步是升级 kubectl 和 kubelet 软件。

Not Found Image

将 kubectl 和 kubelet 升级至 v1.27.6 版本:

yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes
1

确认无误后,输入 “y” 并回车,以确认操作。

Not Found Image

安装完毕后,重载并重启 kubelet 服务:

# 重载并重启服务
systemctl daemon-reload
systemctl restart kubelet

systemctl status kubelet
1
2
3
4
5

此时 kubelet 服务的状态为 “active(running)”。

Not Found Image

取消 master 节点的维护模式:

kubectl uncordon www.k10.com
1

通过kubectl get nodes再次查看集群信息,可以看到 master 节点的版本已经变更为了 v1.27.6。

master 升级成功!

Not Found Image

# 2.22.2 升级 worker

worker 的升级步骤和 master 相同,都是三步:

  • 升级 kubeadm
  • 升级集群组件
  • 升级 kubectl 和 kubelet

只有一点不同,那就是 master 在升级集群组件时的命令是:

# master升级集群组件
kubeadm upgrade apply v1.27.6
1
2

而 worker 升级集群组件时,则需要使用另一个命令:

# worker升级集群组件
kubeadm upgrade node
1
2

master 和 worker 之间除了升级组件的命令不同之外,其余的命令和操作完全一致。

# 2.2.1升级 worker 的 kubeadm

在升级之前,先查看版本列表,确认是否有我们所需要的版本:

yum list kubeadm --showduplicates
1

发现最高的软件版本只有 1.27.2,并没有我们需要的 1.27.6。

Not Found Image

不用慌,可能是 yum 软件列表太旧了,更新一下信息即可:

# 获取有关于 kubeadm 的最新软件包信息
yum update kubeadm

# 更新所有软件包信息,速度可能较慢,不推荐
yum update
1
2
3
4
5

注意!!!这里要输入 “n” 取消更新,因为我们只是要获取版本信息,并不需要更新。

如果你输入了 “y” 则你的 kubeadm 会自动更新为最新的 v1.28.2 版本。

Not Found Image

成功获取版本信息,现在可以看到 1.27.6 版本的 kubeadm 了。

Not Found Image

安装:

yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes
1
Not Found Image

确认下版本:

kubeadm version
1
Not Found Image

# 2.2.2升级 worker 的集群组件

回到 master 节点,将需要升级的 worker 设置成维护模式(升级哪个就维护哪个):

kubectl drain www.k11.com --ignore-daemonsets --delete-emptydir-data
1

成功将该 worker 设置成维护模式。

Not Found Image

回到 worker 主机,更新组件:

kubeadm upgrade node
1

worker 更新组件的速度特别快,快到你差点以为出错了,和 master 的更新速度形成了鲜明对比。

看到 “successfully updated!” 字样说明更新成功。

Not Found Image

# 2.2.3升级 worker 的 kubectl和kubelet

更新 kubectl 和 kubelet:

yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes
1
Not Found Image

更新完毕后,重载和重启 kubelet 服务:

systemctl daemon-reload
systemctl restart kubelet

systemctl status kubelet
1
2
3
4

服务状态为 “active(running)” 说明正常。

Not Found Image

回到 master 主机,取消 worker 节点的维护模式。

kubectl uncordon www.k11.com
1
Not Found Image

# 2.32.3 升级另一台worker

快速过一遍。

# 更新kubeadm
yum install kubeadm-1.27.6-0 --disableexcludes=kubernetes -y
1
2
Not Found Image
# 查看版本
kubeadm version
1
2
Not Found Image
# 在master上,将worker设置成维护模式
kubectl drain www.k12.com --force --ignore-daemonsets --delete-emptydir-data
1
2
Not Found Image
# 更新组件
kubeadm upgrade node
1
2
Not Found Image
# 更新kubectl和kubelet
yum install kubectl-1.27.6-0 kubelet-1.27.6-0 --disableexcludes=kubernetes -y
1
2
Not Found Image
# 重载和重启服务
systemctl daemon-reload
systemctl restart kubelet

systemctl status kubelet
1
2
3
4
5
Not Found Image
# 在master上,取消worker的维护模式
kubectl uncordon www.k12.com
1
2
Not Found Image

至此,三个节点都已完成升级。

# 33. 小结

你应该学会如何升级 kubernetes 集群了吧?

我为你准备了一些练习(练习题-2),去试试吧!

编辑 (opens new window)
第3章-基础操作
第5章-Pod

← 第3章-基础操作 第5章-Pod→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式