波若金刚掌@如何给CoreOS扩磁盘

大魏@波若金刚掌:

给RHCOS扩盘有两种情况:

  1. 把在基础架构层把现有给RHCOS的磁盘扩大。

  2. 给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:

波若金刚掌@如何给CoreOS扩磁盘

接下来,创建挂在磁盘的mc:

apiVersion: machineconfiguration.openshift.io/v1kind: MachineConfigmetadata:labels:machineconfiguration.openshift.io/role: largediskname: 98-var-lib-containersspec:config:ignition:config: {}security:tls: {}timeouts: {}version: 2.2.0systemd:units:- contents: |[Unit]Description=Make File System on /dev/sdbDefaultDependencies=noBindsTo=dev-sdb.deviceAfter=dev-sdb.device var.mountBefore=systemd-fsck@dev-sdb.serviceBefore=shutdown.target

[Service]Type=oneshotRemainAfterExit=yesExecStart=/bin/bash -c "/bin/rm -rf /var/lib/containers/*"ExecStart=/bin/chcon -t fixed_disk_device_t /dev/sdbExecStart=/usr/lib/systemd/systemd-makefs xfs /dev/sdbTimeoutSec=0

[Install]WantedBy=var-lib-containers.mountenabled: truename: systemd-mkfs@dev-sdb.service- contents: |[Unit]Description=Mount /dev/sdb to /var/lib/containersBefore=local-fs.targetRequires=systemd-mkfs@dev-sdb.serviceAfter=systemd-mkfs@dev-sdb.service

[Mount]What=/dev/sdbWhere=/var/lib/containersType=xfsOptions=defaults,prjquota

[Install]WantedBy=local-fs.targetenabled: truename: var-lib-containers.mount- contents: |[Unit]Description=Restore recursive SELinux security contextsDefaultDependencies=noAfter=var-lib-containers.mountBefore=shutdown.target

[Service]Type=oneshotRemainAfterExit=yesExecStart=/sbin/restorecon -R /var/lib/containers/TimeoutSec=0

[Install]WantedBy=multi-user.targetenabled: truename: restorecon-var-lib-containers.service

应用配置:

# oc apply -f mc.yaml

machineconfig.machineconfiguration.openshift.io/98-var-lib-containers created


我们看到mcp largedisk中已经有mc了,并且状态是对的:

波若金刚掌@如何给CoreOS扩磁盘

配置完毕后,节点将会自动重启sdb会做成xfs挂在到/var/lib/containers上,因此之间旧的镜像数据就不存在了。想找回来,就根据加盘之前的备份进行恢复。4952011


上一篇:解决 Docker 日志文件太大的问题


下一篇:第6章:深入理解Pod对象