乐趣区

关于kubernetes:Rancher-系列文章K3S-集群升级

概述

书接上回:《Rancher 系列文章 -Rancher 降级》, 咱们提到:将 Rancher 用 Helm 从 v2.6.3 降级到 v2.6.4).

接下来开始进行 K3S 集群的降级:将 K3S 集群从 v1.21.7+k3s1 降级到 v1.22.5+k3s2

相干信息

本次降级的 K3S 集群的根本信息为:

  1. 天翼云上用 4 台机器装置的一个 1 master(及 etcd) 3 node 的 K3S 集群
  2. 其实 … 这个 K3S 集群应用 k3s-ansible 脚本批量装置的。..
  3. K3S v1.21.7+k3s1
  4. Rancher 刚降级到 v2.6.4, 验证没啥大问题
  5. K3S 集群有用到 Traefik 治理 Ingress
  6. K3S 集群应用嵌入式 etcd 数据存储

降级形式评估

官网 提供了以下几种降级形式:

  • 根底降级

    • 应用装置脚本降级 K3s
    • 应用二进制文件手动降级 K3s
  • 主动降级

    • 应用 Rancher 来降级 K3s 集群
    • 应用 system-upgrad-controller 来治理 K3s 集群降级

我大略都过了一下,先说 Pass 的起因:

应用 Rancher 来降级 K3s 集群 – 🙅‍♂️

具体的文档在这里:降级 Kubernetes 版本 | Rancher | Rancher 文档

原文如下:

📚️ Quote:

先决条件:

  • 以下选项仅实用于 RKE 集群 和 导入的 K3s Kubernetes 集群。
  • 降级 Kubernetes 之前,请 备份您的集群。
  1. 全局 视图中,找到要降级 Kubernetes 版本的集群。抉择 省略号 > 编辑
  2. 点开 集群选项
  3. Kubernetes 版本 下拉菜单中,抉择要用于集群的 Kubernetes 版本。
  4. 单击 保留

后果: 集群开始降级 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: Addon status 有没有异样的

🎉🎉🎉
然而,验证过程中也发现几个问题,上面一一形容及解决:

  • Rancher 系列文章 -K3s Traefik MiddleWare 报错 -Failed to create middleware keys

📚️参考文档

  • Support matrix – Rancher v2.6.4
  • 降级介绍 | Rancher 文档
  • 主动降级 | Rancher 文档
  • 备份和复原 | Rancher 文档
退出移动版