Kubernetes 版本升级之路
把一个集群从1.22版升级到1.23版。
前提条件
- 确保备份所有重要组件,例如存储在数据库中的应用状态。Kubernetes 升级不涉及正常的工作负载,只涉及与 Kubernetes 相关的组件,但备份始终是最佳实践。
- 必须禁用Swap交换
步骤
master节点
1.清空主节点
驱逐/删除主节点的所有 Pod(镜像 Pod 除外)(不能通过 API 服务器删除),以便能够执行升级。如果有 daemon set-managed pods,drain 不会在没有 --ignore-daemonsets
的情况下继续进行,因为这些 pods 将立即被 daemon set 控制器替换,它会忽略不可调度的标记。
#kubectl drain master --ignore-daemonsets
node/master already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-lfplf, kube-system/weave-net-fv7sn
evicting pod kube-system/coredns-64897985d-pl2v9
evicting pod kube-system/coredns-64897985d-65g5p
pod/coredns-64897985d-65g5p evicted
pod/coredns-64897985d-pl2v9 evicted
node/master drained
Draining 成功后,您可以检查节点的状态以确保它是SchedulingDisabled,这意味着该节点上不能调度任何 Pod。
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready, SchedulingDisabled control-plane,master v1.22.2
worker Ready <none> v1.22.2
2.更新系统中的包管理器,根据您的操作系统,它可能会有所不同。
#apt-get update
3.在包管理器中搜索可用的 kubeadm 包,并使用 grep 过滤结果以获得您需要的版本。在我们的例子中是 1.23 版本。
#apt-cache show kubeadm | grep 1.23
输出应类似于以下内容:
Version: 1.23.1–00
Filename: pool/kubeadm_1.23.1–00_amd64_6bc970cf9bf5349ba18526f77c6ac16caf2a52b6a7b0e40753541ebef52ad99f.deb
Version: 1.23.0–00
Filename: pool/kubeadm_1.23.0–00_amd64_36016a07eb5c2bfae656cfee1b3848930757d201b474fea1cce1ecd507b94f0b.deb
4.保留 kubectl 和 kubelet包,防止它们被自动安装、升级或删除。这是一个预防措施。
#apt-mark hold kubectl kubelet
5.取消保留 kubeadm 包,升级后再次 hold。
#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1–00
#apt-mark hold kubeadm
6.检查 kubeadm版本以确保它已升级。
#kubeadm version
7.查看kubeadm升级计划,看看还有哪些组件需要升级。
#kubeadm upgrade plan
8.应用计划,你应该可以看到升级成功的消息
#kubeadm upgrade apply v1.23.1
9.取消保留 kubectl 和 kubelet包,升级它们然后再次持有它们。
请注意,如果您要复制此内容,您可能需要删除“-”并在终端中再次输入,因为它可能被视为拼写错误。
#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark hold kubelet kubectl
10.重新启动 kubelet 并检查是否正常运行。
#systemctl restart kubelet
#systemctl status kubelet
11.运行 kubeadm upgrade plan check以确保一切都已升级。
#kubeadm upgrade plan
12.检查节点状态和主节点的新版本。
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready,SchedulingDisabled control-plane,master v1.23.1
worker Ready <none> v1.22.2
13.解封主节点,使其再次可调度
#kubectl uncordon master
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready <none> v1.22.2
这里我们完成了主节点,让我们移动到工作节点
worker 节点
我们将重复使用以下相同的命令
清空主节点
您可能需要使用“force”参数来强制驱逐一些 pod。
#kubectl drain worker --ignore-daemonsets --force
node/cks-worker drained
更新包管理器。取消保留,安装 kubeadm。
#apt-get update
#apt-mark unhold kubeadm
#apt-get install kubeadm=1.23.1-00
#apt-mark hold kubeadm
取消保留,安装,然后保留 kubectl 和 kubeadm。
#apt-mark unhold kubelet kubectl
#apt-get install kubelet=1.23.1-00 kubectl=1.23.1-00
#apt-mark hold kubelet kubectl
重启kubelet进程并检查其状态
#systemctl restart kubelet
#systemctl status kubelet
检查节点状态
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready,SchedulingDisabled <none> v1.23.1
解封worker节点,使其再次可调度
#kubectl uncordon worker
#kubectl get nodes
NAME STATUS ROLES VERSION
master Ready control-plane,master v1.23.1
worker Ready <none> v1.23.1
至此升级成功!!
Kubernetes 版本升级之路的更多相关文章
- Kubernetes学习之路目录
Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...
- Kubernetes学习之路(二十五)之Helm程序包管理器
目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...
- Kubernetes学习之路(六)之创建K8S应用
一.Deployment的概念 K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通. POD,是K8S中的一个逻辑概念,K8S管理的是POD,一 ...
- Kubernetes学习之路(九)之kubernetes命令式快速创建应用
1.使用命令kubectl run创建应用 语法: kubectl run NAME --image=image [--env="key=value"] [--port=port] ...
- Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment
一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...
- Kubernetes学习之路(十五)之Ingress和Ingress Controller
目录 一.什么是Ingress? 1.Pod 漂移问题 2.端口管理问题 3.域名分配及动态更新问题 二.如何创建Ingress资源 三.Ingress资源类型 1.单Service资源型Ingres ...
- Kubernetes学习之路(十七)之statefulset控制器
目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...
- Kubernetes学习之路(26)之kubeasz+ansible部署集群
目录 1.环境说明 2.准备工作 3.分步骤安装 3.1.创建证书和安装准备 3.2.安装etcd集群 3.3.安装docker 3.4.安装master节点 3.5.安装node节点 3.6.部署集 ...
- Kubernetes学习之路(二十四)之Prometheus监控
目录 1.Prometheus概述 2.Prometheus部署 2.1.创建名称空间prom 2.2.部署node_exporter 2.3.部署prometheus-server 2.4.部署ku ...
随机推荐
- 螣龙安科反入侵:EDR的缺点
EDR解决方案提供了比传统终结点安全解决方案更高的功能,并且可以增加人员数量,但是这些功能都有不少的缺点. EDR功能付出巨大代价 在过去四年中,虽然产品成本平均每年下降约35%,但即使到今天,产品的 ...
- 1_day01_操作系统安装
操作系统安装 内容介绍 1.制作U盘启动器 2.备份驱动 3.安装操作系统 4.驱动更新 5.依赖库检测 6.系统漏洞修复 7.系统布局优化 一.制作U盘启动器 1.1 下载老毛桃 下载老毛桃pe工具 ...
- 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS
[新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...
- sqlDeveloper工具快速入门
场景 我们在连接oracle数据库的时候 常用方式一般有以下三种: pl/sql deceloper navicat sqlDeveloper 其中, pl/sql developer是最经典的,也是 ...
- FileFilter过滤器的原理和使用和FileNameFilter过滤器的使用
FileFilter过滤器的原理和使用 package com.yang.Test.FileStudy; import java.io.File; /** * 在File类中有两个和ListFiles ...
- Docker搭建STF私有移动测试云平台
一. STF介绍 Smartphone Test Farm(简称STF)是一个web应用程序,主要用于从指定的浏览器中远程调试智能手机.智能手表等,可远程调试超过160多台设备.STF可以便捷的管理移 ...
- Jittered采样类定义和测试
抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...
- DolphinScheduler 1.2.0 源码解析之 MasterServer
这一篇主要讲解的是dolphinscheduler 1.2.0 的master部分的源码,从主类MasterServer开始,从启动到运行,master主要做了以下三件事情 Zookeeper 节点初 ...
- RISC-CPU设计和 FPGA 实现
摸鱼的时候找到一份单周期和多周期的riscv的fpga实现,还是挺符合我的预期的 知乎专栏地址:https://www.zhihu.com/column/c_1530950608688910336
- Blazor和Vue对比学习(知识点杂锦3.04):Blazor中C#和JS互操作(超长文)
C#和JS互操作的基本语法是比较简单的,但小知识点特别多,同时,受应用加载顺序.组件生命周期以及参数类型的影响,会有比较多坑,需要耐心的学习.在C#中调用JS的场景会比较多,特别是在WASM模式下,由 ...