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 集群。其原则也适用于其他云部署。但是,针对其他部署的设备命名模式会有所不同,应该根据具体情况进行决定。
流程
在命令行中更改为
openshift-machine-api命名空间:$ oc project openshift-machine-api从
worker-user-datasecret 创建新 secret:将 secret 的
userData部分导出到文本文件:$ oc get secret worker-user-data --template='{{index .data.userData | base64decode}}' | jq > userData.txt编辑文本文件,为要用于新节点的分区添加
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": 03 } ] } ], "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 挂载单元。
将
disableTemplating部分从work-user-datasecret 提取到文本文件:$ oc get secret worker-user-data --template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt从两个文本文件创建新用户数据机密文件。此用户数据 secret 将
userData.txt文件中的额外节点分区信息传递给新创建的节点。$ oc create secret generic worker-user-data-x5 --from-file=userData=userData.txt --from-file=disableTemplating=disableTemplating.txt
为新节点创建新计算机器集:
创建新的计算机器集 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-nvme1n11 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/nvme1n12 ebs: encrypted: true iops: 0 volumeSize: 120 volumeType: gp2 - DeviceName: /dev/nvme1n23 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-x54 创建计算机器集:
$ oc create -f <file-name>.yaml机器可能需要一些时间才可用。
验证新分区和节点是否已创建:
验证是否已创建计算机器设置:
$ 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 2m35s1 - 1
- 这是新的计算机器集。
验证新节点是否已创建:
$ 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.31 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
- 这是新节点。
验证新节点上是否创建了自定义
/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 /var1 - 1
nvme1n1设备被挂载到/var分区。