首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ECS集群中运行的Jenkins从站无法启动容器。

问在ECS集群中运行的Jenkins从站无法启动容器。
EN

Stack Overflow用户
提问于 2017-06-14 11:28:38
回答 3查看 3.9K关注 0票数 4

我在AWS集群中使用jenkins从服务器,我的配置就像这个web:在ECS中的Jenkins。

正常情况下,它正常工作,但有时在高峰时间,从集装箱启动非常缓慢,超过40分钟,甚至不能启动集装箱。

我必须终止ECS实例,然后启动一个新的实例。当容器无法启动时,我在ecs中看到了一个日志:

停止,原因是CannotCreateContainerError: API错误(500):devmapper:瘦池有788个空闲数据块,低于最低要求的4454个空闲数据块。在瘦池中创建更多空闲空间或使用dm.min_free_space选项更改行为

这是我的码头信息,请告诉我如何解决这个问题。

代码语言:javascript
复制
[root@ip-10-124-2-159 ec2-user]# docker info
Containers: 10
 Running: 1
 Paused: 0
 Stopped: 9
Images: 2
Server Version: 1.12.6
Storage Driver: devicemapper
 Pool Name: docker-docker--pool
 Pool Blocksize: 524.3 kB
 Base Device Size: 10.74 GB
 Backing Filesystem: ext4
 Data file:
 Metadata file:
 Data Space Used: 8.646 GB
 Data Space Total: 23.35 GB
 Data Space Available: 14.71 GB
 Metadata Space Used: 2.351 MB
 Metadata Space Total: 25.17 MB
 Metadata Space Available: 22.81 MB
 Thin Pool Minimum Free Space: 2.335 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: true
 Deferred Deletion Enabled: true
 Deferred Deleted Device Count: 0
 Library Version: 1.02.93-RHEL7 (2015-01-28)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 4.4.39-34.54.amzn1.x86_64
Operating System: Amazon Linux AMI 2016.09
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 7.8 GiB
Name: ip-10-124-2-159
ID: 6HVT:TWH3:YP6T:GMZO:23TM:EUAA:F7XJ:ISII:QDE7:V2SN:XKFI:XPGZ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

我不知道为什么只有4个任务可以同时运行,即使ECS实例的资源仍然可用,如何增加它呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-14 22:06:34

您的问题是一个非常常见的问题,当您启动和停止集装箱非常频繁,而您刚才提到的帖子就是关于这一点!他们特别指出:

插件可以在您的EC2集群上启动容器,自动将自己注册为Jenkins奴隶,在容器上执行适当的Jenkins作业,然后再自动删除容器/生成从服务器

这样做的问题是,如果停止的容器不被清理,您最终就会耗尽内存,正如您所经历的那样。如果您在实例中ssh并运行以下命令,您可以亲自检查它:

代码语言:javascript
复制
docker ps -a

如果您在Jenkins遇到麻烦时运行此命令,您应该会看到一个几乎无穷无尽的停止容器列表。您可以通过运行以下命令来删除它们:

代码语言:javascript
复制
docker rm -f $(docker ps -a -f status-exited)

但是,经常手动执行此操作并不太方便,所以您真正想要做的是在启动时将以下脚本包含在您ECS实例配置的userData参数中:

代码语言:javascript
复制
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION=1m >> /etc/ecs/ecs.config
ECS_CLUSTER=<NAME_OF_CLUSTER> >> /etc/ecs/ecs.config
ECS_DISABLE_IMAGE_CLEANUP=false >> /etc/ecs/ecs.config
ECS_IMAGE_CLEANUP_INTERVAL=10m >> /etc/ecs/ecs.config
ECS_IMAGE_MINIMUM_CLEANUP_AGE=30m >> /etc/ecs/ecs.config

这将指示ECS代理启用一个清理守护进程,该守护进程每10分钟(这是可以设置的最低间隔)检查一次要删除的图像,在任务停止后1分钟删除容器,并删除30分钟前且不再由活动任务定义引用的图像。您可以了解有关这些变量这里的更多信息。

根据我的经验,如果您非常快地启动和停止容器,这种配置可能是不够的,因此您可能希望将一个不错的卷附加到您的实例中,以确保在守护进程清理已停止的容器时,您有足够的空间进行操作。

票数 5
EN

Stack Overflow用户

发布于 2017-12-28 05:44:52

谢谢何塞的回答。

但是,这个命令在Docker 1.12.*中对我有效。

代码语言:javascript
复制
docker rm $(docker ps -aqf "status=exited")

标志'q‘从结果中过滤containerIds并删除它。

票数 1
EN

Stack Overflow用户

发布于 2017-12-29 16:24:38

如果升级到最新的AWS客户端(或最新的ECS、amzn-ami-2017.09.d-amazon-ecs-optimized或更高版本),则在ecs配置中为为集群服务的EC主机配置ECS自动清除已失效的图像、容器和卷。

这将清除节点(标签){}子句,但不会在生成期间执行停靠程序。

  • 节点容器及其体积.清洗
  • 由在该节点上执行的步骤生成的docker映像-而不是清除

ECS不了解在该节点上发生的事情。考虑到节点本身应该是最大的东西,ECS自动清理应该将运行单独的清理任务的需求降到最低。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44543501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档