硬盘的分区主要目的有两个
- 便于维护硬件设备
- 安装分布式存储系统ceph集群的时候需要用到未格式化的分区
- 首先,master和worker节点都需要一个容器运行时环境,目前还是建议直接使用docker。使用docker的时候我们都知道,容器数据是存储在/var/lib/docker 这个目录的,在使用和操作过程中数据量会逐渐增加,所以建议为 /var/lib/docker 单独挂载一个硬盘。
- master节点需要安装etcd,etcd数据会存放在/var/lib/etcd 这个目录下,生产环境也建议直接给它挂载一个硬盘。
- worker节点会安装ceph存储,ceph存储需要有一块未格式化的磁盘。
所以结论如下:
- master 节点需要分两个区,分别需要挂载 /var/lib/docker 和/var/lib/etcd 目录
- worker 节点需要分两个区,一个用于挂载/var/lib/docker 目录,一块不要格式化并将其预留给ceph。
- 对于负载均衡器这个没要求,直接使用系统盘即可
磁盘分区挂载实战
master节点
master节点我们预备了160G,其中docker使用100G,etcd使用60G(其实etcd只需要10G左右就够了)
1. 查看磁盘挂载情况 df -h
1 | [root@k8s-master1 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 33M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/vda2 49G 2.4G 47G 5% / /dev/vda1 1014M 142M 873M 14% /boot tmpfs 3.2G 0 3.2G 0% /run/user/0 |
可以发现并未有磁盘挂载。
2. 查看磁盘分区情况
可以发现有两块空磁盘,/dev/vdb 100G 和 /dev/vdc 60G,接下来需要对其进行分区格式化
3. 对2块磁盘分别进行分区,以/dev/vdb 为例
使用fdisk命令进行分区
fdisk /dev/vdb
说明:
- 输入n进行分区,d删除分区
- 选择分区类型
- 这里有两个选项(推荐选择P):
- p:主分区 linux上主分区最多能有4个,如果要分多个区那就依次选1、2、3、4
- e:扩展分区 linux上扩展分区只能有1个,扩展分区创建后不能直接使用,还要在扩展分区上创建逻辑分区。
- 选择分区个数,可以选择4个分区,这里只需要分成1个区
- 设置柱面,这里选择默认值就可以,这里所有空间就会被分到一个区
- 输入w,写入分区表,进行分区
对/dev/vdb分完区后按照同样的步骤对/dev/vdc进行分区。
分区完成后再次查看磁盘分区情况
1 | fdisk -l |
可以看到磁盘/dev/vdb下已经有了一个分区/dev/vdb1,而/dev/vdc磁盘下也已经有了分区/dev/vdc1
4. 使用mkfs.ext4对分区后的磁盘进行格式化
1 | [root@k8s-master1 ~]# mkfs.ext4 /dev/vdb1 |
5. 挂载磁盘
1 | # 查看格式化后的UUID,用于挂载使用 |
可以看到格式化后的vdb1的uuid为b3351cfa-5623-4633-b4a6-9baab1d8e2d4 ,vdc1的UUID为3543f03e-0b16-4271-8601-f7f0b2222a92
编辑/etc/fstab文件,在最后一行加上需要挂载的磁盘UUID,并设置磁盘格式为ext4
1 | UUID=5a00d5df-880e-4f76-b61d-d712d353e8d9 / xfs defaults 0 0 |
分区挂载完成后手动挂载确认配置是否正常
1 | mount -a |
6. 验证分区挂载情况,可以看到已经给/var/lib/docker 和/var/lib/etcd 挂载了分区
[root@dev-k8s-master3 ~]#
1 | [root@dev-k8s-master3 ~]# df -h |
7. 挂载完成后建议重启机器
1 | [root@k8s-slb ~]# reboot |
挂载worker节点
worker节点挂载操作同master节点,不过需要注意的是,worker节点总共500G,我们需要将其中的100G独立分区并挂载到/var/lib/docker ,剩下的400G用作ceph存储使用,切记ceph的分区不需要格式化。
主体操作就不再演示,只需要关注将其分成2个区即可。
第一次分区:
分区完成后查看分区情况
[root@k8s-worker1 ~]#
1 | [root@k8s-worker1 ~]# fdisk -l |
可以看到vdb总共536.9G,一个分区/dev/vdb1 占用了100G空间,接着再对vdb进行第二次分区。
剩下的步骤如格式化、挂载、验证可以参考master节点。
切记,只需要挂载第一个100G的分区给/var/lib/docker,剩下的分区预留给ceph,不需要格式化挂载。
小结
正常情况下磁盘分区是运维工程师的事,不过有句话叫 “技多不压身”,多会点总不是坏事。
各位在生产环境使用docker的时候一定不要忘记分区挂载,或者提醒运维给你挂载好目录。还记得很早之前我们使用docker部署应用,由于未给其单独挂载磁盘,/var/lib/docker 默认使用系统盘空间,用了一段时间后就经常收到磁盘空间报警(系统盘只分配了50G),现在想起来还是觉得好笑。