大魏@波若金刚掌:
给RHCOS扩盘有两种情况:
把在基础架构层把现有给RHCOS的磁盘扩大。
给RHCOS新加磁盘,挂在到某一个目录下。
情况1:我们以扩容RHCOS上的 /sysroot分区大小为例。
1. 默认的磁盘 120G /sysroot
[root@worker-2 ~]# df -ThFilesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 7.8G 0 7.8G 0% /devtmpfs tmpfs 7.9G 168K 7.9G 1% /dev/shmtmpfs tmpfs 7.9G 42M 7.8G 1% /runtmpfs tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup/dev/mapper/coreos-luks-root-nocrypt xfs 120G 7.1G 113G 6% /sysroottmpfs tmpfs 7.9G 4.0K 7.9G 1% /tmp/dev/sda1 ext4 364M 177M 165M 52% /boot/dev/sda2 vfat 127M 6.9M 120M 6% /boot/efi
2. 基础架构层扩大硬盘到 200G,然后执行脚本
/usr/libexec/rhcos-growpart /sysroot
下面是输出:
meta-data=/dev/mapper/coreos-luks-root-nocrypt isize=512 agcount=172, agsize=183039 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1data = bsize=4096 blocks=31321851, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 31321851 to 52293371
3. 检查扩容后磁盘大小
[root@worker-2 ~]# df -ThFilesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 7.8G 0 7.8G 0% /devtmpfs tmpfs 7.9G 168K 7.9G 1% /dev/shmtmpfs tmpfs 7.9G 42M 7.8G 1% /runtmpfs tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup/dev/mapper/coreos-luks-root-nocrypt xfs 200G 7.7G 192G 4% /sysroot <=========== 已经扩展到 200G了tmpfs tmpfs 7.9G 12K 7.9G 1% /tmp/dev/sda1 ext4 364M 177M 165M 52% /boot/dev/sda2 vfat 127M 6.9M 120M 6% /boot/efi
情况2:给RHCOS新加磁盘。
给RHCOS增加磁盘有两种做法:
1.官方做法:通过MC方式增加磁盘,因此增加磁盘的对象是MCP。如果想给某一个节点增加磁盘,那就需要多增加一个node role、多创建MCP。
2.PoC做法:参照RHEL的方式,书写 /etc/fstab,挂载磁盘。这种方式能生效,但会造成该节点的MCP有问题。会最终造成OCP无法升级。因此,这种方式,只能在小规模PoC环境使用。
下面我们介绍官方做法:
例如我们想把worker节点上的/dev/sdb磁盘挂在到/var/lib/containers目录下(worker节点的容器本地存储空间):
1.将/var/lib/containers目录下的内容备份(如果有重要数据),否则挂载了新盘,旧的内容就没了。
2.确认所有的worker节点都有这个sdb,并且都需要扩容。
如果只有某几个节点想扩容,如worker-2,那就需要做下面的操作。单独为这个节点创建label、mcp。
我们展示单独为一个worker节点增加磁盘这种情况。
如下步骤所示,首先为节点添加largedisk这个label。
oc label node worker-2.weixinyucluster3.bluecat.ltd node-role.kubernetes.io/largedisk=""node/worker-2.weixinyucluster3.bluecat.ltd labeled
查看work-2上新增加的label:
接下来,创建mcp:
#cat mcp.yaml
apiVersion: machineconfiguration.openshift.io/v1kind: MachineConfigPoolmetadata:name: largediskspec:machineConfigSelector:matchExpressions:- {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,largedisk]}nodeSelector:matchLabels:node-role.kubernetes.io/largedisk: ""paused: false
应用yaml配置后,我们看到mcp创建成功,但此时mcp中没有mc:
接下来,创建挂在磁盘的mc:
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: largedisk
name: 98-var-lib-containers
spec:
config:
ignition:
config: {}
security:
tls: {}
timeouts: {}
version: 2.2.0
systemd:
units:
- contents: |
[Unit]
Description=Make File System on /dev/sdb
DefaultDependencies=no
BindsTo=dev-sdb.device
After=dev-sdb.device var.mount
Before=systemd-fsck@dev-sdb.service
Before=shutdown.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "/bin/rm -rf /var/lib/containers/*"
ExecStart=/bin/chcon -t fixed_disk_device_t /dev/sdb
ExecStart=/usr/lib/systemd/systemd-makefs xfs /dev/sdb
TimeoutSec=0
[Install]
WantedBy=var-lib-containers.mount
enabled: true
name: systemd-mkfs@dev-sdb.service
- contents: |
[Unit]
Description=Mount /dev/sdb to /var/lib/containers
Before=local-fs.target
Requires=systemd-mkfs@dev-sdb.service
After=systemd-mkfs@dev-sdb.service
[Mount]
What=/dev/sdb
Where=/var/lib/containers
Type=xfs
Options=defaults,prjquota
[Install]
WantedBy=local-fs.target
enabled: true
name: var-lib-containers.mount
- contents: |
[Unit]
Description=Restore recursive SELinux security contexts
DefaultDependencies=no
After=var-lib-containers.mount
Before=shutdown.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/restorecon -R /var/lib/containers/
TimeoutSec=0
[Install]
WantedBy=multi-user.target
enabled: true
name: restorecon-var-lib-containers.service
应用配置:
# oc apply -f mc.yaml
machineconfig.machineconfiguration.openshift.io/98-var-lib-containers created
我们看到mcp largedisk中已经有mc了,并且状态是对的:
配置完毕后,节点将会自动重启sdb会做成xfs挂在到/var/lib/containers上,因此之间旧的镜像数据就不存在了。想找回来,就根据加盘之前的备份进行恢复。4952011