×

使用集群 API 管理机器仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户尽早访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见 技术预览功能支持范围

修改集群 API 机器模板

您可以通过修改 YAML 清单文件并使用 OpenShift CLI (oc) 应用它来更新集群的机器模板资源。

先决条件
  • 您已部署使用集群 API 的 OpenShift Container Platform 集群。

  • 您可以使用具有 cluster-admin 权限的帐户访问集群。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 通过运行以下命令列出集群的机器模板资源

    $ oc get <machine_template_kind> (1)
    1 指定与您的平台对应的值。以下是有效值
    • AWSMachineTemplate:集群正在 Amazon Web Services (AWS) 上运行。

    • GCPMachineTemplate:集群正在 Google Cloud Platform (GCP) 上运行。

    • VSphereMachineTemplate:集群正在 VMware vSphere 上运行。

    示例输出
    NAME              AGE
    <template_name>   77m
  2. 通过运行以下命令将集群的机器模板资源写入您可以编辑的文件

    $ oc get <template_name> -o yaml > <template_name>.yaml

    其中 <template_name> 是集群的机器模板资源的名称。

  3. 使用不同的名称复制 <template_name>.yaml 文件。此步骤使用 <modified_template_name>.yaml 作为示例文件名。

  4. 使用文本编辑器修改 <modified_template_name>.yaml 文件,该文件定义了集群的更新后的机器模板资源。编辑机器模板资源时,请注意以下事项:

    • spec 节中的参数是特定于提供程序的。有关更多信息,请参见您提供程序的示例集群 API 机器模板 YAML。

    • 您必须使用与任何现有值不同的 metadata.name 参数值。

      对于引用此模板的任何集群 API 计算机器集,您必须更新 spec.template.spec.infrastructureRef.name 参数以匹配新机器模板资源中的 metadata.name 值。

  5. 通过运行以下命令应用机器模板 CR

    $ oc apply -f <modified_template_name>.yaml (1)
    1 使用带有新名称的已编辑 YAML 文件。
后续步骤
  • 对于引用此模板的任何集群 API 计算机器集,请更新 spec.template.spec.infrastructureRef.name 参数以匹配新机器模板资源中的 metadata.name 值。有关更多信息,请参见“使用 CLI 修改计算机器集”。

使用 CLI 修改计算机器集

您可以修改计算机器集的配置,然后使用 CLI 将更改传播到集群中的机器。

通过更新计算机器集配置,您可以启用功能或更改其创建的机器的属性。修改计算机器集时,您的更改仅适用于保存更新的 MachineSet 自定义资源 (CR) 后创建的计算机器。更改不会影响现有机器。

底层云提供商中所做的更改不会反映在 MachineMachineSet CR 中。要调整集群管理基础设施中的实例配置,请使用集群端资源。

您可以将现有机器替换为反映更新配置的新机器,方法是将计算机器集扩展到创建两倍数量的副本,然后将其缩减到原始数量的副本。

如果您需要扩展计算机器集而无需进行其他更改,则无需删除机器。

默认情况下,OpenShift Container Platform 路由器 pod 部署在计算机器上。由于路由器需要访问某些集群资源(包括 Web 控制台),因此除非您首先重新定位路由器 pod,否则不要将计算机器集扩展到 0

此过程中的输出示例使用 AWS 集群的值。

先决条件
  • 您的 OpenShift Container Platform 集群使用集群 API。

  • 您已使用 OpenShift CLI (oc) 以管理员身份登录到集群。

步骤
  1. 通过运行以下命令列出集群中的计算机器集

    $ oc get machinesets.cluster.x-k8s.io -n openshift-cluster-api
    示例输出
    NAME                          CLUSTER             REPLICAS   READY   AVAILABLE   AGE   VERSION
    <compute_machine_set_name_1>  <cluster_name>      1          1       1           26m
    <compute_machine_set_name_2>  <cluster_name>      1          1       1           26m
  2. 通过运行以下命令编辑计算机器集

    $ oc edit machinesets.cluster.x-k8s.io <machine_set_name> \
      -n openshift-cluster-api
  3. 记下 spec.replicas 字段的值,因为在缩放机器集以应用更改时需要它。

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineSet
    metadata:
      name: <machine_set_name>
      namespace: openshift-cluster-api
    spec:
      replicas: 2 (1)
    # ...
    1 此过程中的示例显示一个 replicas 值为 2 的计算机器集。
  4. 更新计算机集合 CR,配置您所需的选项,然后保存更改。

  5. 运行以下命令列出由更新后的计算机会合管理的机器:

    $ oc get machines.cluster.x-k8s.io \
      -n openshift-cluster-api \
      -l cluster.x-k8s.io/set-name=<machine_set_name>
    AWS 集群的示例输出:
    NAME                        CLUSTER          NODENAME                                    PROVIDERID                              PHASE           AGE     VERSION
    <machine_name_original_1>   <cluster_name>   <original_1_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running         4h
    <machine_name_original_2>   <cluster_name>   <original_2_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running         4h
  6. 对于每个由更新后的计算机会合管理的机器,运行以下命令设置delete注释:

    $ oc annotate machines.cluster.x-k8s.io/<machine_name_original_1> \
      -n openshift-cluster-api \
      cluster.x-k8s.io/delete-machine="true"
  7. 要使用新配置创建替换机器,请运行以下命令将计算机会合的副本数量增加一倍:

    $ oc scale --replicas=4 \(1)
      machinesets.cluster.x-k8s.io <machine_set_name> \
      -n openshift-cluster-api
    1 原始示例值2加倍为4
  8. 运行以下命令列出由更新后的计算机会合管理的机器:

    $ oc get machines.cluster.x-k8s.io \
      -n openshift-cluster-api \
      -l cluster.x-k8s.io/set-name=<machine_set_name>
    AWS 集群的示例输出:
    NAME                        CLUSTER          NODENAME                                    PROVIDERID                              PHASE           AGE     VERSION
    <machine_name_original_1>   <cluster_name>   <original_1_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running         4h
    <machine_name_original_2>   <cluster_name>   <original_2_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running         4h
    <machine_name_updated_1>    <cluster_name>   <updated_1_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Provisioned     55s
    <machine_name_updated_2>    <cluster_name>   <updated_2_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Provisioning    55s

    当新机器处于运行中阶段时,您可以将计算机会合缩放到原始副本数量。

  9. 要删除使用旧配置创建的机器,请运行以下命令将计算机会合缩放到原始副本数量:

    $ oc scale --replicas=2 \(1)
      machinesets.cluster.x-k8s.io <machine_set_name> \
      -n openshift-cluster-api
    1 原始示例值2
验证
  • 要验证由更新后的机器集合创建的机器是否具有正确的配置,请运行以下命令检查新机器之一的 CR 中的相关字段:

    $ oc describe machines.cluster.x-k8s.io <machine_name_updated_1> \
      -n openshift-cluster-api
  • 要验证是否已删除未更新配置的计算机会,请运行以下命令列出由更新后的计算机会合管理的机器:

    $ oc get machines.cluster.x-k8s.io \
      -n openshift-cluster-api \
      cluster.x-k8s.io/set-name=<machine_set_name>
    AWS 集群在删除进行中的示例输出:
    NAME                        CLUSTER          NODENAME                                    PROVIDERID                              PHASE      AGE     VERSION
    <machine_name_original_1>   <cluster_name>   <original_1_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m
    <machine_name_original_2>   <cluster_name>   <original_2_ip>.<region>.compute.internal   aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m
    <machine_name_updated_1>    <cluster_name>   <updated_1_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m
    <machine_name_updated_2>    <cluster_name>   <updated_2_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m
    AWS 集群在删除完成后的示例输出:
    NAME                        CLUSTER          NODENAME                                    PROVIDERID                              PHASE      AGE     VERSION
    <machine_name_updated_1>    <cluster_name>   <updated_1_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m
    <machine_name_updated_2>    <cluster_name>   <updated_2_ip>.<region>.compute.internal    aws:///us-east-2a/i-04e7b2cbd61fd2075   Running    18m