更新集群

使用 bmctl 创建集群后,您便可以更新该集群的自定义资源。除非您指定其他位置,否则配置文件将存储为 bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml

在集群中添加节点或者从中移除节点

在 Anthos clusters on Bare Metal 中,您可以通过修改集群的节点池定义来添加或移除集群中的节点。您可以使用 bmctl 命令更改这些定义。

Anthos clusters on Bare Metal 中有三种不同类型的节点池:控制平面、负载均衡器和工作器节点池。

查看节点状态

您可以使用 kubectl get 命令查看节点及其各自的节点池的状态。

例如,以下命令会显示集群命名空间 my-cluster 中的节点池的状态:

kubectl -n my-cluster get nodepools.baremetal.cluster.gke.io

系统会返回类似于以下内容的结果:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
my-cluster              3       0             0         0                  0
my-cluster-lb           2       0             0         0                  0
np1                     3       0             0         0                  0

如需详细了解如何诊断集群,请参阅诊断和重置集群

更改节点

大多数节点更改在集群配置文件中指定,然后配置文件被应用于集群。我们建议您将集群配置文件作为更新集群的主要来源。最佳做法是将配置文件存储在版本控制系统中以跟踪更改,用于排查问题。对于所有集群类型,请都使用 bmctl update 命令来更新集群中的节点更改。

Anthos clusters on Bare Metal 的集群配置文件包含一个带有凭据信息的标头部分。凭据条目和配置文件的其余部分都是有效的 YAML,但凭据条目对集群资源无效。使用 bmctl update credentials 获取凭据更新。

从集群移除节点时,系统会首先排空其中的任何 Pod。如果无法在其他节点上重新调度 Pod,则节点不会从集群中移除。bmctl update 命令将解析集群配置文件,并根据解析的结果应用自定义资源。

以下是具有两个节点的示例配置:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 172.18.0.5
  - address: 172.18.0.6

您可以通过删除节点条目来从节点池中移除节点:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 172.18.0.5

如需更新集群,请对自行管理的集群(例如管理员集群和独立集群)运行以下命令:

bmctl update cluster -c CLUSTER_NAME \
    --kubeconfig=KUBECONFIG

成功执行 bmctl update 命令后,machine-initmachine-reset Pod 需要一段时间才能完成操作。

以下各部分介绍了更新特定节点类型的重要区别。

控制平面和负载均衡器节点

Anthos clusters on Bare Metal 的控制平面和负载均衡器节点池规范是特殊的。这些规范声明和控制关键集群资源。这些资源的规范来源是它们在集群配置文件中的相应部分:

  • spec.controlPlane.nodePoolSpec
  • spec.LoadBalancer.nodePoolSpec

您可以通过在集群配置文件的相应部分中修改 nodes 下的地址数组来添加或移除控制平面或负载均衡器节点。

在高可用性 (HA) 配置中,需要设置奇数个控制平面节点池(三个或更多)来建立仲裁机制,以确保在某个控制平面发生故障时其他控制平面能够取而代之。如果在为执行维护或替换操作而添加或移除节点时暂时存在偶数个节点,则只要您有足够的仲裁机制,您的部署就会保持高可用性。

工作器节点

您可以使用 bmctl 命令直接添加或移除工作器节点。工作器节点池必须至少包含一个所需节点。但是,如果要移除整个节点池,请使用 kubectl 命令。在以下示例中,命令会删除名为 np1 的节点池,其中集群命名空间的变量为 my-cluster

kubectl -n my-cluster delete nodepool np1

其他可变字段

除了添加和移除节点之外,您还可以使用 bmctl update 命令修改集群配置的某些元素。通常,如需更新集群资源,请修改集群配置文件的本地版本,并使用 bmctl update 应用更改。bmctl update 命令类似于 kubectl apply 命令。

以下部分概述了通过更改字段值或修改相关自定义资源来更新现有集群的一些常见示例。

loadBalancer.addressPools

addressPools 部分包含为捆绑式负载均衡器指定负载均衡池的字段。您可以随时添加更多负载均衡地址池,但无法移除或修改任何现有地址池。

addressPools:
- name: pool1
  addresses:
  - 192.168.1.0-192.168.1.4
  - 192.168.1.240/28
- name: pool2
  addresses:
  - 192.168.1.224/28

bypassPreflightCheck

bypassPreflightCheck 字段的默认值为 false。如果您在集群配置文件中将此字段设置为 true,则在将资源应用于现有集群时系统会忽略内部预检检查。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  bypassPreflightCheck: true

loginUser

您可以在节点访问配置下设置 loginUser 字段。此字段支持使用无密码 sudo 功能进行机器登录。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  nodeAccess:
    loginUser: abm

BGPLoadBalancer

bmctl 使您可以通过 Google 打包捆绑的 LB 选项应用和更新基于 BGP 的负载均衡器。

apiVersion: "networking.gke.io/v1alpha1"
kind: BGPLoadBalancer
metadata:
 name: default
 namespace: cluster-cluster1
spec:
 localASN: 65001
 peers:
 - peerASN: 65000
   peerIP: 10.0.1.1

NetworkAttachmentDefinition

您可以使用 bmctl update 命令修改与网络对应的 NetworkAttachmentDefinition 自定义资源。

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: gke-network-1
  namespace: cluster-my-cluster
spec:
  config: '{
  "type": "ipvlan",
  "master": "enp2342",
  "mode": "l2",
  "ipam": {
    "type": "whereabouts",
    "range": "172.120.0.0/24"

修改配置文件后,您便可以通过运行 bmctl update 命令来更新集群。该命令将解析集群配置文件,并根据解析的结果应用自定义资源。

对于自行管理的集群(例如管理员集群和独立集群),请运行以下命令:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

对于用户集群,请运行以下命令:

bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG