1.6. 将 etcd 移动到不同的磁盘
您可以将 etcd 从共享磁盘移到独立磁盘,以防止或解决性能问题。
Machine Config Operator (MCO) 负责为 OpenShift Container Platform 4.11 容器存储挂载辅助磁盘。
这个过程不会将 root 文件系统的部分内容(如 /var/ )移到已安装节点上的另一个磁盘或分区。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用
cluster-admin权限访问集群。 -
MachineConfigPool必须与metadata.labels[machineconfiguration.openshift.io/role]匹配。这适用于控制器、worker 或自定义池。
流程
在一个 debug shell 中,使用
lsblk命令,将新磁盘添加到集群中,并验证节点中是否检测到磁盘:$ oc debug node/<node_name># lsblk记录下
lsblk命令报告的新磁盘的设备名称。创建名为
etcd-mc.yml的MachineConfigYAML 文件,其内容如下,将<new_disk_name>实例替换为记录的设备名称:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Make File System on /dev/<new_disk_name> DefaultDependencies=no BindsTo=dev-<new_disk_name>.device After=dev-<new_disk_name>.device var.mount Before=systemd-fsck@dev-<new_disk_name>.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/lib/systemd/systemd-makefs xfs /dev/<new_disk_name> TimeoutSec=0 [Install] WantedBy=var-lib-containers.mount enabled: true name: systemd-mkfs@dev-<new_disk_name>.service - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount - contents: | [Unit] Description=Sync etcd data if new mount is empty DefaultDependencies=no After=var-lib-etcd.mount var.mount Before=crio.service [Service] Type=oneshot RemainAfterExit=yes ExecCondition=/usr/bin/test ! -d /var/lib/etcd/member ExecStart=semanage fcontext -a -e /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ ExecStart=/bin/rsync -ar /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/ TimeoutSec=0 [Install] WantedBy=multi-user.target graphical.target enabled: true name: sync-var-lib-etcd-to-etcd.service - contents: | [Unit] Description=Restore recursive SELinux security contexts DefaultDependencies=no After=var-lib-etcd.mount Before=crio.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/sbin/restorecon -R /var/lib/etcd/ TimeoutSec=0 [Install] WantedBy=multi-user.target graphical.target enabled: true name: restorecon-var-lib-etcd.service以具有
cluster-admin权限的用户身份登录集群并创建机器配置:$ oc login -u <username> -p <password>$ oc create -f etcd-mc.yml节点已更新并重启。重启完成后,会出现以下事件:
- XFS 文件系统是在指定磁盘中创建的。
-
磁盘挂载到
/var/lib/etcd。 -
来自
/sysroot/ostree/deploy/rhcos/var/lib/etcd的内容同步到/var/lib/etcd。 -
对于
/var/lib/etcd,强制恢复SELinux标签。 - 旧内容不会被删除。
节点位于独立磁盘后,使用如下内容更新
etcd-mc.yml文件,将<new_disk_name>实例替换为记录的设备名称:apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 98-var-lib-etcd spec: config: ignition: version: 3.2.0 systemd: units: - contents: | [Unit] Description=Mount /dev/<new_disk_name> to /var/lib/etcd Before=local-fs.target Requires=systemd-mkfs@dev-<new_disk_name>.service After=systemd-mkfs@dev-<new_disk_name>.service var.mount [Mount] What=/dev/<new_disk_name> Where=/var/lib/etcd Type=xfs Options=defaults,prjquota [Install] WantedBy=local-fs.target enabled: true name: var-lib-etcd.mount应用修改的版本,删除创建和同步设备的逻辑,以防止节点重新引导:
$ oc replace -f etcd-mc.yml
验证步骤
在节点的 debug shell 中运行
grep <new_disk_name> /proc/mounts命令,以确保挂载磁盘:$ oc debug node/<node_name># grep <new_disk_name> /proc/mounts输出示例
/dev/nvme1n1 /var/lib/etcd xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,prjquota 0 0