K3s 自動(dòng)升級

2022-08-23 09:57 更新

自動(dòng)升級

注意: 此功能從v1.17.4+k3s1開始提供支持。

概述

你可以使用 Rancher 的 system-upgrad-controller 來管理 K3s 集群升級。這是一種 Kubernetes 原生的集群升級方法。它利用自定義資源定義(CRD)、計(jì)劃和控制器,根據(jù)配置的計(jì)劃安排升級。

計(jì)劃定義了升級策略和要求。本文檔將提供適合升級 K3s 集群的默認(rèn)計(jì)劃。有關(guān)更多高級計(jì)劃配置選項(xiàng),請查閱CRD

控制器通過監(jiān)控計(jì)劃和選擇要在其上運(yùn)行升級 job 的節(jié)點(diǎn)來調(diào)度升級。計(jì)劃通過標(biāo)簽選擇器定義哪些節(jié)點(diǎn)應(yīng)該升級。當(dāng)一個(gè) job 成功運(yùn)行完成后,控制器會(huì)給它運(yùn)行的節(jié)點(diǎn)打上相應(yīng)的標(biāo)簽。

注意: 啟動(dòng)的升級 job 必須是高權(quán)限的。它的配置如下:

  • 主機(jī) ?IPC?, ?NET ?和 ?PID ?命名空間
  • ?CAP_SYS_BOOT ?能力
  • 掛載在?/host?的主機(jī)根目錄,具有讀寫權(quán)限

關(guān)于 system-upgrade-controller 的設(shè)計(jì)和架構(gòu)或其與 K3s 集成的更多細(xì)節(jié),請參見以下 Git 倉庫:

要以這種方式進(jìn)行自動(dòng)升級,你必須執(zhí)行以下操作:

  1. 將 system-upgrade-controller 安裝到您的集群中
  2. 配置計(jì)劃

注意:如果正在使用 Rancher 管理k3s的話,用戶應(yīng)該使用 Rancher 來升級他們的 K3s 集群。
  • 如果你選擇使用 Rancher 來升級,已經(jīng)為你解決了下面的步驟。
  • 如果你選擇不使用 Rancher 來升級,你必須使用下面的步驟來進(jìn)行升級。

安裝 system-upgrade-controller

System-upgrade-controller 可以作為 deployment 安裝到您的集群中。Deployment 需要一個(gè) service-account、clusterRoleBinding 和一個(gè) configmap。要安裝這些組件,請運(yùn)行以下命令:

kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml

控制器可以通過前面提到的 configmap 進(jìn)行配置和定制,但控制器必須重新部署才能應(yīng)用更改。

配置計(jì)劃

建議您最少創(chuàng)建兩個(gè)計(jì)劃:升級 server(master)節(jié)點(diǎn)的計(jì)劃和升級 agent(worker)節(jié)點(diǎn)的計(jì)劃。根據(jù)需要,您可以創(chuàng)建其他計(jì)劃來控制跨節(jié)點(diǎn)的滾動(dòng)升級。以下兩個(gè)示例計(jì)劃將把您的集群升級到 K3s v1.17.4+k3s1。創(chuàng)建計(jì)劃后,控制器將接收這些計(jì)劃并開始升級您的集群。

# 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
      operator: In
      values:
      - "true"
  serviceAccountName: system-upgrade
  upgrade:
    image: rancher/k3s-upgrade
  version: v1.17.4+k3s1
---
# 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
    image: rancher/k3s-upgrade
  serviceAccountName: system-upgrade
  upgrade:
    image: rancher/k3s-upgrade
  version: v1.17.4+k3s1

關(guān)于這些計(jì)劃,有幾個(gè)重要的事情需要提醒:

首先,必須在部署控制器的同一命名空間中創(chuàng)建計(jì)劃。

其次,?concurrency?字段表示可以同時(shí)升級多少個(gè)節(jié)點(diǎn)。

第三,?server-plan?通過指定一個(gè)標(biāo)簽選擇器來選擇帶有?node-role.kubernetes.io/master?標(biāo)簽的節(jié)點(diǎn),從而鎖定 server 節(jié)點(diǎn)。?agent-plan?通過指定一個(gè)標(biāo)簽選擇器來選擇沒有該標(biāo)簽的節(jié)點(diǎn),以 agent 節(jié)點(diǎn)為目標(biāo)。

第四,?agent-plan?中的 ?prepare ?步驟會(huì)使該計(jì)劃等待?server-plan?完成后再執(zhí)行升級 jobs。

第五,兩個(gè)計(jì)劃的?version?字段都設(shè)置為 v1.17.4+k3s1。或者,你可以省略 ?version ?字段,將 ?channel ?字段設(shè)置為解析到 K3s 版本的 URL。這將導(dǎo)致控制器監(jiān)控該 URL,并在它解析到新版本時(shí)隨時(shí)升級集群。因此,你可以用下面的 channel 配置你的計(jì)劃,以確保你的集群總是自動(dòng)升級到 K3s 的最新穩(wěn)定版本。

apiVersion: upgrade.cattle.io/v1
kind: Plan
...
spec:
  ...
  channel: https://update.k3s.io/v1-release/channels/stable

如上所述,一旦控制器檢測到計(jì)劃已創(chuàng)建,升級就會(huì)立即開始。更新計(jì)劃將使控制器重新評估計(jì)劃并確定是否需要再次升級。

您可以通過 kubectl 查看 plans 和 jobs 來監(jiān)控升級的進(jìn)度:

kubectl -n system-upgrade get plans -o yaml
kubectl -n system-upgrade get jobs -o yaml


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)