docker - 如何启用Google Container Optimized OS交换限制支持

标签 docker linux-kernel kubernetes out-of-memory google-container-os

我正在GCE实例上的Google Container Optimized OS上运行Kubernetes / Docker。当我运行docker info时说

$ docker info
Containers: 116
 Running: 97
 Paused: 0
 Stopped: 19
Images: 8
Server Version: 1.11.2
Storage Driver: overlay
 Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: null host bridge
Kernel Version: 4.4.21+
Operating System: Container-Optimized OS from Google
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 14.67 GiB
Name: REDACTED
ID: REDACTED
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support

最后一行说,没有交换限制支持。我在弄清楚如何启用交换限制支持时遇到了麻烦。我找到了有关Ubuntu / Debian here的说明。

我的问题是,我的Docker容器达到内存限制后立即获得OOMKilled,而不是尝试交换。我希望容器使用swap作为缓冲区,而不是立即死亡。

最佳答案

容器优化的操作系统(COS)实际上是在完全禁用交换的情况下配置的。您可以通过在COS VM中运行cat /proc/meminfo | grep SwapTotal进行验证,这将表明它已配置为0 kB。

我不确定在您的环境中启用交换是否是一个好主意,因为如果您经常使用交换,可能会引起更多问题(例如,磁盘IO饥饿/运行缓慢,内核挂起)。

但是,如果您想尝试一下,这些命令可能会对您有所帮助(以root用户身份运行所有命令):

cos-swap / # sysctl vm.disk_based_swap=1
vm.disk_based_swap = 1
cos-swap / # fallocate -l 1G /var/swapfile
cos-swap / # chmod 600 /var/swapfile
cos-swap / # mkswap /var/swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=406d3dfc-3780-44bf-8add-d19a24fdbbbb
cos-swap / # swapon /var/swapfile
cos-swap / # cat /proc/meminfo | grep Swap
SwapCached:            0 kB
SwapTotal:       1048572 kB
SwapFree:        1048572 kB

关于docker - 如何启用Google Container Optimized OS交换限制支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264362/

相关文章:

使用 Dockerfile 的 Java Spring Boot 随机端口

kubernetes - 启动 minikube 时是否可以挂载多个卷?

c - 在 C 中进行位检查的最正确方法

linux-kernel - 从内核模块访问 block 设备

c++ - 如何查看虚拟内存中每个进程维护的页表 - Linux?

kubernetes - 从Kubernetes中的Pod重新启动其他节点上的Pod

kubernetes - 是否可以在分布式环境中部署 Prometheus Operator?

docker - docker 中 nginx 后面的 Keycloak 导致 404 和不定式重定向

laravel - 流明在请求期间不从系统读取环境

docker - VPN 连接的 Docker 容器无法访问其他容器