docker - 为什么我可以请求比我的文件系统上的可用容量大得多的临时存储?
问题描述
我正在使用 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"}
解决方案
推荐阅读
- c# - 使用 Fare/Xeger 生成多次出现的问题
- cassandra - 设置“require_client_auth”的功能
- oracle-apex - Oracle APEX (v19.1.0.00.15) 不获取原始数据类型
- python - 如何使用列表写入索引为 10 的图像存储在文件夹中
- node.js - Nodejs http.get(url[, options][, callback]) 方法类型错误,同时包含选项
- html - 无法根据轮播尺寸调整轮播图像的大小
- c# - Asp Net core 2.2 的配置是否随 Asp Net core 3 一起消失了?
- docker - 无法连接到 cli 容器
- python - 如何将 2 个 python 脚本与 import 结合起来?
- python - 如何用包含训练数据的矩阵替换输入数据