Tie*_*ran 4 amazon-ecs jenkins docker jenkins-slave
我在AWS ECS集群中使用了jenkins slave,我在这个网站中配置:Jenns 在ECS中.
通常它运作良好,但有时在高峰时段,从属容器启动非常慢,超过40分钟,甚至无法启动容器.
我必须终止ECS实例,然后启动一个新实例.当容器无法启动时,我在ecs-agent中看到了一个日志:
STOPPED,原因CannotCreateContainerError:API错误(500):devmapper:Thin Pool有788个空闲数据块,小于最低要求的4454个空闲数据块.在精简池中创建更多可用空间,或使用dm.min_free_space选项更改行为
这是我的码头信息,请告诉我如何解决这个问题.
[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
Run Code Online (Sandbox Code Playgroud)
而且我不知道为什么只能同时运行4个任务,即使ECS实例的资源仍然可用,我怎样才能增加它
当您经常启动和停止容器时,您的问题非常常见,您刚才提到的帖子就是这个!他们具体说:
"Amazon EC2容器服务插件可以在您的ECS集群上启动容器,自动将自己注册为Jenkins从属服务器,在容器上执行相应的Jenkins作业,然后自动删除容器/构建从服务器"
这样做的问题是,如果没有清理已停止的容器,您最终会遇到内存耗尽的问题.如果您ssh进入实例并运行以下命令,则可以自己检查:
docker ps -a
Run Code Online (Sandbox Code Playgroud)
如果在Jenkins出现问题时运行此命令,您应该会看到几乎无穷无尽的已停止容器列表.您可以通过运行以下命令将它们全部删除:
docker rm -f $(docker ps -a -f status-exited)
Run Code Online (Sandbox Code Playgroud)
但是,每隔一段时间手动执行此操作实际上并不是非常方便,因此您真正想要做的是在启动它时在ECS实例配置的userData参数中包含以下脚本:
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
Run Code Online (Sandbox Code Playgroud)
这将指示ECS代理启用清理守护程序,该守护程序每隔10分钟(即您可以设置的最低间隔)检查要删除的映像,在任务停止后1分钟删除容器,并删除30分钟的映像,不再由活动的任务定义引用.您可以在此处详细了解这些变量.
根据我的经验,如果你非常快地启动和停止容器,这个配置可能是不够的,所以你可能想要在你的实例上附加一个体面的卷,以确保你有足够的空间来进行守护进程清理停止容器.
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |