ecs-formation, 为AmazonEC2容器服务构建 Docker 群集组合的工具( ECS )

分享于 

10分钟阅读

GitHub

  繁體 雙語
Tool to build Docker cluster composition for Amazon EC2 Container Service(ECS)
  • 源代码名称:ecs-formation
  • 源代码网址:http://www.github.com/openfresh/ecs-formation
  • ecs-formation源代码文档
  • ecs-formation源代码下载
  • Git URL:
    git://www.github.com/openfresh/ecs-formation.git
    Git Clone代码到本地:
    git clone http://www.github.com/openfresh/ecs-formation
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/openfresh/ecs-formation
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    ecs

    Circle CILanguageissuesLicense: MIT

    ecs生成是在 Amazon EC2容器 Service(ECS) 定义几个 Docker continers和集群的工具。

    特性
    • 在ECS集群上定义服务,以及任务定义。
    • 支持YAML定义,如docker组合。 如果复制 docker-compose.yml(formerly fig.yml),则能够运行ecs生成。
    • 通过 AWS API管理ECS服务和任务定义。
    • 支持 ELB ( 经典负载平衡器) 和( 应用程序负载平衡器)
    • 服务自动缩放功能
    • 任务放置策略
    用法

    设置

    安装

    ecs的形成是由 Go。 请运行 go get

    $ go get github.com/openfresh/ecs-formation
    定义 环境变量

    ecs地层使用 cobra。 它支持yaml配置。

    为项目配置准备 ~/.ecs-formation.yaml

    project_dir:~/your_project_dir/aws_region: us-east-1

    ecs生成需要 环境变量 运行,如下所示。

    • AWS_ACCESS_KEY: AWS访问密钥
    • AWS_SECRET_ACCESS_KEY: AWS秘密访问密钥
    • AWS_REGION: 目标AWS区域名称
    工作目录

    为ecs生成建立工作目录。 这个工作目录应该由Git管理。

    $ mkdir -p path-to-path/test-ecs-formation
    $ mkdir -p path-to-path/test-ecs-formation/task
    $ mkdir -p path-to-path/test-ecs-formation/service
    $ mkdir -p path-to-path/test-ecs-formation/bluegreen

    管理任务定义和服务

    集群

    你需要提前创建ECS集群。 而且,ECS实例必须在ECS集群中加入。

    定义任务定义

    在任务目录中生成任务定义文件。 这里文件 NAME 用作ECS任务定义名称。

    (path-to-path/test-ecs-formation/task) $ vim test-definition.yml
    nginx:
     image: nginx:latest
     ports:
     - 80:80
     environment:
     PARAM1: value1
     PARAM2: value2
     links:
     - api
     memory_reservation: 256
     cpu_units: 512
     essential: trueapi:
     image: your_namespace/your-api:latest
     ports:
     - 8080:8080
     memory: 1024
     cpu_units: 1024
     essential: true links:
     - redis
    redis:
     image: redis:latest
     ports:
     - 6379:6379
     memory: 512
     cpu_units: 512
     essential: true
    在集群上定义服务

    在集群目录中生成服务定义文件。 这里文件 NAME 必须等于ECS群集名称。

    例如如果目标群集 NAME 是 test-cluster,则需要生成 test-cluster.yml

    (path-to-path/test-ecs-formation/service) $ vim test-cluster.yml
    test-service:
     task_definition: test-definition
     desired_count: 1
     role: your-ecs-elb-role
     load_balancers:
     -
     name: test-elb
     container_name: nginx
     container_port: 80
     autoscaling:
     target:
     min_capacity: 0
     max_capacity: 1
     role: arn:aws:iam::your_account_id:role/ecsAutoscaleRole

    target_group_arn 中,你应该指定。

    (path-to-path/test-ecs-formation/service) $ vim test-cluster.yml
    test-service:
     task_definition: test-definition
     desired_count: 1
     role: your-ecs-elb-role
     load_balancers:
     -
     target_group_arn: test-target-group-arn
     container_name: nginx
     container_port: 80
    保持desired_count更新服务

    如果你通过AWS管理控制台或者of修改 desired_count 值,你将担心将 desired_count的值替换为。 这里值在操作中应灵活更改。

    如果 keep_desired_counttrue,请在更新服务时保持当前 desired_count

    (path-to-path/test-ecs-formation/service) $ vim test-cluster.yml
    test-service:
     task_definition: test-definition
     desired_count: 1
     keep_desired_count: true
    任务放置策略

    支持 placement_constraintsplacement_strategy 如果更新这些选项,则必须一次重新生成服务。

    (path-to-path/test-ecs-formation/service) $ vim test-cluster.yml
    test-service: 
     task_definition: test-definition
     desired_count: 1
     keep_desired_count: true placement_constraints:
     - type: memberOf
     expression: "attribute:ecs.instance-type =~ t2.*" placement_strategy:
     - type: spread
     field: "attribute:ecs.availability-zone"
    管理任务定义

    显示更新计划。

    (path-to-path/test-ecs-formation $ ecs-formation task plan --all
    (path-to-path/test-ecs-formation $ ecs-formation task plan -t test_definition

    应用所有定义。

    (path-to-path/test-ecs-formation $ ecs-formation task apply --all
    (path-to-path/test-ecs-formation $ ecs-formation task apply -t test_definition
    管理群集上的服务

    显示更新计划要求的群集。

    (path-to-path/test-ecs-formation $ ecs-formation service plan -c test-cluster --all

    应用所有服务。

    (path-to-path/test-ecs-formation $ ecs-formation service apply -c test-cluster --all

    指定群集和服务。

    (path-to-path/test-ecs-formation $ ecs-formation service apply -c test-cluster -s test-service

    绿色绿色部署

    ecs形成支持蓝色绿色部署。

    对ecs形成的要求
    • 需要两个ECS群集。蓝色和绿色。
    • 需要两个 ELB。主ELB和备用 ELB。
    • ECS集群应该由 EC2 Autoscaling组构建。
    定义蓝色绿色部署

    在bluegreen目录下制作蓝色绿色部署文件管理文件。

    (path-to-path/test-ecs-formation/bluegreen) $ vim test-bluegreen.yml
    blue:
     cluster: test-blue
     service: test-service
     autoscaling_group: test-blue-asg
    green:
     cluster: test-green
     service: test-service
     autoscaling_group: test-green-asg
    primary_elb: test-elb-primary
    standby_elb: test-elb-standby

    显示蓝色绿色部署计划。

    (path-to-path/test-ecs-formation $ ecs-formation bluegreen plan

    应用蓝色部署。

    (path-to-path/test-ecs-formation $ ecs-formation bluegreen apply -g test-bluegreen

    如果使用 --nodeploy 选项,则不更新服务。 仅在蓝色和绿色组中交换 ELB。

    (path-to-path/test-ecs-formation $ ecs-formation bluegreen apply --nodeploy -g test-bluegreen

    如果autoscaling组具有几个不同的经典 ELB,则应指定 chain_elb的array 属性。 ecs形成同时与主ELB组交换 chain_elb ELB组。

    (path-to-path/test-ecs-formation/bluegreen) $ vim test-bluegreen.ymlblue:cluster:test-blue
     service:test-service
     autoscaling_group:test-blue-asggreen:cluster:test-green
     service:test-service
     autoscaling_group:test-green-asgprimary_elb:test-elb-primarystandby_elb:test-elb-standbychain_elb:-primary_elb:test-internal-elb-primary
     standby_elb:test-internal-elb-standby

    在( 应用程序负载平衡器) 中,如下所示。

    (path-to-path/test-ecs-formation/bluegreen) $ vim test-bluegreen.ymlblue:cluster:test-blue
     service:test-service
     autoscaling_group:test-blue-asggreen:cluster:test-green
     service:test-service
     autoscaling_group:test-green-asgelbv2:target_groups:-primary_group:test-internal-primary
     standby_group:test-internal-default

    其他

    传递自定义参数

    你可以使用自定义参数。 在yaml文件( 任务,服务,bluegreen ) 中定义参数如下。

    nginx:image: openfresh/nginx:${NGINX_VERSION}
     ports:-80:${NGINX_PORT}

    你可以使用 -p 选项为这些参数设置值。

    ecs-formation task -p NGINX_VERSION=1.0 -p NGINX_PORT=80 plan -t your-web-task

    此外,支持默认参数值。

    nginx:image: openfresh/nginx:${NGINX_VERSION|latest}
     ports:-80:${NGINX_PORT|80}
    env_file

    你可以像docker一样使用 env_filehttps://docs.docker.com/compose/compose-file/#env-file

    nginx:image: openfresh/nginx:${NGINX_VERSION}
     ports:-80:${NGINX_PORT}
     env_file:-. /test1.env
     -.. /test2.env
    许可证

    请参见许可协议。

    版权所有 © 保留所有权利。


    COM  tool  DOC  构建  服务  Docker  
    相关文章