首页 > 解决方案 > 为什么我可以请求比我的文件系统上的可用容量大得多的临时存储?

问题描述

我正在使用 docker 和 kubernetes 来部署一个 daemonsent。在 daemonset yaml 中,我将 ephemeral-storage 设置如下:

        resources:
          requests:
            ephemeral-storage: "100Gi"

我应用了这个 yaml,没有发生错误,一切看起来都很好。然而,棘手的是,我的文件系统只有 55 GiB 的可用容量。

$ df -h | egrep -v "overlay|tmpfs|shm"
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  250G  196G   55G  79% /   <--------
/dev/sdh2               1014M  221M  794M  22% /boot
/dev/sdh1                200M   12M  189M   6% /boot/efi
/dev/mapper/centos-home  1.6T   39M  1.6T   1% /home

登录容器,同样的事情:

# df -h
Filesystem               Size  Used Avail Use% Mounted on
overlay                  250G  196G   55G  79% /
tmpfs                     64M     0   64M   0% /dev
...

那是怎么发生的?为什么 k8s 认为容器可以请求 100 GiB 临时存储?

当我requests在 yaml 中将 200 GiB 设置为 200 GiB 并重新应用它时,Pod 显示为Terminating状态,描述它,发现以下事件:

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  20s   default-scheduler  0/1 nodes are available: 1 Insufficient ephemeral-storage.

这是有道理的。

但是,为什么 100 GiB 请求有效?

软件版本:

$ docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:25:41 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea
  Built:            Wed Nov 13 07:24:18 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
[root@mc100]~/code/mc-log/deploy
$
[root@mc100]~/code/mc-log/deploy
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:23:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.3", GitCommit:"b3cbbae08ec52a7fc73d334838e18d17e8512749", GitTreeState:"clean", BuildDate:"2019-11-13T11:13:49Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

标签: dockerkubernetesfilesystems

解决方案


推荐阅读