7.2.5. 在 AWS 中使用自定义 /var 分区添加新的 RHCOS worker 节点


OpenShift Container Platform 使用 bootstrap 过程中完成的机器配置支持在安装过程中分区设备。但是,如果您使用 /var 分区,该设备名称必须在安装时确定,且不可更改。如果节点具有不同的设备命名模式,则无法将不同的实例类型添加为节点。例如,如果您将 /var 分区配置为 m4.large 实例的默认 AWS 设备名称,dev/xvdb,则无法直接添加 AWS m5.large 实例,因为 m5.large 实例默认使用 /dev/nvme1n1 设备。由于不同的命名模式,设备可能无法分区。

本节中的步骤演示了如何使用与安装时配置的不同设备名称的实例添加新的 Red Hat Enterprise Linux CoreOS(RHCOS)计算节点。您可以创建自定义用户数据 secret 并配置新的计算机器集。这些步骤特定于 AWS 集群。其原则也适用于其他云部署。但是,针对其他部署的设备命名模式会有所不同,应该根据具体情况进行决定。

流程

  1. 在命令行中更改为 openshift-machine-api 命名空间:

    $ oc project openshift-machine-api
  2. worker-user-data secret 创建新 secret:

    1. 将 secret 的 userData 部分导出到文本文件:

      $ oc get secret worker-user-data --template='{{index .data.userData | base64decode}}' | jq > userData.txt
    2. 编辑文本文件,为要用于新节点的分区添加 storage, filesystems, 和 systemd 小节。您可以根据需要指定任何 Ignition 配置参数

      注意

      不要更改 ignition 小节中的值。

      {
        "ignition": {
          "config": {
            "merge": [
              {
                "source": "https:...."
              }
            ]
          },
          "security": {
            "tls": {
              "certificateAuthorities": [
                {
                  "source": "data:text/plain;charset=utf-8;base64,.....=="
                }
              ]
            }
          },
          "version": "3.2.0"
        },
        "storage": {
          "disks": [
            {
              "device": "/dev/nvme1n1", 
      1
      
              "partitions": [
                {
                  "label": "var",
                  "sizeMiB": 50000, 
      2
      
                  "startMiB": 0 
      3
      
                }
              ]
            }
          ],
          "filesystems": [
            {
              "device": "/dev/disk/by-partlabel/var", 
      4
      
              "format": "xfs", 
      5
      
              "path": "/var" 
      6
      
            }
          ]
        },
        "systemd": {
          "units": [ 
      7
      
            {
              "contents": "[Unit]\nBefore=local-fs.target\n[Mount]\nWhere=/var\nWhat=/dev/disk/by-partlabel/var\nOptions=defaults,pquota\n[Install]\nWantedBy=local-fs.target\n",
              "enabled": true,
              "name": "var.mount"
            }
          ]
        }
      }
      1
      指定 AWS 块设备的绝对路径。
      2
      指定以兆字节为单位的数据分区大小。
      3
      指定以兆字节为单位的分区的开头。当在引导磁盘中添加数据分区时,推荐最少使用 25000 MB(Mebibytes)。root 文件系统会自动调整大小以填充所有可用空间(最多到指定的偏移值)。如果没有指定值,或者指定的值小于推荐的最小值,则生成的 root 文件系统会太小,而在以后进行的 RHCOS 重新安装可能会覆盖数据分区的开始部分。
      4
      指定到 /var 分区的绝对路径。
      5
      指定文件系统格式。
      6
      指定文件系统的挂载点,而 Ignition 运行时相对于根文件系统挂载的位置。这不一定与应在真实 root 中挂载的位置相同,但鼓励使其相同的位置。
      7
      定义将 /dev/disk/by-partlabel/var 设备挂载到 /var 分区的 systemd 挂载单元。
    3. disableTemplating 部分从 work-user-data secret 提取到文本文件:

      $ oc get secret worker-user-data --template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt
    4. 从两个文本文件创建新用户数据机密文件。此用户数据 secret 将 userData.txt 文件中的额外节点分区信息传递给新创建的节点。

      $ oc create secret generic worker-user-data-x5 --from-file=userData=userData.txt --from-file=disableTemplating=disableTemplating.txt
  3. 为新节点创建新计算机器集:

    1. 创建新的计算机器集 YAML 文件,类似于为 AWS 配置的文件。添加所需分区和新创建的用户数据 secret:

      提示

      使用现有计算机器集作为模板,并根据需要更改新节点的参数。

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: auto-52-92tf4
        name: worker-us-east-2-nvme1n1 
      1
      
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: auto-52-92tf4
            machine.openshift.io/cluster-api-machineset: auto-52-92tf4-worker-us-east-2b
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: auto-52-92tf4
              machine.openshift.io/cluster-api-machine-role: worker
              machine.openshift.io/cluster-api-machine-type: worker
              machine.openshift.io/cluster-api-machineset: auto-52-92tf4-worker-us-east-2b
          spec:
            metadata: {}
            providerSpec:
              value:
                ami:
                  id: ami-0c2dbd95931a
                apiVersion: awsproviderconfig.openshift.io/v1beta1
                blockDevices:
                - DeviceName: /dev/nvme1n1 
      2
      
                  ebs:
                    encrypted: true
                    iops: 0
                    volumeSize: 120
                    volumeType: gp2
                - DeviceName: /dev/nvme1n2 
      3
      
                  ebs:
                    encrypted: true
                    iops: 0
                    volumeSize: 50
                    volumeType: gp2
                credentialsSecret:
                  name: aws-cloud-credentials
                deviceIndex: 0
                iamInstanceProfile:
                  id: auto-52-92tf4-worker-profile
                instanceType: m6i.large
                kind: AWSMachineProviderConfig
                metadata:
                  creationTimestamp: null
                placement:
                  availabilityZone: us-east-2b
                  region: us-east-2
                securityGroups:
                - filters:
                  - name: tag:Name
                    values:
                    - auto-52-92tf4-worker-sg
                subnet:
                  id: subnet-07a90e5db1
                tags:
                - name: kubernetes.io/cluster/auto-52-92tf4
                  value: owned
                userDataSecret:
                  name: worker-user-data-x5 
      4
      1
      为新节点指定名称。
      2
      指定到 AWS 块设备的绝对路径,这里是一个加密的 EBS 卷。
      3
      可选。指定附加 EBS 卷。
      4
      指定用户数据 secret 文件。
    2. 创建计算机器集:

      $ oc create -f <file-name>.yaml

      机器可能需要一些时间才可用。

  4. 验证新分区和节点是否已创建:

    1. 验证是否已创建计算机器设置:

      $ oc get machineset

      输出示例

      NAME                                               DESIRED   CURRENT   READY   AVAILABLE   AGE
      ci-ln-2675bt2-76ef8-bdgsc-worker-us-east-1a        1         1         1       1           124m
      ci-ln-2675bt2-76ef8-bdgsc-worker-us-east-1b        2         2         2       2           124m
      worker-us-east-2-nvme1n1                           1         1         1       1           2m35s 
      1

      1
      这是新的计算机器集。
    2. 验证新节点是否已创建:

      $ oc get nodes

      输出示例

      NAME                           STATUS   ROLES    AGE     VERSION
      ip-10-0-128-78.ec2.internal    Ready    worker   117m    v1.27.3
      ip-10-0-146-113.ec2.internal   Ready    master   127m    v1.27.3
      ip-10-0-153-35.ec2.internal    Ready    worker   118m    v1.27.3
      ip-10-0-176-58.ec2.internal    Ready    master   126m    v1.27.3
      ip-10-0-217-135.ec2.internal   Ready    worker   2m57s   v1.27.3 
      1
      
      ip-10-0-225-248.ec2.internal   Ready    master   127m    v1.27.3
      ip-10-0-245-59.ec2.internal    Ready    worker   116m    v1.27.3

      1
      这是新节点。
    3. 验证新节点上是否创建了自定义 /var 分区:

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

      例如:

      $ oc debug node/ip-10-0-217-135.ec2.internal -- chroot /host lsblk

      输出示例

      NAME        MAJ:MIN  RM  SIZE RO TYPE MOUNTPOINT
      nvme0n1     202:0    0   120G  0 disk
      |-nvme0n1p1 202:1    0     1M  0 part
      |-nvme0n1p2 202:2    0   127M  0 part
      |-nvme0n1p3 202:3    0   384M  0 part /boot
      `-nvme0n1p4 202:4    0 119.5G  0 part /sysroot
      nvme1n1     202:16   0    50G  0 disk
      `-nvme1n1p1 202:17   0  48.8G  0 part /var 
      1

      1
      nvme1n1 设备被挂载到 /var 分区。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部