Dockerrun AWS硬编码内存



中, eLasticBeanStalk 的多容器docker 环境,在 dockerrun.awson.awsoson中,定义内存是强制性的,我想知道如何处理记忆的硬编码值的最佳实践。

特别是当我们需要调整实例类型时,我们还需要调整内存值。

有没有办法指定一种百分比而不是确切的数字?也许@AWS的建议

这是一个dockerrun.aws模板示例:

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
    {
      "name": "container-1",
      "image": "image-1.com/image-xxxxxx",
      "memory": 512
    },
    {
      "name": "container-2",
      "image": "image-2.com/image-xxxxxx",
      "memory": 256
    },
    {
      "name": "container-3",
      "image": "image-3.com/image-xxxxxx",
      "memory": 256
    }
  ]
}

我不是内部的AWS,但是我们使用了AWS Elastic Beanstalk以及更高级的部署策略(例如自定义云形式模板)。这是我作为DevOps工程师使用这些服务的个人经验的一些笔记:

  • 最好的做法是定义文件中的MIB中的内存 dockerrun.aws.json ,如文档所述。[1]
  • 您不需要定义内存硬限制。记忆软限制就足够了,如文档所述:"在容器定义中为一个或内存保存参数指定一个或两个内存或内存保存参数。"[1]
  • 必须将内存或内存保留保留提供给AWS弹性Beanstalk,因为它将AWS ECS用作需要其中一个值之一的基础服务。它使用ECS代理将容器放置在EC2实例上,并且必须知道每个容器可以预留多少空间。
  • 除非您的应用程序是内存的,因为您始终可以设置一个非常低的内存保存值CPU结合的应用程序。有关软内存限制和硬记忆之间的差异的很好的解释,请参见[2]。还要记住:" Docker守护程序为容器保留至少4个MIB内存,因此您不应为容器指定少于4 MIB的内存。"[3]
  • 如果您想要更多的灵活性/控制,则可以随时使用AWS CloudFormation作为代码从AWS Elastic Beanstalk移动到ECS部署。
  • 如果您对AWS EC中的引擎盖下的事情在引擎盖下的工作感兴趣,请访问AWS的以下出色博客文章: Amazon ECS如何管理CPU和内存资源。[4]

参考

[1] https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html
[2] https://stackoverflow.com/a/44764770/10473469
[3] https://docs.aws.amazon.com/amazonecs/latest/developerguide/task_definition_parameters.html
[4] https://aws.amazon.com/de/blogs/containers/how-amazon-ecs-manages-cpu-and-memory-resources/

最新更新