Rancher 系列文章-K3S 集群升级
概述
书接上回:《Rancher 系列文章-Rancher 升级》, 我们提到:将 Rancher 用 Helm 从 v2.6.3 升级到 v2.6.4.
接下来开始进行 K3S 集群的升级:将 K3S 集群从 v1.21.7+k3s1 升级到 v1.22.5+k3s2
相关信息
本次升级的 K3S 集群的基本信息为:
- 天翼云上用 4 台机器安装的一个 1 master(及 etcd) 3 node 的 K3S 集群
- 其实... 这个 K3S 集群使用 k3s-ansible 脚本批量安装的。..
- K3S v1.21.7+k3s1
- Rancher 刚升级到 v2.6.4, 验证没啥大问题
- K3S 集群有用到 Traefik 管理 Ingress
- K3S 集群使用嵌入式 etcd 数据存储
升级方式评估
官方 提供了以下几种升级方式:
- 基础升级
- 使用安装脚本升级 K3s
- 使用二进制文件手动升级 K3s
- 自动升级
- 使用 Rancher 来升级 K3s 集群
- 使用 system-upgrad-controller 来管理 K3s 集群升级
我大概都过了一下,先说 Pass 的原因:
使用 Rancher 来升级 K3s 集群 - ♂️
详细的文档在这里:升级 Kubernetes 版本 | Rancher | Rancher 文档
原文如下:
️ Quote:
先决条件:
- 以下选项仅适用于 RKE 集群 和 导入的 K3s Kubernetes 集群。
- 升级 Kubernetes 之前,请 备份您的集群。
- 从全局视图中,找到要升级 Kubernetes 版本的集群。选择 省略号 > 编辑。
- 点开集群选项。
- 从 Kubernetes 版本下拉菜单中,选择要用于集群的 Kubernetes 版本。
- 单击保存。
结果: 集群开始升级 Kubernetes 版本。
但是,但是!我在我的 Rancher v2.6.4 上始终没找到 省略号 > 编辑 在哪里,
我猜可能是因为我看的中文文档只有 Rancher v2.5 的,而 Rancher v2.6 UI 又经过了很大的调整,所以找不到了。
另外,这种 Rancher 的 local 集群,而且还是 单 master 节点,我个人评估是无法实现自动升级的。
PAAS
使用 system-upgrad-controller 来管理 K3s 集群升级 - ♂️
详细文档见这里:自动升级 | Rancher 文档
我试了一下,结果就是在我创建了 server-plan 后,提示我 server-plan 的 POD 无法进行调度,因为所有节点都不满足调度的条件。
我大概看了一下,调度的条件是要求在 master 节点上,同时我只有 1 个 master, 其在升级前已经设置为了 cordon: true, 导致冲突,升级无法进行。
也正是因为这个,所以我判断:
- 单 master 节点,是无法实现自动升级的, 或者即使可以进行升级, 风险也较大
PAAS
使用二进制文件手动升级 K3s - ♂️
这个还行,步骤也很清晰明了, 也正好可以在 k3s-ansible 脚本增加 upgrade.yml playbook 来实现。
但是... 近期没时间,先记下这个事吧,后面有时间再增加这个功能。
使用安装脚本升级 K3s - ️
虽然我不是用安装脚本安装的 K3s, 但是 k3s-ansible 脚本的逻辑基本上和官方的安装脚本是一样的,只是用的是 ansible 而已。个人评估后认为:只要确保使用相同的标志重新运行安装脚本即可从旧版本升级 K3s.
就决定是你啦 ️
升级步骤
〇、信息收集
registries.yaml
有配置 registries.yaml, 如下:
mirrors:
docker.io:
endpoint:
- "https://registry.cn-hangzhou.aliyuncs.com"
- "https://docker.mirrors.ustc.edu.cn"
configs:
'docker.io':
auth:
username: caseycui
password: <my-password>
'quay.io':
auth:
username: east4ming
password: <my-password>
但是位置没有动,还是 /etc/rancher/k3s/registries.yaml. 所以不会因此导致有额外的升级步骤。
K3s Server 和 Agent 其他配置
---
k3s_version: v1.21.7+k3s1
ansible_user: caseycui
systemd_dir: /etc/systemd/system
master_ip: "{{ hostvars[groups['master'][0]]['ansible_host'] | default(groups['master'][0]) }}"
extra_server_args: '--write-kubeconfig-mode "644" --cluster-init --disable-cloud-controller --tls-san <my-public-ip> --kube-apiserver-arg "feature-gates=EphemeralContainers=true" --kube-scheduler-arg "feature-gates=EphemeralContainers=true" --kube-apiserver-arg=default-watch-cache-size=1000 --kube-apiserver-arg=delete-collection-workers=10 --kube-apiserver-arg=event-ttl=30m --kube-apiserver-arg=max-mutating-requests-inflight=800 --kube-apiserver-arg=max-requests-inflight=1600 --etcd-expose-metrics=true'
extra_agent_args: ''
分析上面配置,就是多了一些 server 的安装配置参数而已,使用官方安装脚本时注意确保使用相同的标志重新运行安装脚本即可。
一、备份
使用 k3s etcd-snapshot 进行备份,如下:
# k3s etcd-snapshot
INFO[2022-05-05T17:10:01.884597095+08:00] Managed etcd cluster bootstrap already complete and initialized
W0505 17:10:02.477542 2431147 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0505 17:10:02.923819 2431147 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W0505 17:10:03.398185 2431147 warnings.go:70] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
INFO[2022-05-05T17:10:03.687171696+08:00] Saving etcd snapshot to /var/lib/rancher/k3s/server/db/snapshots/on-demand-4azlmvglqkx7migt-0002-1651741803
{"level":"info","msg":"created temporary db file","path":"/var/lib/rancher/k3s/server/db/snapshots/on-demand-4azlmvglqkx7migt-0002-1651741803.part"}
{"level":"info","ts":"2022-05-05T17:10:03.693+0800","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
{"level":"info","msg":"fetching snapshot","endpoint":"https://127.0.0.1:2379"}
{"level":"info","ts":"2022-05-05T17:10:14.841+0800","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
{"level":"info","msg":"fetched snapshot","endpoint":"https://127.0.0.1:2379","size":"327 MB","took":"11.182733612s"}
{"level":"info","msg":"saved","path":"/var/lib/rancher/k3s/server/db/snapshots/on-demand-4azlmvglqkx7migt-0002-1651741803"}
INFO[2022-05-05T17:10:14.879646814+08:00] Saving current etcd snapshot set to k3s-etcd-snapshots ConfigMap
Notes:
也可以增加更多的参数以将数据备份到 s3 中。
之所以这次没选择,是因为集群的互联网带宽太小,备份到 s3 频繁中断所以放弃。
备份结果位于:/var/lib/rancher/k3s/server/db/snapshots/, 如下图:

二、k3s-killall.sh
为了保证升级成功率,且当前 K3s 集群主要用于测试和 Demo, 完全可以停机,所以使用 k3s-killall.sh 停止对应 node 后,再进行升级。
升级对应 node 前先执行如下命令:
/usr/local/bin/k3s-killall.sh
三、使用安装脚本升级 server
Notes:
要从旧版本升级 K3s,你可以使用相同的标志重新运行安装脚本
执行如下命令进行升级:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_VERSION=v1.22.5+k3s2 INSTALL_K3S_MIRROR=cn K3S_KUBECONFIG_MODE=644 sh -s - --cluster-init --disable-cloud-controller --tls-san <my-public-ip> --kube-apiserver-arg "feature-gates=EphemeralContainers=true" --kube-scheduler-arg "feature-gates=EphemeralContainers=true" --kube-apiserver-arg default-watch-cache-size=1000 --kube-apiserver-arg delete-collection-workers=10 --kube-apiserver-arg event-ttl=30m --kube-apiserver-arg max-mutating-requests-inflight=800 --kube-apiserver-arg max-requests-inflight=1600 --etcd-expose-metrics true
说明如下:
INSTALL_K3S_VERSION=v1.22.5+k3s2升级的目标版本K3S_KUBECONFIG_MODE=644 ... --etcd-expose-metrics true都是和之前的安装标志保持一致
升级成功,日志如下:
[INFO] Using v1.22.5+k3s2 as release
[INFO] Downloading hash https://rancher-mirror.rancher.cn/k3s/v1.22.5-k3s2/sha256sum-amd64.txt
[INFO] Downloading binary https://rancher-mirror.rancher.cn/k3s/v1.22.5-k3s2/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping /usr/local/bin/kubectl symlink to k3s, already exists
[INFO] Skipping /usr/local/bin/crictl symlink to k3s, already exists
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, already exists
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
四、使用安装脚本升级 Agent
Notes:
要从旧版本升级 K3s,你可以使用相同的标志重新运行安装脚本
执行如下命令进行升级:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_VERSION=v1.22.5+k3s2 INSTALL_K3S_MIRROR=cn K3S_URL=https://<my-master-ip>:6443 K3S_TOKEN=<my-token> sh -s -
说明如下:
- 其他和 server 升级类似,主要就是版本和相同的标志
K3S_URL=https://<my-master-ip>:6443 K3S_TOKEN=<my-token>这是作为 agent 安装需要的参数K3S_TOKEN位于:/var/lib/rancher/k3s/server/node-token, 该 token 升级前后没有发生变化
五、验证
验证可以通过一些 kubectl 命令,或图形化界面 Lens 或 K9S 或 Rancher 进行验证。
粗略看这些地方:
- Events: 有没有 Warning
- Node 状态:有没有异常的
- Pod 状态:有没有异常的
- Jobs 状态:有没有失败的
- Ingress 状态:有没有访问异常的
- PVC 状态:有没有非
Bound状态的 kind: Addonstatus 有没有异常的
但是,验证过程中也发现几个问题,下面一一描述及解决:
️参考文档
Rancher 系列文章-K3S 集群升级的更多相关文章
- Rancher 系列文章-K3s Traefik MiddleWare 报错-Failed to create middleware keys
概述 书接上回:<Rancher 系列文章-K3S 集群升级>, 我们提到:通过一键脚本升级 K3S 集群有报错. 接下来开始进行 Traefik 报错的分析和修复, 问题是: 所有 Tr ...
- 仅需5步,轻松升级K3s集群!
Rancher 2.4是Rancher目前最新的版本,在这一版本中你可以通过Rancher UI对K3s集群进行升级管理. K3s是一个轻量级Kubernetes发行版,借助它你可以几分钟之内设置你的 ...
- K3S系列文章-使用AutoK3s在腾讯云上安装高可用K3S集群
开篇 <K3s 系列文章> <Rancher 系列文章> 方案 在腾讯云上安装 K3S 后续会在这套 K3S 集群上安装 Rancher 方案目标 高可用 3 台master ...
- Rancher系列文章-Rancher v2.6使用脚本实现导入集群
概述 最近在玩 Rancher, 先从最基本的功能玩起, 目前有几个已经搭建好的 K8S 集群, 需要批量导入, 发现官网已经有批量导入的文档了. 根据 Rancher v2.6 进行验证微调后总结经 ...
- 1款开源工具,实现自动化升级K3S集群!
即便你的集群能够平稳运行,Kubernetes升级依旧是一项艰难的任务.由于每3个月Kubernetes会发布一个新版本,所以升级是十分必要的.如果一年内你不升级你的Kubernetes集群,你就会落 ...
- Rancher 系列文章-Rancher 升级
概述 之前在 天翼云上用 4 台机器安装了一个 1 master(及 etcd) 3 node 的 K3S 集群,并在其上使用 Helm 安装了 Rancher 2.6.3 版本. 前几天发现 Ran ...
- 多云搭建 K3S 集群
作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211119132529/ 相关话题:https://ww ...
- 不同云服务器下,ubuntu下开k3s集群
首先先感谢老哥的文章:h构建多云环境下的K3S集群,但是我尝试在centos 8.2上面前面一直执行报错 并且安装glibc 2.17时还会报错make版本太低,所以直接放弃centos,投入ubun ...
- 如何安装一个高可用K3s集群?
作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...
- Rancher 系列文章-Rancher 对接 Active Directory 实战
概述 只要是个公司,基本上都有邮箱和 AD(Active Directory). 在 AD 里,已经有了: 用户 账号密码 邮箱 用户组 组织架构 所以对于一些仅限于本公司一定范围内人员使用的管理或后 ...
随机推荐
- 【Azure Redis Cache】对StackExchange.Redis IOCP错误消息的解读
问题描述 在使用StackExchange.Redis连接到Azure Redis服务时,时常出现StackExchange.Redis.RedisTimeoutException异常. 全部错误消息 ...
- Nebula Graph 1.0 Release Note
Nebula Graph 1.0 发布了.作为一款开源分布式图数据库,Nebula Graph 1.0 版本旨在提供一个安全.高可用.高性能.具有强表达能力的查询语言的图数据库. 基本功能 DDL & ...
- C++//vector存放自定义数据类型
1 //vector存放自定义数据类型 2 3 #include <iostream> 4 #include <string> 5 #include<fstream> ...
- Win10系统winload.efi丢失或损坏怎么办?修复步骤(以联想笔记本为例)
winload.efi是通过UEFI方式引导必要的引导文件,如果系统中丢失或是损坏将导致系统无法启动,如win10在出现这样的问题时会出现蓝屏恢复界面,那么此时该如何解决呢?此例为 GPT+UEFI ...
- Atom安装插件的几种方式
界面安装 打开Atom->File->Settings->Install 输入你想要安装的插件名/Theme名 命令行安装 打开cmd命令行程序 切换到.atom/package目录 ...
- KTL 最新版
K,K线,Candle蜡烛图. T,技术分析,工具平台 L,公式Language语言使用c++14,Lite小巧简易. 项目仓库:https://github.com/bbqz007/KTL Core ...
- x86 常见调用约定(cdecl,fastcall,stdcall) & x86和ARM调用约定的栈帧分析 & ARM ATPCS(ARM-THUMB procedure call standard)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 人人都是艺术家!AI工具Doodly让潦草手绘变精美画作
AI绘画界太卷了,一天一个新东西,不久前刚给大家介绍了可以一秒出图的SDXL-Turbo,今天来聊一聊另一位重磅选手Doodly 有用过Stable Diffuison的小伙伴都知道,想要生成一张高质 ...
- 【Atcoder F - Cumulative Cumulative Cumulative Sum】线段树
要特别注意下精度,long,int范围.WA了几次 import java.util.Scanner; class Main { // static long[] A2 ;//i^2*AI // st ...
- 详解SSL证书系列(5)SSL证书为什么不能好多年签一次呢
上一篇介绍了详解SSL证书系列(4)免费的SSL证书和收费的证书有什么区别,这一篇我们继续了解一下我们申请的SSL证书为什么不能好多年签一次呢,这样不是更省事吗? SSL证书最多只能签发一年,一年到期 ...