把一个集群从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 版本升级之路的更多相关文章

  1. Kubernetes学习之路目录

    Kubernetes基础篇 环境说明 版本说明 系统环境 Centos 7.2 Kubernetes版本 v1.11.2 Docker版本 v18.09 Kubernetes学习之路(一)之概念和架构 ...

  2. Kubernetes学习之路(二十五)之Helm程序包管理器

    目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...

  3. Kubernetes学习之路(六)之创建K8S应用

    一.Deployment的概念 K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通. POD,是K8S中的一个逻辑概念,K8S管理的是POD,一 ...

  4. Kubernetes学习之路(九)之kubernetes命令式快速创建应用

    1.使用命令kubectl run创建应用 语法: kubectl run NAME --image=image [--env="key=value"] [--port=port] ...

  5. Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment

    一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...

  6. Kubernetes学习之路(十五)之Ingress和Ingress Controller

    目录 一.什么是Ingress? 1.Pod 漂移问题 2.端口管理问题 3.域名分配及动态更新问题 二.如何创建Ingress资源 三.Ingress资源类型 1.单Service资源型Ingres ...

  7. Kubernetes学习之路(十七)之statefulset控制器

    目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...

  8. Kubernetes学习之路(26)之kubeasz+ansible部署集群

    目录 1.环境说明 2.准备工作 3.分步骤安装 3.1.创建证书和安装准备 3.2.安装etcd集群 3.3.安装docker 3.4.安装master节点 3.5.安装node节点 3.6.部署集 ...

  9. Kubernetes学习之路(二十四)之Prometheus监控

    目录 1.Prometheus概述 2.Prometheus部署 2.1.创建名称空间prom 2.2.部署node_exporter 2.3.部署prometheus-server 2.4.部署ku ...

随机推荐

  1. 螣龙安科反入侵:EDR的缺点

    EDR解决方案提供了比传统终结点安全解决方案更高的功能,并且可以增加人员数量,但是这些功能都有不少的缺点. EDR功能付出巨大代价 在过去四年中,虽然产品成本平均每年下降约35%,但即使到今天,产品的 ...

  2. 1_day01_操作系统安装

    操作系统安装 内容介绍 1.制作U盘启动器 2.备份驱动 3.安装操作系统 4.驱动更新 5.依赖库检测 6.系统漏洞修复 7.系统布局优化 一.制作U盘启动器 1.1 下载老毛桃 下载老毛桃pe工具 ...

  3. 【新人福利】使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https://t.csdnimg.cn/PVqS

    [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:CSDN开发助手 [新人福利]使用CSDN 官方插件,赠永久免站内广告特权 >>电脑端访问:https ...

  4. sqlDeveloper工具快速入门

    场景 我们在连接oracle数据库的时候 常用方式一般有以下三种: pl/sql deceloper navicat sqlDeveloper 其中, pl/sql developer是最经典的,也是 ...

  5. FileFilter过滤器的原理和使用和FileNameFilter过滤器的使用

    FileFilter过滤器的原理和使用 package com.yang.Test.FileStudy; import java.io.File; /** * 在File类中有两个和ListFiles ...

  6. Docker搭建STF私有移动测试云平台

    一. STF介绍 Smartphone Test Farm(简称STF)是一个web应用程序,主要用于从指定的浏览器中远程调试智能手机.智能手表等,可远程调试超过160多台设备.STF可以便捷的管理移 ...

  7. Jittered采样类定义和测试

    抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧. 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_H ...

  8. DolphinScheduler 1.2.0 源码解析之 MasterServer

    这一篇主要讲解的是dolphinscheduler 1.2.0 的master部分的源码,从主类MasterServer开始,从启动到运行,master主要做了以下三件事情 Zookeeper 节点初 ...

  9. RISC-CPU设计和 FPGA 实现

    摸鱼的时候找到一份单周期和多周期的riscv的fpga实现,还是挺符合我的预期的 知乎专栏地址:https://www.zhihu.com/column/c_1530950608688910336

  10. Blazor和Vue对比学习(知识点杂锦3.04):Blazor中C#和JS互操作(超长文)

    C#和JS互操作的基本语法是比较简单的,但小知识点特别多,同时,受应用加载顺序.组件生命周期以及参数类型的影响,会有比较多坑,需要耐心的学习.在C#中调用JS的场景会比较多,特别是在WASM模式下,由 ...