从 GKE On-Prem 版本 1.3 开始,您可以创建一个节点池,以定义使用相同配置的一组节点,这些节点可以位于用户集群内,也可以跨用户集群。然后,您可以单独管理该节点池,而不会影响每个集群中的任何其他节点。详细了解节点池。
您可以在用户集群的配置文件中定义一个或多个节点池。创建节点池会在每个集群中创建其他节点。您通过用户集群的配置文件管理节点池,包括创建、更新和删除节点池。在配置文件中定义节点池后,您可以使用 gkectl update cluster
命令将这些更改部署到集群。部署的更改会立即在每个用户集群中执行。例如,如果您从集群中移除节点池,则无论这些节点是否在运行工作负载,这些节点都会被立即删除。
示例节点池:
nodepools:
- name: pool-1
cpus: 4
memorymb: 8192
replicas: 5
新安装提示:创建您的第一个用户集群并在该集群中定义节点池。然后使用该集群的配置文件创建具有相同节点池设置的其他用户集群。
准备工作
支持:
仅支持 1.3.0 或更高版本的用户集群。
不支持管理员集群中的节点池。
gkectl update cluster
命令目前仅支持节点池管理。配置文件中存在的所有其他更改都会被忽略。虽然节点池中的节点可以与每个用户集群中的其他节点分开进行管理,但无法单独升级任何集群的节点。当您升级集群时,所有节点都会被升级。
资源:
您可以只部署对节点池
replicas
的更改,而不中断节点的工作负载。重要提示:如果部署任何其他节点池配置更改,则会重新创建节点池中的节点。您必须确保每个节点池都没有运行不应中断的工作负载。
部署节点池更改时,可能会创建一个临时节点。您必须验证是否有可用于该临时节点的 IP 地址。
创建和更新节点池
您可以通过修改和部署用户集群的配置文件来管理节点池。您可以创建一个或多个节点池并将其部署到每个用户集群。
要创建或更新节点池,请执行以下操作:
在编辑器中,打开要在其中创建或更新节点池的用户集群的配置文件。
在配置文件的
usercluster
下的nodepools
部分定义一个或多个节点池:配置必需的最低节点池特性。您必须为每个节点池指定以下特性:
usercluster.nodepools.name
:指定节点池的唯一名称。更新此特性会重新创建节点。示例:name: pool-1
usercluster.nodepools.cpus
:指定将多少 CPU 分配给用户集群的每个工作器节点。更新此特性会重新创建节点。示例:cpus: 4
usercluster.nodepools.memorymb
:指定为用户集群的每个工作节点分配多少内存(以兆字节为单位)。更新此特性会重新创建节点。示例:memorymb: 8192
usercluster.nodepools.replicas
:指定用户集群用于运行工作负载的工作器节点总数。您可以在不影响任何节点或运行的工作负载的情况下更新此特性。示例:replicas: 5
。
请注意,虽然某些
nodepools
特性与workernode
(DHCP | 静态 IP 地址)相同,但workernode
部分对于每个用户集群都是必需的。您不能移除workernode
,也不能将其替换为nodepools
。示例:
nodepools: - name: pool-1 cpus: 4 memorymb: 8192 replicas: 5
如需查看多个节点池的配置示例,请参阅示例。
配置可选的节点池特性。您可以向节点池配置添加标签和污点,以控制节点工作负载。您还可以定义节点池使用的 vSphere 数据存储区。
usercluster.nodepools.labels
:指定一个或多个key : value
对,以唯一标识您的节点池。key
和value
必须以字母或数字开头,可以包含字母、数字、连字符、英文句点和下划线,长度不超过 63 个字符。如需了解详细的配置信息,请参阅标签。
重要提示:您不能为标签指定以下键,因为它们已保留供 GKE On-Prem 使用:
kubernetes.io
、k8s.io
、googleapis.com
。示例:
labels: key1: value1 key2: value2
usercluster.nodepools.taints
:指定key
、value
和effect
,以为节点池定义taints
。这些taints
与您为 pod 配置的tolerations
对应。key
是必需的,value
是可选的。两者都必须以字母或数字开头,可以包含字母、数字、连字符、英文句点和下划线,长度不超过 253 个字符。或者,您可以在key
前添加一个 DNS 子域(后跟/
)。例如:example.com/my-app
。有效
effect
值为NoSchedule
、PreferNoSchedule
或NoExecute
。如需了解详细的配置信息,请参阅污点。
示例:
taints: - key: key1 value: value1 effect: NoSchedule
usercluster.nodepools.vsphere.datastore
:指定节点池使用的 vSphere 数据存储区。这将替换用户集群的默认 vSphere 数据存储区。示例:
vsphere: datastore: datastore_name
如需查看多个节点池的配置示例,请参阅示例。
使用
gkectl update cluster
命令将更改部署到用户集群。注意:
gkectl update cluster
仅支持节点池管理。只有nodepools
部分的更改会被部署。配置文件中的所有其他更改都会被忽略。gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
其中:- [ADMIN_CLUSTER_KUBECONFIG]:指定管理员集群的
kubeconfig
文件。 - config.yaml:指定用户集群的修改后
configuration file
。您可能为此文件选择了其他名称。 --dry-run
:可选标志。如果添加此标志,则仅查看更改。不会将任何更改部署到用户集群。--yes
:可选标志。如果添加此标志,则以静默方式运行命令。确认要继续操作的提示会被停用。
如果您提前中止该命令,可以再次运行同一命令来完成操作并将更改部署到用户集群。
如果您需要还原更改,则必须还原配置文件中的更改,然后将这些更改重新部署到用户集群。
- [ADMIN_CLUSTER_KUBECONFIG]:指定管理员集群的
通过检查所有节点来验证更改是否成功。运行以下命令以列出用户集群中的所有节点:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
其中,[USER_CLUSTER_KUBECONFIG] 是您的用户集群的
kubeconfig
文件。
删除节点池
要从用户集群中移除节点池,请执行以下操作:
从用户集群的配置文件中移除所有
nodepools
设置。如果有多个节点池,您必须移除所有设置。确保没有正在运行的工作负载。所有受影响的节点都将被删除。
通过运行
gkectl update cluster
命令部署更改:gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config config.yaml --dry-run --yes
其中:- [ADMIN_CLUSTER_KUBECONFIG]:指定管理员集群的
kubeconfig
文件。 - config.yaml:指定用户集群的修改后
configuration file
。您可能为此文件选择了其他名称。 --dry-run
:可选标志。如果添加此标志,则仅查看更改。不会将任何更改部署到用户集群。--yes
:可选标志。如果添加此标志,则以静默方式运行命令。确认要继续操作的提示会被停用。
- [ADMIN_CLUSTER_KUBECONFIG]:指定管理员集群的
通过检查所有节点来验证更改是否成功。运行以下命令以列出用户集群中的所有节点:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes -o wide
其中,[USER_CLUSTER_KUBECONFIG] 是您的用户集群的
kubeconfig
文件。
示例
以下示例配置中有四个节点池,每个节点池具有不同的特性:
pool-1
:仅指定了所需的最少属性pool-2
:包括 vSphere 数据存储区pool-3
:包括污点和标签pool-4
:包括所有特性
...
usercluster:
...
workernode:
cpus: 4
memorymb: 8192
replicas: 3
# (Optional) Node pools with customizable labels, taints, etc.
nodepools:
- name: pool-1
cpus: 4
memorymb: 8192
replicas: 5
- name: pool-2
cpus: 8
memorymb: 16384
replicas: 3
vsphere:
datastore: my_datastore
- name: pool-3
cpus: 4
memorymb: 8192
replicas: 5
taints:
- key: "example-key"
effect: NoSchedule
labels:
environment: production
app: nginx
- name: pool-4
cpus: 8
memorymb: 16384
replicas: 3
taints:
- key: "my_key"
value: my_value1
effect: NoExecute
labels:
environment: test
vsphere:
datastore: my_datastore
...
问题排查
通常,
gkectl update cluster
命令会在失败时提供详细信息。如果命令成功并且您没有看到节点,则可以使用诊断集群问题指南进行问题排查。集群资源可能不足,例如在创建或更新节点池期间缺少可用的 IP 地址。请参阅调整用户集群大小主题,详细了解如何验证是否有可用的 IP 地址。
您还可以查看常规问题排查指南。
卡在
Creating node MachineDeployment(s) in user cluster…
。创建或更新用户集群中的节点池可能需要一些时间。但是,如果等待时间非常长并且您怀疑某些操作可能失败,则可以运行以下命令:
- 运行
kubectl get nodes
以获取节点的状态。 - 对于任何未准备就绪的节点,运行
kubectl describe node [node_name]
以获取详细信息。
- 运行