imagefs与nodefs

kubelet可以对磁盘进行管控,但是只能对nodefs与imagefs这两个分区进行管控。其中

  • imagefs: docker安装目录所在的分区

  • nodefs: kubelet的启动参数--root-dir所指定的目录(默认/var/lib/kubelet)所在的分区

接下来,我们来验证一下我们对imagefs与nodefs的理解。

前置条件

k8s集群使用1.8.6版本

$ kubectl get node
NAME             STATUS                     ROLES     AGE       VERSION
10.142.232.161   Ready                      <none>    263d      v1.8.6
10.142.232.162   NotReady                   <none>    263d      v1.8.6
10.142.232.163   Ready,SchedulingDisabled   <none>    227d      v1.8.6

10.142.232.161上docker安装在/app/docker目录下,kubelet的--root-dir没有设置,使用默认的/var/lib/kubelet/app是一块盘,使用率为70%;/是一块盘,使用率为57%;而imagesfs与nodefs此时设置的阈值都为80%,如下:

$ df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs   16G     0   16G    0% /dev
tmpfs                   tmpfs      16G     0   16G    0% /dev/shm
tmpfs                   tmpfs      16G  1.7G   15G   11% /run
tmpfs                   tmpfs      16G     0   16G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        45G   26G   20G   57% /
/dev/xvda1              xfs       497M  254M  243M   52% /boot
/dev/xvde               xfs       150G  105G   46G   70% /app

此时,10.142.232.161该node没有报磁盘的错

验证方案

  • 验证imagefs是/app/docker目录所在分区(/app分区使用率为70%)

    • 修改imagefs的阈值为60%,node应该报imagefs超标

    • 修改imagefs的阈值为80%,node应该正常

  • 验证nodefs是/var/lib/kubelet目录所在的分区(/分区使用率为57%)

    • 修改nodefs的阈值为50%,node应该报nodefs超标

    • 修改nodefs的阈值为60%,node应该正常

  • 修改kubelet启动参数--root-dir,将值设成/app/kubelet

    • 修改让imagefs的阈值为80%,nodefs的阈值为60%;此时应该报nodefs超标

    • 修改让imagefs的阈值为60%,nodefs的阈值为80%;此时应该报imagefs超标

    • 修改让imagefs的阈值为60%,nodefs的阈值为60%;此时应该报两个都超标

    • 修改让imagefs的阈值为80%,nodefs的阈值为80%;此时node应该正常

验证步骤

一、验证imagefs是/app/docker目录所在分区

1.1 修改imagefs的阈值为60%,node应该imagefs超标

如下,我们把imagefs的阈值设为60%

然后我们查看节点的状态,Attempting to reclaim imagefs,意思为尝试回收imagefs

1.2 修改imagefs的阈值为80%,node应该正常

我们把imagefs的阈值为80%

然后再来查看node的状态,NodeHasNoDiskPressure,说明imagefs使用率没有超过阈值了

二、验证nodefs是/var/lib/kubelet目录所在的分区(/分区使用率为57%)

2.1 修改nodefs的阈值为50%,node应该报nodefs超标

修改nodefs的阈值为50%

查看node的状态,报Attempting to reclaim nodefs,意思是尝试回收nodefs,也就是nodefs超标了

2.2 修改nodefs的阈值为60%,node应该正常

修改nodefs的阈值为60%

此时查看node的状态,已正常

三、修改kubelet启动参数--root-dir,将值设成/app/kubelet

以下几个参数的默认值都与/var/lib/kubelet有关

为了能够不再使用/var/lib/kubelet这个目录,我们需要对这四个参数显示设置。设置如下:

3.1 修改让imagefs的阈值为80%,nodefs的阈值为60%;此时应该报nodefs超标

查看节点的状态,只报Attempting to reclaim nodefs,也就是说nodefs超标

3.2 修改让imagefs的阈值为60%,nodefs的阈值为80%;此时应该报imagefs超标

我们查看node的状态,只报imagefs超标

3.3 修改让imagefs的阈值为60%,nodefs的阈值为60%;此时应该报两个都超标

我们查看node的状态,果然imagefs与nodefs都超标了

3.4 修改让imagefs的阈值为80%,nodefs的阈值为80%;此时node应该正常

我们查看node的状态,果然没有报imagefs与nodefs的错了

总结

1、nodefs是--root-dir目录所在分区,imagefs是docker安装目录所在的分区

2、建议nodefs与imagefs共用一个分区,但是这个分区要设置的大一些。

3、当nodefs与imagefs共用一个分区时,kubelet中的其他几个参数--root-dir--cert-dir--seccomp-profile-root--kubeconfig也要显示地设置

Last updated

Was this helpful?