k3s 自动/手动升级方法及相关操作
1. k3s 使用 CRD 升级
参考:https://docs.rancher.cn/docs/k3s/upgrades/automated/_index
适用于自建 k3s 集群,使用 Rancher 的 system-upgrad-controller 来管理手动/自动升级。
总共需要完成两步配置:
- 安装 system-upgrade-controller,会在集群内创建名为 plans.upgrade.cattle.io 的 CRD
- 配置更新计划。这里可以使用自动发现 release 模式,保证实时更新到最新版本,同时也可以创建升级到指定版本的一次性更新计划。
1.1 安装 system-upgrade-controller
联网执行一句话:
1
| kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml
|
更新配置存储在 configmap,默认配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: v1
data:
SYSTEM_UPGRADE_CONTROLLER_DEBUG: "false"
SYSTEM_UPGRADE_CONTROLLER_THREADS: "2"
SYSTEM_UPGRADE_JOB_ACTIVE_DEADLINE_SECONDS: "900"
SYSTEM_UPGRADE_JOB_BACKOFF_LIMIT: "99"
SYSTEM_UPGRADE_JOB_IMAGE_PULL_POLICY: Always
SYSTEM_UPGRADE_JOB_KUBECTL_IMAGE: rancher/kubectl:v1.18.20
SYSTEM_UPGRADE_JOB_PRIVILEGED: "true"
SYSTEM_UPGRADE_JOB_TTL_SECONDS_AFTER_FINISH: "900"
SYSTEM_UPGRADE_PLAN_POLLING_INTERVAL: 15m
kind: ConfigMap
metadata:
name: default-controller-env
namespace: system-upgrade
|
1.2 创建更新计划
按照官方文档说法,推荐使用两份计划,分别对应 server(master) 和 agent(worker) 节点的升级。
按照版本升级配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| # Server plan
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: server-plan
namespace: system-upgrade
spec:
concurrency: 1 # 指定同时升级的节点个数
cordon: true # 升级禁止调度
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/master # 指定 master 节点
operator: In
values:
- "true"
serviceAccountName: system-upgrade
upgrade:
image: rancher/k3s-upgrade
version: v1.22.6+k3s1 # 指定版本,也可替换为下面地址,自动升级到最新的 stable 版本
# channel: https://update.k3s.io/v1-release/channels/stable
---
# Agent plan
# 同名字段意义同上
apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata:
name: agent-plan
namespace: system-upgrade
spec:
concurrency: 1
cordon: true
nodeSelector:
matchExpressions:
- key: node-role.kubernetes.io/master
operator: DoesNotExist
prepare:
args:
- prepare
- server-plan # 这里配置意思是等待 server-plan 计划结束后再执行升级
image: rancher/k3s-upgrade
serviceAccountName: system-upgrade
upgrade:
image: rancher/k3s-upgrade
version: v1.22.6+k3s1
|
查看升级进度:
1
2
| kubectl -n system-upgrade get plans -o yaml
kubectl -n system-upgrade get jobs -o yaml
|
2. k3s 停止并重置节点
由于 k3s 自带的高可用特性,k3s 停止时,POD 会继续运行,如果想要完全剔除 k3s ,可以使用自带的脚本 k3s-killall.sh
,killall 脚本清理容器、k3s 目录和网络组件,同时也删除了 iptables 链和所有相关规则。但是集群数据不会被删除。
3. k3s 全新安装/升级
k3s 覆盖安装也同样会更新旧版本,实现升级目的
默认安装命令:
1
| curl -sfL https://get.k3s.io | sh -
|
国内安装可使用:
1
| curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
|
指定 channel 升级,可选 stable、latest、v1.xx,例如 latest
1
| curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
|