可以使用 kubectl patch 方法对 Tanzu Kubernetes 集群执行“就地”更新。可使用 kubectl patch 方法替代 kubectl edit 命令执行任一支持的集群更新操作。

关于 Kubectl 修补程序命令

限制: 请勿尝试按照本主题中所述使用 kubectl patch 更新集群规范来达到使其符合 TKGS v1alpha2 API 的目的。对于此类更新,应使用 kubectl edit。请参见 将集群规范转换为 TKGS v1alpha2 API 后更新 Tanzu Kubernetes 版本
kubectl patch 命令对集群执行“就地”更新。此命令的目的是提供一种升级 Kubernetes 版本的方法,也是此处介绍的方法。有关 kubectl patch 命令的详细信息,请参见 Kubernetes 文档中的 使用 kubectl patch 就地更新 API 对象

下文展示的方法使用 UNIX shell 命令 read 从键盘获取输入并将其分配给名为 $PATCH 的变量。kubectl patch 命令将调用 Kubernetes API 以更新集群清单。--type=merge 标记表示数据只包含不同于现有清单的属性。

使用修补程序方法升级 Kubernetes 版本

触发滚动更新的最常用方法是使用 .spec.distribution.version.spec.distribution.fullVersion 属性更改集群的 Kubernetes 分发版本。您需要更新 version 提示并取消设置 fullVersion 或将其设为 null,以避免发现过程中可能出现的版本不匹配问题。

$ read -r -d '' PATCH <<'EOF'
spec:
  distribution:
    fullVersion: null    # NOTE: Must set to null when updating just the version field
    version: v1.18.5
EOF

使用 kubectl patch 命令应用更新。必须在 "$PATCH" 变量两侧加上引号,以在集群清单中保留换行符。将 TKG-CLUSTER-NAME 值替换为集群的实际名称。

kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"
预期结果:
tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched

通过更改节点的 VirtualMachineClass 使用 Patch 方法更新集群

触发 Tanzu Kubernetes 集群滚动更新的另一种方法是更改节点池的 VirtualMachineClass,即更改属性 .spec.topology.controlPlane.class 或属性 .spec.topology.workers.class

read -r -d '' PATCH <<'EOF'
spec:
  topology:
    controlPlane:
      class: best-effort-xlarge
    workers:
      class: best-effort-xlarge
EOF

使用 kubectl patch 命令应用更新,并将变量替换为集群名称。

kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"
预期结果:
tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched

通过更改节点的 StorageClass 使用 Patch 方法更新集群

触发 Tanzu Kubernetes 集群滚动更新的另一种方法是更改节点池的 StorageClass,即更改属性 .spec.topology.controlPlane.storageClass 或属性 .spec.topology.workers.storageClass

$ read -r -d '' PATCH <<'EOF'
spec:
  topology:
    controlPlane:
      storageClass: gc-storage-profile
    workers:
      storageClass: gc-storage-profile
EOF
使用 kubectl patch 命令应用更新,并将变量替换为集群名称。
kubectl patch --type=merge tanzukubernetescluster TKG-CLUSTER-NAME --patch "$PATCH"
预期结果:
tanzukubernetescluster.run.tanzu.vmware.com/TKG-CLUSTER-NAME patched