13.4. 使用 control plane 机器集管理 control plane 机器

control plane 机器集自动执行 control plane 管理的几个重要方面。

13.4.1. 替换 control plane 机器

要替换具有 control plane 机器集的集群中的 control plane 机器,请手动删除机器。control plane 机器集使用 control plane 机器集自定义资源 (CR) 中的规格替换已删除的机器。

流程

  1. 运行以下命令列出集群中的 control plane 机器:

    $ oc get machines \
      -l machine.openshift.io/cluster-api-machine-role==master \
      -n openshift-machine-api
  2. 运行以下命令来删除 control plane 机器:

    $ oc delete machine \
      -n openshift-machine-api \
      <control_plane_machine_name> 1
    1
    指定要删除的 control plane 机器的名称。
    注意

    如果删除了多个 control plane 机器,control plane 机器集会根据配置的更新策略替换它们:

    • 对于使用默认 RollingUpdate 更新策略的集群,Operator 会一次替换一台机器,直到替换每台机器为止。
    • 对于配置为使用 OnDelete 更新策略的集群,Operator 会同时创建所有所需的替换机器。

    这两种策略在 control plane 机器替换过程中维护 etcd 健康状况。

13.4.2. 更新 control plane 配置

您可以通过更新 control plane 机器集自定义资源 (CR) 中的规格来更改 control plane 中机器的配置。

Control Plane Machine Set Operator 监控 control plane 机器,并将其配置与 control plane 机器集 CR 中的规格进行比较。当 CR 中的规格和 control plane 机器的配置之间存在不同时,Operator 会标记 control plane 机器以进行替换。

注意

如需有关 CR 中参数的更多信息,请参阅"Control plane 机器集配置"。

先决条件

  • 集群有一个已激活并可正常工作的 Control Plane Machine Set Operator。

流程

  1. 运行以下命令来编辑 control plane 机器集 CR:

    $ oc edit controlplanemachineset.machine.openshift.io cluster \
      -n openshift-machine-api
  2. 更改您要在集群配置中更新的任何字段的值。
  3. 保存您的更改。

后续步骤

  • 对于使用默认 RollingUpdate 更新策略的集群,control plane 机器集会自动将更改传播到 control plane 配置。
  • 对于配置为使用 OnDelete 更新策略的集群,您必须手动替换 control plane 机器。

13.4.2.1. 自动更新 control plane 配置

RollingUpdate 更新策略会自动将更改传播到 control plane 配置。此更新策略是 control plane 机器集的默认配置。

对于使用 RollingUpdate 更新策略的集群,Operator 会使用 CR 中指定的配置创建一个替代 control plane 机器。当替换的 control plane 机器就绪时,Operator 会删除标记为替换的 control plane 机器。然后,替换机器加入 control plane。

如果多个 control plane 机器标记为替换,Operator 会一次重复这个替换过程来防止 etcd 健康状况,直到替换每台机器为止。

13.4.2.2. 手动更新 control plane 配置

您可以通过手动替换机器,使用 OnDelete 更新策略将更改传播到 control plane 配置。手动替换机器允许您在更广泛地应用更改前在单个机器上测试对配置的更改。

对于配置为使用 OnDelete 更新策略的集群,Operator 会在删除现有机器时创建一个替换 control plane 机器。当替换的 control plane 机器就绪时,etcd Operator 允许删除现有机器。然后,替换机器加入 control plane。

如果删除了多个 control plane 机器,Operator 会同时创建所有必需的替换机器。Operator 通过防止一次从 control plane 中删除多个机器来维护 etcd 健康状况。

13.4.3. 为 control plane 机器启用 Amazon Web Services 功能

您可以通过更改 control plane 机器集的配置,在 control plane 机器上启用 Amazon Web Services (AWS) 功能。当您将更新保存到 control plane 机器集时,Control Plane Machine Set Operator 会根据您配置的更新策略更新 control plane 机器。

13.4.3.1. 将 API 服务器限制为私有

将集群部署到 Amazon Web Services (AWS) 后,您可以将 API 服务器重新配置为只使用私有区。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 使用具有 admin 权限的用户登陆到 web 控制台。

流程

  1. 在云供应商的 web 门户或控制台中,执行以下操作:

    1. 找到并删除相关的负载均衡器组件:

      • 对于 AWS,删除外部负载均衡器。私有区的 API DNS 条目已指向内部负载均衡器,它使用相同的配置,因此您无需修改内部负载均衡器。
    2. 在公共区中删除 api.$clustername.$yourdomain DNS 条目。
  2. 通过删除 control plane 机器集自定义资源中的以下行来删除外部负载均衡器:

    providerSpec:
      value:
        loadBalancers:
        - name: lk4pj-ext 1
          type: network 2
        - name: lk4pj-int
          type: network
    1 2
    删除这一行。

13.4.3.2. 使用 control plane 机器集更改 Amazon Web Services 实例类型

您可以通过更新 control plane 机器集自定义资源 (CR) 中的规格来更改 control plane 机器使用的 Amazon Web Services (AWS) 实例类型。

先决条件

  • 您的 AWS 集群使用 control plane 机器集。

流程

  1. 编辑 providerSpec 字段中的以下行:

    providerSpec:
      value:
        ...
        instanceType: <compatible_aws_instance_type> 1
    1
    使用与之前选择相同的基础指定较大的 AWS 实例类型。例如,您可以将 m6i.xlarge 更改为 m6i.2xlargem6i.4xlarge
  2. 保存您的更改。

13.4.3.3. Amazon EC2 实例元数据服务的机器集选项

您可以使用机器集创建使用 Amazon EC2 实例元数据服务 (IMDS) 的特定版本的机器。机器集可以创建允许使用 IMDSv1 和 IMDSv2 的机器或需要使用 IMDSv2 的机器。

注意

只有在 OpenShift Container Platform 版本 4.7 或更高版本中创建的 AWS 集群上才支持使用 IMDSv2。

要更改现有机器的 IMDS 配置,请编辑管理这些机器的机器设置 YAML 文件。

重要

在配置机器集来创建需要 IMDSv2 的机器前,请确保与 AWS 元数据服务交互的工作负载都支持 IMDSv2。

13.4.3.3.1. 使用机器集配置 IMDS

您可以通过在机器集 YAML 文件中添加或编辑 metadataServiceOptions.authentication,来指定是否需要使用 IMDSv2。

先决条件

  • 要使用 IMDSv2,您的 AWS 集群必须使用 OpenShift Container Platform 版本 4.7 或更高版本创建。

流程

  • providerSpec 字段中添加或编辑以下行:

    providerSpec:
      value:
        metadataServiceOptions:
          authentication: Required 1
    1
    为了要求 IMDSv2,请将参数值设置为 Required。要允许使用 IMDSv1 和 IMDSv2,请将参数值设置为 Optional。如果没有指定值,则允许 IMDSv1 和 IMDSv2。

13.4.3.4. 将机器部署为 Dedicated 实例的机器集

您可以创建在 AWS 上运行的机器集,该机器将机器部署为 Dedicated 实例。专用实例在专用于单一客户的硬件上运行虚拟私有云(VPC)。这些 Amazon EC2 实例在主机硬件级别被物理隔离。Dedicated 实例的隔离也会存在,即使实例属于链接到一个 Forer 帐户的不同 AWS 帐户。但是,其他未专用实例如果属于同一 AWS 帐户,则可以与 Dedicated 实例共享硬件。

Machine API 支持具有公共或专用租期的实例。具有公共租期的实例在共享硬件上运行。公共租期是默认租期。具有专用租期的实例在单租户硬件上运行。

13.4.3.4.1. 使用机器集创建 Dedicated 实例

您可以使用 Machine API 集成来运行由 Dedicated 实例支持的机器。设置机器设置 YAML 文件中的 tenancy 字段,以便在 AWS 上启动 Dedicated 实例。

流程

  • providerSpec 字段中指定专用租户:

    providerSpec:
      placement:
        tenancy: dedicated

13.4.4. 为 control plane 机器启用 Microsoft Azure 功能

您可以通过更改 control plane 机器集的配置在 control plane 机器上启用 Microsoft Azure 功能。当您将更新保存到 control plane 机器集时,Control Plane Machine Set Operator 会根据您配置的更新策略更新 control plane 机器。

13.4.4.1. 将 API 服务器限制为私有

将集群部署到 Microsoft Azure 后,您可以重新配置 API 服务器来只使用私有区。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 使用具有 admin 权限的用户登陆到 web 控制台。

流程

  1. 在云供应商的 web 门户或控制台中,执行以下操作:

    1. 找到并删除相关的负载均衡器组件:

      • 对于 Azure,删除负载均衡器的 api-internal 规则。
    2. 在公共区中删除 api.$clustername.$yourdomain DNS 条目。
  2. 通过删除 control plane 机器集自定义资源中的以下行来删除外部负载均衡器:

    providerSpec:
      value:
        loadBalancers:
        - name: lk4pj-ext 1
          type: network 2
        - name: lk4pj-int
          type: network
    1 2
    删除这一行。

13.4.4.2. 选择 Azure Marketplace 镜像

您可以创建在 Azure 上运行的机器集,以部署使用 Azure Marketplace 产品的机器。要使用此产品,您必须首先获取 Azure Marketplace 镜像。在获取您的镜像时,请考虑以下事项:

  • 虽然镜像相同,但 Azure Marketplace publisher 根据您的区域。如果您位于北美,请将 redhat 指定为发布者。如果您位于 EMEA,请将 redhat-limited 指定为发布者。
  • 此项优惠包括 rh-ocp-worker SKU 和 rh-ocp-worker-gen1 SKU。rh-ocp-worker SKU 代表 Hyper-V 生成版本 2 虚拟机镜像。OpenShift Container Platform 中使用的默认实例类型与版本 2 兼容。如果您计划使用与版本 1 兼容的实例类型,请使用与 rh-ocp-worker-gen1 SKU 关联的镜像。rh-ocp-worker-gen1 SKU 代表 Hyper-V 版本 1 虚拟机镜像。
重要

在使用 64 位 ARM 实例的集群上不支持使用 Azure marketplace 安装镜像。

先决条件

  • 已安装 Azure CLI 客户端 (az)
  • 您的 Azure 帐户为产品授权,您使用 Azure CLI 客户端登录到此帐户。

流程

  1. 运行以下命令之一,显示所有可用的 OpenShift Container Platform 镜像:

    • 北美:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100               4.8.2021122100
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100         4.8.2021122100

    • 欧洲、中东和非洲地区:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table

      输出示例

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100       4.8.2021122100
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100  4.8.2021122100

    注意

    无论您安装的 OpenShift Container Platform 版本是什么,要使用的 Azure Marketplace 镜像的正确版本都是 4.8。如果需要,您的虚拟机会在安装过程中自动升级。

  2. 运行以下命令之一检查您的所提供的镜像:

    • 北美:

      $ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  3. 运行以下命令之一查看提供的术语:

    • 北美:

      $ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  4. 运行以下命令之一接受产品条款:

    • 北美:

      $ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • 欧洲、中东和非洲地区:

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 记录您所提供的镜像详情,特别是 publisher, offer, sku, 和 version 的值。
  6. 使用您提供的镜像详情,在机器集 YAML 文件的 providerSpec 部分添加以下参数:

    Azure Marketplace 机器的 providerSpec 镜像值示例

    providerSpec:
      value:
        image:
          offer: rh-ocp-worker
          publisher: redhat
          resourceID: ""
          sku: rh-ocp-worker
          type: MarketplaceWithPlan
          version: 4.8.2021122100

13.4.4.3. 启用 Azure 引导诊断

您可以在机器集创建的 Azure 机器上启用引导诊断。

先决条件

  • 已有 Microsoft Azure 集群。

流程

  • 将适用于您的存储类型的 diagnostics 配置添加到机器集 YAML 文件中的 providerSpec 字段中:

    • 对于 Azure Managed 存储帐户:

      providerSpec:
        diagnostics:
          boot:
            storageAccountType: AzureManaged 1
      1
      指定 Azure Managed 存储帐户。
    • 对于 Azure Unmanaged 存储帐户:

      providerSpec:
        diagnostics:
          boot:
            storageAccountType: CustomerManaged 1
            customerManaged:
              storageAccountURI: https://<storage-account>.blob.core.windows.net 2
      1
      指定 Azure Unmanaged 存储帐户。
      2
      <storage-account> 替换为存储帐户的名称。
      注意

      仅支持 Azure Blob Storage 数据服务。

验证

  • 在 Microsoft Azure 门户上,查看机器集部署的机器的 Boot diagnostics 页面,并验证您可以看到机器的串行日志。

13.4.4.4. 使用计算磁盘部署机器的机器集作为数据磁盘

您可以创建在 Azure 上运行的机器集,该机器集用来部署带有巨型磁盘的机器。ultra 磁盘是高性能存储,用于要求最苛刻的数据工作负载。

13.4.4.4.1. 使用机器集创建带有巨型磁盘的机器

您可以通过编辑机器集 YAML 文件在 Azure 上部署带有巨型磁盘的机器。

先决条件

  • 已有 Microsoft Azure 集群。

流程

  1. 运行以下命令,使用 master 数据 secret 在 openshift-machine-api 命名空间中创建自定义 secret:

    $ oc -n openshift-machine-api \
    get secret <role>-user-data \ 1
    --template='{{index .data.userData | base64decode}}' | jq > userData.txt 2
    1
    <role> 替换为 master
    2
    指定 userData.txt 作为新自定义 secret 的名称。
  2. 在文本编辑器中,打开 userData.txt 文件,并在文件中找到最后的 } 字符。

    1. 在紧接下来的行中,添加一个 ,
    2. , 之后创建一个新行并添加以下配置详情:

      "storage": {
        "disks": [ 1
          {
            "device": "/dev/disk/azure/scsi1/lun0", 2
            "partitions": [ 3
              {
                "label": "lun0p1", 4
                "sizeMiB": 1024, 5
                "startMiB": 0
              }
            ]
          }
        ],
        "filesystems": [ 6
          {
            "device": "/dev/disk/by-partlabel/lun0p1",
            "format": "xfs",
            "path": "/var/lib/lun0p1"
          }
        ]
      },
      "systemd": {
        "units": [ 7
          {
            "contents": "[Unit]\nBefore=local-fs.target\n[Mount]\nWhere=/var/lib/lun0p1\nWhat=/dev/disk/by-partlabel/lun0p1\nOptions=defaults,pquota\n[Install]\nWantedBy=local-fs.target\n", 8
            "enabled": true,
            "name": "var-lib-lun0p1.mount"
          }
        ]
      }
      1
      您要作为 ultra 磁盘附加到节点的磁盘的配置详情。
      2
      指定您使用的机器集的 dataDisks 小节中定义的 lun 值。例如,如果机器集包含 lun: 0,请指定 lun0。您可以通过在这个配置文件中指定多个 "disks" 条目来初始化多个数据磁盘。如果您指定多个 "disks" 条目,请确保每个条目的 lun 值与机器集中的值匹配。
      3
      磁盘上新分区的配置详情。
      4
      为分区指定标签。使用分层的名称可能会有帮助,如 lun0p1 代表 lun0 的第一个分区。
      5
      指定分区的总大小(以 MiB 为单位)。
      6
      指定在格式化分区时要使用的文件系统。使用分区标签来指定分区。
      7
      指定一个 systemd 单元来在引导时挂载分区。使用分区标签来指定分区。您可以通过在这个配置文件中指定多个 "partitions" 条目来创建多个分区。如果指定多个 "partitions" 条目,则必须为每个条目指定一个 systemd 单元。
      8
      对于 where,指定 storage.filesystems.path 的值。对于 What,指定 storage.filesystems.device 的值。
  3. 运行以下命令,将禁用模板值提取到名为 disableTemplating.txt 的文件:

    $ oc -n openshift-machine-api get secret <role>-user-data \ 1
    --template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt
    1
    <role> 替换为 master
  4. 运行以下命令组合 userData.txt 文件和 disableTemplating.txt 文件来创建数据 secret 文件:

    $ oc -n openshift-machine-api create secret generic <role>-user-data-x5 \ 1
    --from-file=userData=userData.txt \
    --from-file=disableTemplating=disableTemplating.txt
    1
    对于 <role>-user-data-x5,请指定 secret 的名称。将 <role> 替换为 master
  5. 运行以下命令来编辑 control plane 机器集 CR:

    $ oc --namespace openshift-machine-api edit controlplanemachineset.machine.openshift.io cluster
  6. 在指示的位置中添加以下行:

    apiVersion: machine.openshift.io/v1beta1
    kind: ControlPlaneMachineSet
    spec:
      template:
        spec:
          metadata:
            labels:
              disk: ultrassd 1
          providerSpec:
            value:
              ultraSSDCapability: Enabled 2
              dataDisks: 3
              - nameSuffix: ultrassd
                lun: 0
                diskSizeGB: 4
                deletionPolicy: Delete
                cachingType: None
                managedDisk:
                  storageAccountType: UltraSSD_LRS
              userDataSecret:
                name: <role>-user-data-x5 4
    1
    指定标签,用于选择此机器集创建的节点。此流程使用 disk.ulssd 用于这个值。
    2 3
    这些行支持使用 ultra 磁盘。对于 dataDisks,请包括整个小节。
    4
    指定之前创建的用户数据 secret。将 <role> 替换为 master
  7. 保存您的更改。

    • 对于使用默认 RollingUpdate 更新策略的集群,Operator 会自动将更改传播到 control plane 配置。
    • 对于配置为使用 OnDelete 更新策略的集群,您必须手动替换 control plane 机器。

验证

  1. 运行以下命令验证机器是否已创建:

    $ oc get machines

    机器应处于 Running 状态。

  2. 对于正在运行并附加节点的机器,请运行以下命令验证分区:

    $ oc debug node/<node-name> -- chroot /host lsblk

    在这个命令中,oc debug node/<node-name> 会在节点 <node-name> 上启动一个 debugging shell,并传递一个带有 -- 的命令。传递的命令 chroot /host 提供对底层主机操作系统二进制文件的访问,lsblk 显示连接至主机操作系统计算机的块设备。

后续步骤

  • 要在 control plane 上使用 ultra 磁盘,请重新配置工作负载以使用 control plane 的 ultra 磁盘挂载点。
13.4.4.4.2. 启用 ultra 磁盘的机器集的故障排除资源

使用本节中的信息从您可能会遇到的问题了解和恢复。

13.4.4.4.2.1. 不正确的 ultra 磁盘配置

如果在机器集中指定 ultraSSDCapability 参数的配置不正确,则机器置备会失败。

例如,如果 ultraSSDCapability 参数设置为 Disabled,但在 dataDisks 参数中指定了 ultra 磁盘,则会出现以下出错信息:

StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
  • 要解决这个问题,请验证机器集配置是否正确。
13.4.4.4.2.2. 不支持的磁盘参数

如果在机器集中指定与 ultra 磁盘不兼容的区域、可用性区域或实例大小,则机器置备会失败。检查日志中的以下出错信息:

failed to create vm <machine_name>: failure sending request for machine <machine_name>: cannot create vm: compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="BadRequest" Message="Storage Account type 'UltraSSD_LRS' is not supported <more_information_about_why>."
  • 要解决这个问题,请验证您是否在受支持的环境中使用此功能,以及机器设置配置是否正确。
13.4.4.4.2.3. 无法删除磁盘

如果因为数据磁盘无法按预期工作,则会删除大量磁盘,则机器会被删除,数据磁盘会孤立。如果需要,您必须手动删除孤立的磁盘。

13.4.4.5. 为机器集启用客户管理的加密密钥

您可以为 Azure 提供加密密钥,以便加密受管磁盘上的数据。您可以使用 Machine API 使用客户管理的密钥启用服务器端加密。

使用客户管理的密钥需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须在 Cloud Credential Operator(CCO)授予权限的资源组中。如果没有,则需要在磁盘加密集中授予额外的 reader 角色。

流程

  • 在机器集 YAML 文件中的 providerSpec 字段中配置磁盘加密集。例如:

    providerSpec:
      value:
        osDisk:
          diskSizeGB: 128
          managedDisk:
            diskEncryptionSet:
              id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name>
            storageAccountType: Premium_LRS

13.4.4.6. Microsoft Azure 虚拟机的加速网络

加速网络使用单一根 I/O 虚拟化(SR-IOV)为 Microsoft Azure 虚拟机提供更直接的路径到交换机。这提高了网络性能。这个功能可以在安装后启用。

13.4.4.6.1. 限制

在决定是否使用加速网络时,请考虑以下限制:

  • 只有在 Machine API 操作的集群中支持加速网络。
  • 加速网络需要一个 Azure 虚拟机,其大小需要可以包括最少四个 vCPU。为了满足此要求,您可以在机器集中更改 vmSize 的值。有关 Azure VM 大小的信息,请参阅 Microsoft Azure 文档

13.4.4.6.2. 在现有 Microsoft Azure 集群上启用加速网络

您可以通过在机器集 YAML 文件中添加 acceleratedNetworking,在 Azure 上启用加速网络。

先决条件

  • 有一个现有的 Microsoft Azure 集群,其中的 Machine API 正常运行。

流程

  • providerSpec 字段中添加以下内容:

    providerSpec:
      value:
        acceleratedNetworking: true 1
        vmSize: <azure-vm-size> 2
    1
    此行启用加速网络。
    2
    指定包含至少四个 vCPU 的 Azure VM 大小。有关 VM 大小的信息,请参阅 Microsoft Azure 文档

验证

  • 在 Microsoft Azure 门户上,查看机器集调配的机器的 Networking 设置页面,并验证 Accelerated networking 字段设置为 Enabled