跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Edge 文档 / Day 2 操作 / 管理群集

24 管理群集

本章介绍如何在管理群集上执行各种 Day 2 操作。

24.1 RKE2 升级

注意
注意

为了确保能够实现灾难恢复,我们建议备份 RKE2 群集数据。有关如何执行此操作的信息,请查看此页面rke2 二进制文件的默认位置为 /opt/rke2/bin

可以使用 RKE2 安装脚本升级 RKE2 版本,如下所示:

curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vX.Y.Z+rke2rN sh -

安装后请记得重启动 rke2 进程:

# For server nodes:
systemctl restart rke2-server

# For agent nodes:
systemctl restart rke2-agent
重要
重要

为了避免任何不可预见的升级问题,请遵循以下节点升级顺序:

  1. 服务器节点 - 应每次升级一个节点。

  2. 代理节点 - 应在完成所有服务器节点升级之后进行升级。可以同时升级。

有关更多信息,请参见 RKE2 升级文档

24.2 操作系统升级

注意
注意

本节假设您已将系统注册到 https://scc.suse.com

SUSE 定期发布新的 SLE Micro 软件包更新。SLE Micro 使用 transactional-upgrade 来检索更新的软件包版本。

transactional-upgrade 提供应用程序和库来以事务方式更新 Linux 操作系统,也就是说,更新将在后台执行,同时系统可以照常继续运行。只有在重引导系统后,更新才会生效。有关更多信息,请参见 transactional-update GitHub 页面。

要更新系统中的所有软件包,请执行::

transactional-update

由于重引导节点会导致它有一段时间不可用,如果您运行的是多节点群集,可以先封锁清空节点,然后再重引导

要封锁节点,请执行::

kubectl cordon <node>

这会导致将该节点移出默认调度机制,以确保不会错误地将任何 Pod 分配到该节点。

要清空节点,请执行::

kubectl drain <node>

这可以确保将该节点上的所有工作负载转移到其他可用节点。

注意
注意

根据您在节点上运行的工作负载,可能还需要在命令中提供其他标志(例如 --delete-emptydir-data--ignore-daemonsets)。

重引导节点:

sudo reboot

成功重引导后,该节点上的软件包将会更新。唯一剩下的操作就是使用 uncordon 命令将该节点放回到默认调度机制。

解封节点::

kubectl uncordon <node>

注意
注意

如果您要撤销更新,请使用以下 transactional-update 命令执行上述步骤:

transactional-update rollback last

24.3 Helm 升级

注意
注意

本节假设您已在系统上安装 helm。有关 helm 安装说明,请查看此页面

本节介绍如何升级通过 EIB 部署的(第 24.3.1 节 “通过 EIB 部署的 Helm chart”)和不是通过 EIB 部署的(第 24.3.2 节 “不是通过 EIB 部署的 Helm chart”)Helm chart。

24.3.1 通过 EIB 部署的 Helm chart

EIB 使用 RKE2 的清单自动部署功能来部署其映像定义文件(第 3.3 节 “创建映像定义文件”)中定义的 Helm chart。

要升级以这种方式部署的 chart,需要升级 EIB 在初始化器节点上的 /var/lib/rancher/rke2/server/manifests 目录下创建的 chart 清单文件。

注意
注意

为了确保能够实现灾难恢复,我们建议您始终备份 chart 清单文件,并按照 chart 提供的任何灾难恢复相关文档进行操作。

要升级 chart 清单文件,请执行以下步骤:

  1. 找到初始化器节点

    • 对于多节点群集 - 在 EIB 映像定义文件中,应该已经为某个节点指定了 initializer: true 属性。如果未指定此属性,则初始化器节点将是节点列表中的第一个服务器节点。

    • 对于单节点群集 - 初始化器是当前正在运行的节点。

  2. 通过 SSH 连接到初始化器节点:

    ssh root@<node_ip>
  3. 提取 Helm chart:

    • 对于托管在 Helm chart 储存库中的 Helm chart:

      helm repo add <chart_repo_name> <chart_repo_urls>
      helm pull <chart_repo_name>/<chart_name>
      
      # Alternatively if you want to pull a specific verison
      helm pull <chart_repo_name>/<chart_name> --version=X.Y.Z
    • 对于基于 OCI 的 Helm chart:

      helm pull oci://<chart_oci_url>
      
      # Alternatively if you want to pull a specific verison
      helm pull oci://<chart_oci_url> --version=X.Y.Z
  4. 将提取的 .tgz 存档编码,以便可以将其传递给 HelmChart CR 配置:

    base64 -w 0 <chart_name>-X.Y.Z.tgz  > <chart_name>-X.Y.Z.txt
  5. 为要编辑的 chart 清单文件创建副本:

    cp /var/lib/rancher/rke2/server/manifests/<chart_name>.yaml ./<chart_name>.yaml
  6. 更改 bar.yaml 文件的 chartContentversion 配置:

    sed -i -e "s|chartContent:.*|chartContent: $(<chart-name-X.Y.Z.txt)|" -e "s|version:.*|version: X.Y.Z|" <chart_name>.yaml
    注意
    注意

    如果需要对 chart 进行任何其他升级更改(例如添加新的自定义 chart 值),则需要手动编辑 chart 清单文件。

  7. 替换原始 chart 清单文件:

    cp <chart_name>.yaml /var/lib/rancher/rke2/server/manifests/

以上命令将触发 Helm chart 升级。升级将由 helm-controller 处理。

要跟踪 Helm chart 的升级,需要查看 helm-controller 为 chart 升级创建的 Pod 的日志。有关详细信息,请参见“示例”(第 24.3.1.1 节 “示例”)一节。

24.3.1.1 示例

注意
注意

本节中的示例假设您已找到并连接到初始化器节点。

本节提供有关如何升级以下 Helm chart 的示例:

24.3.1.1.1 Rancher 升级
注意
注意

为了确保能够实现灾难恢复,我们建议进行 Rancher 备份。有关如何执行此操作的信息,请查看此页面

此示例说明如何将 Rancher 升级到 2.8.4 版本。

  1. 添加 Rancher Prime Helm 储存库:

    helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
  2. 提取最新的 Rancher Prime Helm chart 版本:

    helm pull rancher-prime/rancher --version=2.8.4
  3. .tgz 存档编码,以便可以将其传递给 HelmChart CR 配置:

    base64 -w 0 rancher-2.8.4.tgz  > rancher-2.8.4-encoded.txt
  4. 为要编辑的 rancher.yaml 文件创建副本:

    cp /var/lib/rancher/rke2/server/manifests/rancher.yaml ./rancher.yaml
  5. 更改 rancher.yaml 文件的 chartContentversion 配置:

    sed -i -e "s|chartContent:.*|chartContent: $(<rancher-2.8.4-encoded.txt)|" -e "s|version:.*|version: 2.8.4|" rancher.yaml
    注意
    注意

    如果需要对 chart 进行任何其他升级更改(例如添加新的自定义 chart 值),则需要手动编辑 rancher.yaml 文件。

  6. 替换原始 rancher.yaml 文件:

    cp rancher.yaml /var/lib/rancher/rke2/server/manifests/

要校验是否做出了更新,请执行以下操作:

  1. 列出 default 名称空间中的 Pod:

    kubectl get pods -n default
    
    # Example output
    NAME                              READY   STATUS      RESTARTS   AGE
    helm-install-cert-manager-7v7nm   0/1     Completed   0          88m
    helm-install-rancher-p99k5        0/1     Completed   0          3m21s
  2. 查看 helm-install-rancher-* Pod 的日志:

    kubectl logs <helm_install_rancher_pod> -n default
    
    # Example
    kubectl logs helm-install-rancher-p99k5 -n default
  3. 校验 Rancher Pod 是否正在运行:

    kubectl get pods -n cattle-system
    
    # Example output
    NAME                               READY   STATUS      RESTARTS   AGE
    helm-operation-mccvd               0/2     Completed   0          3m52s
    helm-operation-np8kn               0/2     Completed   0          106s
    helm-operation-q8lf7               0/2     Completed   0          2m53s
    rancher-648d4fbc6c-qxfpj           1/1     Running     0          5m27s
    rancher-648d4fbc6c-trdnf           1/1     Running     0          9m57s
    rancher-648d4fbc6c-wvhbf           1/1     Running     0          9m57s
    rancher-webhook-649dcc48b4-zqjs7   1/1     Running     0          100s
  4. 校验 Rancher 版本是否已升级:

    kubectl get settings.management.cattle.io server-version
    
    # Example output
    NAME             VALUE
    server-version   v2.8.4
24.3.1.1.2 Metal3 升级

此示例说明如何将 Metal3 升级到 0.7.1 版本。

  1. 提取最新的 Metal3 Helm chart 版本:

    helm pull oci://registry.suse.com/edge/metal3-chart --version 0.7.1
  2. .tgz 存档编码,以便可以将其传递给 HelmChart CR 配置:

    base64 -w 0 metal3-chart-0.7.1.tgz  > metal3-chart-0.7.1-encoded.txt
  3. 为要编辑的 Metal3 清单文件创建副本:

    cp /var/lib/rancher/rke2/server/manifests/metal3.yaml ./metal3.yaml
  4. 更改 Metal3 清单文件的 chartContentversion 配置:

    sed -i -e "s|chartContent:.*|chartContent: $(<metal3-chart-0.7.1-encoded.txt)|" -e "s|version:.*|version: 0.7.1|" metal3.yaml
    注意
    注意

    如果需要对 chart 进行任何其他升级更改(例如添加新的自定义 chart 值),则需要手动编辑 metal3.yaml 文件。

  5. 替换原始 Metal3 清单文件:

    cp metal3.yaml /var/lib/rancher/rke2/server/manifests/

要校验是否做出了更新,请执行以下操作:

  1. 列出 default 名称空间中的 Pod:

    kubectl get pods -n default
    
    # Example output
    NAME                              READY   STATUS      RESTARTS   AGE
    helm-install-metal3-7p7bl         0/1     Completed   0          27s
  2. 查看 helm-install-rancher-* Pod 的日志:

    kubectl logs <helm_install_rancher_pod> -n default
    
    # Example
    kubectl logs helm-install-metal3-7p7bl -n default
  3. 校验 Metal3 Pod 是否正在运行:

    kubectl get pods -n metal3-system
    
    # Example output
    NAME                                                     READY   STATUS    RESTARTS      AGE
    baremetal-operator-controller-manager-785f99c884-9z87p   2/2     Running   2 (25m ago)   36m
    metal3-metal3-ironic-96fb66cdd-lkss2                     4/4     Running   0             3m54s
    metal3-metal3-mariadb-55fd44b648-q6zhk                   1/1     Running   0             36m
  4. 校验 HelmChart 资源版本是否已升级:

    kubectl get helmchart metal3 -n default
    
    # Example output
    NAME     JOB                   CHART   TARGETNAMESPACE   VERSION   REPO   HELMVERSION   BOOTSTRAP
    metal3   helm-install-metal3           metal3-system     0.7.1

24.3.2 不是通过 EIB 部署的 Helm chart

  1. 获取当前正在运行的 Helm chart .yaml 文件的值,并根据需要对其进行任何更改:

    helm get values <chart_name> -n <chart_namespace> -o yaml > <chart_name>-values.yaml
  2. 更新 Helm chart:

    # For charts using a chart repository
    helm upgrade <chart_name> <chart_repo_name>/<chart_name> \
      --namespace <chart_namespace> \
      -f <chart_name>-values.yaml \
      --version=X.Y.Z
    
    # For OCI based charts
    helm upgrade <chart_name> oci://<oci_registry_url>/<chart_name> \
      --namespace <chart_namespace> \
      -f <chart_name>-values.yaml \
      --version=X.Y.Z
  3. 校验 chart 是否已升级。根据具体的 chart,可能需要校验不同的资源。有关 chart 升级示例,请参见“示例”(第 24.3.2.1 节 “示例”)一节。

24.3.2.1 示例

本节提供有关如何升级以下 Helm chart 的示例:

24.3.2.1.1 Rancher
注意
注意

为了确保能够实现灾难恢复,我们建议进行 Rancher 备份。有关如何执行此操作的信息,请查看此页面

此示例说明如何将 Rancher 升级到 2.8.4 版本。

  1. 获取当前 Rancher 版本的值,并将其列显到 rancher-values.yaml 文件中:

    helm get values rancher -n cattle-system -o yaml > rancher-values.yaml
  2. 更新 Helm chart:

    helm upgrade rancher rancher-prime/rancher \
      --namespace cattle-system \
      -f rancher-values.yaml \
      --version=2.8.4
  3. 校验 Rancher 版本是否已升级:

    kubectl get settings.management.cattle.io server-version
    
    # Example output
    NAME             VALUE
    server-version   v2.8.4

有关 Rancher Helm chart 升级的详细信息,请查看此页面

24.3.2.1.2 Metal3

此示例说明如何将 Metal3 升级到 0.7.1 版本。

  1. 获取当前 Rancher 版本的值,并将其列显到 rancher-values.yaml 文件中:

    helm get values metal3 -n metal3-system -o yaml > metal3-values.yaml
  2. 更新 Helm chart:

    helm upgrade metal3 oci://registry.suse.com/edge/metal3-chart \
      --namespace metal3-system \
      -f metal3-values.yaml \
      --version=0.7.1
  3. 校验 Metal3 Pod 是否正在运行:

    kubectl get pods -n metal3-system
    
    # Example output
    NAME                                                     READY   STATUS    RESTARTS   AGE
    baremetal-operator-controller-manager-785f99c884-fvsx4   2/2     Running   0          12m
    metal3-metal3-ironic-96fb66cdd-j9mgf                     4/4     Running   0          2m41s
    metal3-metal3-mariadb-55fd44b648-7fmvk                   1/1     Running   0          12m
  4. 校验 Metal3 Helm 版本是否已更改:

    helm ls -n metal3-system
    
    # Expected output
    NAME  	NAMESPACE    	REVISION	UPDATED                                	STATUS  	CHART       	APP VERSION
    metal3	metal3-system	2       	2024-06-17 12:43:06.774802846 +0000 UTC	deployed	metal3-0.7.1	1.16.0