升级集群

安装新版 bmctl 时,您可以升级使用较早版本创建的现有集群。将集群升级到最新的 GKE on Bare Metal 版本可为集群新增功能和修复,还可确保您的集群保持受支持状态。您可以使用 bmctl upgrade cluster 命令升级管理员集群、独立集群或用户集群。

升级注意事项

以下部分概述了升级集群之前要考虑的规则和最佳做法。

预览功能

预览版功能随时可能更改,并且仅用于测试和评估目的。请勿在生产集群上使用预览版功能。我们不能保证使用预览版功能的集群可以升级。在某些情况下,我们会明确阻止对使用预览版功能的集群进行升级。

如需了解与升级相关的破坏性更改,请参阅版本说明

SELinux

如果要启用 SELinux 来保护容器,则必须确保在所有宿主机上以 Enforced 模式启用 SELinux。从 GKE on Bare Metal 1.9.0 版或更高版本开始,您可以在创建集群或升级集群之前或之后启用或停用 SELinux。Red Hat Enterprise Linux (RHEL) 和 CentOS 上默认启用 SELinux。如果宿主机上停用了 SELinux,或者不确定,请参阅使用 SELinux 保护容器,了解如何启用 SELinux。

GKE on Bare Metal 仅支持 RHEL 和 CentOS 系统中的 SELinux。

升级预检检查

预检检查在集群升级的过程中运行,以验证集群状态和节点运行状况。如果预检检查失败,则不会继续集群升级。 如需详细了解预检检查,请参阅了解预检检查

您可以通过在运行升级之前运行预检检查来检查集群是否已准备好进行升级。如需了解详情,请参阅针对升级进行预检检查

节点数量

如果您的集群具有 51 个以上的节点,则使用引导集群的标准升级操作容易出现故障。故障原因是分配给引导集群的 Pod IP 地址数量有限。 引导集群中 pod 可用的默认 IP 地址范围在 CIDR 块表示法中使用 /24 掩码。

在这种情况下,有两种解决方法:

  1. (推荐)将 --use-bootstrap=false 标志与 bmctl upgrade cluster 命令结合使用以执行就地升级。此标志会导致升级完全绕过引导集群和相关的 Pod 地址限制。请注意,1.13.0 版集群存在就地升级已知问题。 如果您的集群是 1.13.0 版,请参阅已知问题以获取解决方法和其他信息。

  2. --bootstrap-cluster-pod-cidr 标志与 bmctl upgrade cluster 命令结合使用可增加分配给引导集群的 Pod IP 地址数量。例如,如果您指定 --bootstrap-cluster-pod-cidr=192.168.122.0/23,则为升级操作运行的 Pod 可以使用 192.168.122.0/23 中的 IP 地址(512 个地址),而不是默认的 CIDR 192.168.122.0/24(256 个地址)。这些添加的地址应该能够让多达 52 个节点的集群顺利升级。

    在升级期间,并发运行的 Pod 数上限可以是节点数量的 5 倍。为了确保升级成功,请指定 IP 地址数量为节点数量 5 倍的 CIDR 地址块。此标志需要内部 IP 地址。

  3. 如果您不想使用上述任一选项,则可以使用 --skip-bootstrap-cidr-check 标志绕过验证。但是,传递此参数意味着升级过程可能会由于启动集群的 pod CIDR 中可用的 IP 地址不足而失败。

自行管理集群的就地升级

从 GKE on Bare Metal 版本 1.13.1 开始,您可以对管理员、混合和独立集群执行就地升级。就地升级不需要使用引导集群,这就简化了流程并降低了升级的资源要求。在您可以对自行管理的集群执行就地升级之前,该集群必须为 1.13.0 或更高版本。

要执行就地升级,您可以使用 bmctlkubectl

bmctl

该升级过程与标准升级过程相同,但 bmctl upgrade cluster 命令除外。

  • 如需开始就地升级,请在升级命令中使用 --use-bootstrap=false 标志:

    bmctl upgrade cluster -c CLUSTER_NAME --use-bootstrap=false \
        --kubeconfig ADMIN_KUBECONFIG
    

    替换以下内容:

    • CLUSTER_NAME:要升级的集群的名称。
    • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

与标准升级过程一样,预检检查在集群升级的过程中运行,以验证集群状态和节点运行状况。如果预检检查失败,则系统会停止集群升级。如需排查任何故障问题,请检查集群和相关日志,因为未创建任何引导集群。

kubectl

如需使用 kubectl 升级自行管理的集群,请执行以下步骤:

  1. 修改集群配置文件,将 anthosBareMetalVersion 设置为升级目标版本。

  2. 如需启动升级,请运行以下命令:

    kubectl apply -f CLUSTER_CONFIG_PATH
    

    CLUSTER_CONFIG_PATH 替换为集群配置文件的路径。

标准升级过程一样,预检检查在集群升级的过程中运行,以验证集群状态和节点运行状况。如果预检检查失败,则系统会停止集群升级。如需排查任何故障问题,请检查集群和相关日志,因为未创建任何引导集群。

Pod 密度

GKE on Bare Metal 通过 nodeConfig.PodDensity.MaxPodsPerNode 支持每个节点最多 250 个 pod 的配置。您只能在创建集群期间配置 pod 密度。您无法更新现有集群的 pod 密度设置。

已知问题

如需了解与集群升级相关的潜在问题,请参阅“已知问题”页面上的升级 Anthos clusters on Bare Metal

升级管理员集群、独立集群、混合集群或用户集群

下载并安装新版 bmctl 时,您可以升级使用较早版本创建的管理员集群、混合集群、独立集群和用户集群。对于给定的 bmctl 版本,集群只能升级到同一版本。

首先,您需要下载最新的 bmctl,然后修改相应的集群配置文件,最后发出 bmctl upgrade cluster 命令以完成升级。

  1. Cloud Storage 存储桶下载最新的 bmctl,然后使用 chmod 向所有用户授予 bmctl 执行权限:

    gsutil cp gs://anthos-baremetal-release/bmctl/1.14.11/linux-amd64/bmctl bmctl
    chmod a+x bmctl
    
  2. 修改集群配置文件,将 GKE on Bare Metal 集群版本从 1.13.2 更改为 1.14.11。下面显示了来自管理员集群配置的示例:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: cluster1
      namespace: cluster-cluster1
    spec:
      # Cluster type. This can be:
      #   1) admin:  to create an admin cluster. This can later be used to create user clusters.
      #   2) user:   to create a user cluster. Requires an existing admin cluster.
      #   3) hybrid: to create a hybrid cluster that runs admin cluster components and user workloads.
      #   4) standalone: to create a cluster that manages itself, runs user workloads, but does not manage other clusters.
      type: admin
      # Anthos cluster version.
      # Change the following line from 1.13.2 to 1.14.11, shown below
      anthosBareMetalVersion: 1.14.11
    
  3. 将集群升级到 1.14.11 时,您必须通过 Connect 将项目注册到项目舰队(如果尚未注册)。

    1. 按照“启用 Google 服务和服务账号”页面上的配置服务账号以与 Connect 搭配使用中的说明,手动创建服务账号并检索 JSON 密钥文件。
    2. 在集群配置文件的关联 gkeConnectAgentServiceAccountKeyPathgkeConnectRegisterServiceAccountKeyPath 字段中引用下载的 JSON 密钥。
  4. 使用 bmctl upgrade cluster 命令完成升级:

    bmctl upgrade cluster -c CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    替换以下内容:

    • CLUSTER_NAME:要升级的集群的名称。
    • ADMIN_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

    预检检查在集群升级的过程中运行,以验证集群状态和节点运行状况。如果预检检查失败,则不会继续集群升级。

多个节点的并行升级

在典型的集群升级中,每个集群节点按顺序依次升级。本部分介绍了如何配置集群,以便在升级集群时并行升级多个节点。

并行升级节点可以加快集群升级速度,尤其是对于具有数百个节点的集群。多个节点的并行升级按节点池进行配置,只有工作器节点池中的节点可以并行升级。 控制平面或负载均衡器节点池中的节点一次只能升级一个。

并行升级工作器节点是预览版功能,因此请勿在生产集群上使用此功能。

如何执行并行升级

如需对工作器节点池中的节点执行并行升级,请执行以下操作:

  1. 向集群配置文件 preview.baremetal.cluster.gke.io/parallel-upgrade: "enable" 添加注解:

    ---
    gcrKeyPath: /path/to/gcr-sa
    gkeConnectAgentServiceAccountKeyPath: /path/to/gke-connect
    gkeConnectRegisterServiceAccountKeyPath: /path/to/gke-register
    sshPrivateKeyPath: /path/to/private-ssh-key
    cloudOperationsServiceAccountKeyPath: /path/to/logging-sa
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-cluster1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: cluster1
      namespace: cluster-cluster1
      annotations:
        baremetal.cluster.gke.io/maintenance-mode-deadline-seconds: "180"
        preview.baremetal.cluster.gke.io/parallel-upgrade: "enable"
        ...
    
  2. upgradeStrategy 部分添加到工作器节点池清单。此清单需要位于集群配置文件中。如果它出现在单独的清单文件中,则 bmctl upgrade cluster 命令不会对其执行操作。示例如下:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: np1
      namespace: cluster-ci-bf8b9aa43c16c47
    spec:
      clusterName: ci-bf8b9aa43c16c47
      nodes:
      - address:  10.200.0.7
      - address:  10.200.0.8
      - address:  10.200.0.9
      upgradeStrategy:
        parallelUpgrade:
          concurrentNodes: 5
      
    

    在此示例中,字段 concurrentNodes 的值为 5,这意味着 5 个节点将并行升级。此字段的最小值(和默认值)为 1,允许的最大值为工作器节点池中的节点数。不过,我们建议您将此值设置为不超过集群中节点总数的 3%。如果 concurrentNodes 的值过高,则工作负载可能会在并行升级期间受到影响。

  3. 按照上文升级管理员集群、独立集群、混合集群或用户集群部分中的说明升级集群。

如何停用节点的并行升级

如需停用节点并行升级,请在集群配置文件中将注解 preview.baremetal.cluster.gke.io/parallel-upgrade 设置为 disable