$ openstack flavor create --<ram 16384> --<disk 0> --ephemeral 10 --vcpus 4 <flavor_name>
作为第 2 天操作,您可以通过将 etcd 从根卷(由 OpenStack Cinder 提供)移动到专用的临时本地磁盘来解决和防止 Red Hat OpenStack Platform (RHOSP) 安装的性能问题。
如果您有现有的 RHOSP 云,您可以将 etcd 从该云移动到专用的临时本地磁盘。
您有一个具有正常运行的 Cinder 的 OpenStack 云。
您的 OpenStack 云至少有 75 GB 的可用存储空间,以容纳 OpenShift 控制平面的 3 个根卷。
OpenStack 云使用使用本地存储后端而不是 `rbd` 的 Nova 临时存储进行部署。
通过运行以下命令创建一个至少有 10 GB 临时磁盘的控制平面 Nova 实例规格,根据您的环境替换 `--ram`、`--disk` 和 <flavor_name> 的值
$ openstack flavor create --<ram 16384> --<disk 0> --ephemeral 10 --vcpus 4 <flavor_name>
部署一个带有控制平面根卷的集群;例如
# ...
controlPlane:
name: master
platform:
openstack:
type: ${CONTROL_PLANE_FLAVOR}
rootVolume:
size: 25
types:
- ${CINDER_TYPE}
replicas: 3
# ...
通过运行以下命令部署您创建的集群
$ openshift-install create cluster --dir <installation_directory> (1)
1 | 对于 `<installation_directory>`,请指定您之前创建的自定义 `./install-config.yaml 文件` 的位置。 |
在继续下一步之前,通过运行以下命令验证您部署的集群是否健康
$ oc wait clusteroperators --all --for=condition=Progressing=false (1)
1 | 确保集群操作员已完成进度,并且集群没有在部署或更新。 |
使用以下 YAML 文件创建一个名为 `98-var-lib-etcd.yaml` 的文件
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: master
name: 98-var-lib-etcd
spec:
config:
ignition:
version: 3.4.0
systemd:
units:
- contents: |
[Unit]
Description=Mount local-etcd to /var/lib/etcd
[Mount]
What=/dev/disk/by-label/local-etcd (1)
Where=/var/lib/etcd
Type=xfs
Options=defaults,prjquota
[Install]
WantedBy=local-fs.target
enabled: true
name: var-lib-etcd.mount
- contents: |
[Unit]
Description=Create local-etcd filesystem
DefaultDependencies=no
After=local-fs-pre.target
ConditionPathIsSymbolicLink=!/dev/disk/by-label/local-etcd (2)
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "[ -L /dev/disk/by-label/ephemeral0 ] || ( >&2 echo Ephemeral disk does not exist; /usr/bin/false )"
ExecStart=/usr/sbin/mkfs.xfs -f -L local-etcd /dev/disk/by-label/ephemeral0 (3)
[Install]
RequiredBy=dev-disk-by\x2dlabel-local\x2detcd.device
enabled: true
name: create-local-etcd.service
- contents: |
[Unit]
Description=Migrate existing data to local etcd
After=var-lib-etcd.mount
Before=crio.service (4)
Requisite=var-lib-etcd.mount
ConditionPathExists=!/var/lib/etcd/member
ConditionPathIsDirectory=/sysroot/ostree/deploy/rhcos/var/lib/etcd/member (5)
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "if [ -d /var/lib/etcd/member.migrate ]; then rm -rf /var/lib/etcd/member.migrate; fi" (6)
ExecStart=/usr/bin/cp -aZ /sysroot/ostree/deploy/rhcos/var/lib/etcd/member/ /var/lib/etcd/member.migrate
ExecStart=/usr/bin/mv /var/lib/etcd/member.migrate /var/lib/etcd/member (7)
[Install]
RequiredBy=var-lib-etcd.mount
enabled: true
name: migrate-to-local-etcd.service
- contents: |
[Unit]
Description=Relabel /var/lib/etcd
After=migrate-to-local-etcd.service
Before=crio.service
Requisite=var-lib-etcd.mount
[Service]
Type=oneshot
RemainAfterExit=yes
ExecCondition=/bin/bash -c "[ -n \"$(restorecon -nv /var/lib/etcd)\" ]" (8)
ExecStart=/usr/sbin/restorecon -R /var/lib/etcd
[Install]
RequiredBy=var-lib-etcd.mount
enabled: true
name: relabel-var-lib-etcd.service
1 | etcd 数据库必须由设备而不是标签挂载,以确保 `systemd` 生成此配置中使用的设备依赖项以触发文件系统创建。 |
2 | 如果文件系统 `dev/disk/by-label/local-etcd` 已经存在,则不要运行。 |
3 | 如果 `dev/disk/by-label/ephemeral0` 不存在,则会发出警报消息并失败。 |
4 | 将现有数据迁移到本地 etcd 数据库。此配置在挂载 `/var/lib/etcd` 后但 CRI-O 启动前执行此操作,因此 etcd 尚未运行。 |
5 | 要求挂载 etcd 且不包含成员目录,但 ostree 包含。 |
6 | 清理任何之前的迁移状态。 |
7 | 分步复制和移动以确保完整成员目录的原子创建。 |
8 | 在执行完全递归重命名之前,对挂载点目录进行快速检查。如果文件路径 `/var/lib/etcd` 中的 restorecon 无法重命名目录,则不执行递归重命名。 |
将 `98-var-lib-etcd.yaml` 文件应用于系统后,请勿将其删除。删除此文件将破坏 etcd 成员并导致系统不稳定。 如果需要回滚,请修改 |
运行以下命令创建新的MachineConfig
对象:
$ oc create -f 98-var-lib-etcd.yaml
将 etcd 数据库移动到每个控制平面机器的本地磁盘需要一些时间。 |
运行以下命令验证 etcd 数据库是否已转移到每个控制平面的本地磁盘:
运行以下命令验证集群是否仍在更新:
$ oc wait --timeout=45m --for=condition=Updating=false machineconfigpool/master
运行以下命令验证集群是否已准备就绪:
$ oc wait node --selector='node-role.kubernetes.io/master' --for condition=Ready --timeout=30s
运行以下命令验证集群操作符是否在集群中运行:
$ oc wait clusteroperators --timeout=30m --all --for=condition=Progressing=false