使用 bmctl
创建集群后,您可以通过执行以下一系列操作来更改集群配置的某些方面:
更改集群配置文件中某些字段的值,该文件默认位于以下位置:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
。通过运行
bmctl update
命令来更新集群。
例如,通过这种方式,您可以添加或移除集群中的节点或替换集群中的节点。本文档介绍了如何对集群执行这些更新和其他更新。
但请务必注意,集群配置的许多方面都是不可变的,在创建集群后无法更新。如需查看可变字段和不可变字段的完整列表,请参阅集群配置字段参考文档。字段参考是一个可排序的表格。点击列标题可更改排列顺序。点击字段名称可查看其说明。
在集群中添加或移除节点
节点池是集群中全都具有相同配置的一组节点。请注意,节点始终属于节点池。要向集群添加新节点,您需要将其添加到特定节点池。从节点池中移除节点相当于从集群中完全移除该节点。
Anthos Clusters on Bare Metal 中有三种类型的节点池:控制平面、负载均衡器和工作器节点池。
如需在节点池中添加或移除节点,您可以在集群配置文件的特定部分中添加或移除该节点的 IP 地址。以下列表展示了您需要针对给定节点池修改清单的哪个部分:
- 工作器节点池:在
kind: NodePool
部分显示的spec.nodes
字段中添加/移除节点的 IP 地址。 - 控制平面节点池:在
kind: Cluster
部分显示的spec.controlPlane.nodePoolSpec.nodes
字段中添加/移除节点的 IP 地址。 - 负载均衡节点池:您无法在现有负载均衡器地址池中修改(添加或移除 IP 地址),也无法移除现有负载均衡器地址池。创建集群后,您只能添加新的地址池。
示例:如何移除工作器节点
以下示例集群配置文件展示了两个工作器节点的规范:
---
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
您可以通过执行以下步骤从工作器节点池中移除节点:
从集群配置文件中删除节点的 IP 地址条目:
--- 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
进行以下更改:
- 将 CLUSTER_NAME 替换为要更新的集群的名称。
- 如果集群是自行管理的集群(例如管理员集群或独立集群),请将 KUBECONFIG 替换为该集群的 kubeconfig 文件的路径。如果集群是用户集群,请将 KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。
请务必注意,bmctl
必须从节点中排空 Pod,然后才能移除该节点。如果无法将 Pod 重新调度到其他节点,则不会从集群中移除节点。
bmctl update
命令成功执行后,需要一些时间才能完成 machine-preflight
和 machine-init
作业。您可以通过运行本文档的验证更新部分中所述的命令查看节点及其各自节点池的状态。
强制移除节点
如果 bmctl update
命令无法移除节点,则可能需要强制将其从集群中移除。如需了解详情,请参阅强制移除损坏的节点。
替换高可用性控制平面节点
您可以替换管理员集群、用户集群、独立集群和混合集群中的高可用性 (HA) 控制平面节点。
您可以通过执行以下步骤来替换集群中的节点:
- 从集群配置文件中移除节点的 IP 地址。
- 更新集群。
- 检查集群中节点的状态。
- 将新节点的 IP 地址添加到同一集群配置文件中。
- 更新集群。
本部分的其余内容将通过示例进行说明。
以下示例集群配置文件展示了用户集群中的三个控制平面节点:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: user-cluster
namespace: cluster-user-cluster
spec:
controlPlane:
nodePoolSpec:
nodes:
- address: 10.200.0.11
- address: 10.200.0.12
- address: 10.200.0.13
如需替换 spec.controlPlane.nodePoolSpec.nodes
部分中列出的最后一个节点,请执行以下步骤:
通过在集群配置文件中删除节点的 IP 地址条目来移除节点。进行此更改后,集群配置文件应如下所示:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12
通过运行以下命令来更新集群:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
进行以下更改:
- 将 CLUSTER_NAME 替换为要更新的集群的名称。
- 如果集群是自行管理的集群(例如管理员集群或独立集群),请将 KUBECONFIG 替换为该集群的 kubeconfig 文件的路径。如果集群是用户集群(如本示例所示),请将 KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。
bmctl update
命令成功执行后,需要一些时间来完成machine-preflight
和machine-init
作业。您可以通过运行本文档的验证更新部分中所述的命令查看节点及其各自节点池的状态。节点池和节点处于就绪状态后,您可以继续执行下一步。通过将新控制平面节点的 IP 地址添加到集群配置文件的
spec.controlPlane.nodePoolSpec.nodes
部分,将新控制平面节点添加到节点池中。进行此更改后,集群配置文件应如下所示:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12 - address: 10.200.0.14
通过运行以下命令来更新集群:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
进行以下更改:
- 将 CLUSTER_NAME 替换为要更新的集群的名称。
- 如果集群是自行管理的集群(例如管理员集群或独立集群),请将 KUBECONFIG 替换为该集群的 kubeconfig 文件的路径。如果集群是用户集群(如本示例所示),请将 KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。
验证更新
您可以使用 kubectl get
命令查看节点及其各自的节点池的状态。
例如,以下命令会显示集群命名空间 cluster-my-cluster
中的节点池的状态:
kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io
系统会返回类似于以下内容的结果:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
cluster-my-cluster 3 0 0 0 0
cluster-my-cluster-lb 2 0 0 0 0
np1 3 0 0 0 0
Reconciling=1
表示协调步骤仍在进行中。您应该等待状态更改为 Reconciling=0
。
您还可以通过运行以下命令来检查集群中节点的状态:
kubectl get nodes --kubeconfig=KUBECONFIG
如需详细了解如何诊断集群,请参阅创建快照以诊断集群。
可以通过更新进行更改的功能
除了添加、移除或替换节点之外,您还可以使用 bmctl update
命令修改集群配置文件中的某些可变字段值、自定义资源 (CR) 和注解。
如需更新集群资源,请修改集群配置文件并使用 bmctl update
应用您的更改。
以下部分概述了通过更改字段值、CR 或注解来更新现有集群的一些常见示例。
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
防止意外删除集群
如果您向集群配置文件添加 baremetal.cluster.gke.io/prevent-deletion: "true"
注释,则无法删除集群。例如,运行 kubectl delete cluster
或 bmctl reset cluster
会生成错误。
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: ci-10c3c6f4d9c698e
namespace: cluster-ci-10c3c6f4d9c698e
annotations:
baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
clusterNetwork:
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
NetworkGatewayGroup
NetworkGatewayGroup
自定义资源用于为高级网络功能(例如出站 NAT 网关或使用 BGP 的捆绑式负载均衡功能)提供浮动 IP 地址。如需使用 NetworkGatewayGroup
自定义资源和相关的网络功能,您必须在创建集群时将 clusterNetwork.advancedNetworking
设置为 true
。
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
使用 BGP 配置捆绑式负载均衡器时,默认情况下,数据平面负载均衡使用为控制平面对等互连指定的相同外部对等连接。或者,您可以使用 BGPLoadBalancer
自定义资源(和 BGPPeer
自定义资源)单独配置数据平面负载均衡。如需了解详情,请参阅使用 BGP 配置捆绑式负载均衡器。
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
使用 BGP 配置捆绑式负载均衡器时,默认情况下,数据平面负载均衡使用为控制平面对等互连指定的相同外部对等连接。或者,您可以使用 BGPPeer
自定义资源(和 BGPLoadBalancer
自定义资源)单独配置数据平面负载均衡。如需了解详情,请参阅使用 BGP 配置捆绑式负载均衡器。
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
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
进行以下更改:
- 将 CLUSTER_NAME 替换为要更新的集群的名称。
- 如果集群是自行管理的集群(例如管理员集群或独立集群),请将 KUBECONFIG 替换为该集群的 kubeconfig 文件的路径。如果集群是用户集群,请将 KUBECONFIG 替换为管理员集群的 kubeconfig 文件的路径。