[AWS][容器][ECS] 容器动手实验201

实验之前,还是先了解一下本次实验整体ECS的架构:

实验包括:

1. 创建和定义ECS的任务(Task)

2. 创建ECS Cluster

3. 部署应用到ECS Service中

4. 通过Task Definition更新应用

5. 容器的扩展

实验前准备:

  1. AWS账号
  2. 熟悉IAM role、EC2、Docker等知识

Amazon ECS 的一些关键组件:

  1. Container Instance:EC2实例,包含ECS agent 并且注册到ECS集群中。
  2. ECS Fargate:不需要管理和配置EC2实例,全Managed的容器编排服务(本实验不涉及)
  3. Cluster:多个Container Instance组成的集群。在集群中你可以定义每一个Task如何置放。
  4. Task Definition:任务定义,定义ECS中Docker容器。比如容器中Docker的镜像、每个任务中的每个容器CPU和内存数量(Fargate只需要定义Container的内存即可),Docker联网模式、IAM role等等。
  5. Task:ECS最小的管理单元,可以理解为kubernets中的Pod。包含一个或多个Container。
  6. Scheduler:service scheduler 定义运行task的数量和定义服务计划策略:
    REPLICA——副本计划策略:默认情况下再多个可用区之间分布task。可以指定置放策略。
    DAEMON——守护程序计划策略:无需指定task数量、置放策略。一个Container instance上只部署一个task。
  7. Service:这个跟kubernets中的Service定义类似,可以理解为是多个task组成的,可以定义一组task 运行在哪儿台Container Instance中。可以通过ELB对外访问。

Task0:创建Cluster

Task1:配置Task Definition中的ecs sample image镜像

拉倒最下边,通过JSON配置TASK(通常通过控制台的参数选择):

一下内容是JSON定义的TASK,这里注意一点是containerPath 我写的是本地Instance的,通常我们替换为docker hub或ECR的路径。

{
  "family": "yourApp-demo",
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "command": null,
      "environment": [],
      "essential": true,
      "entryPoint": null,
      "links": [],
      "mountPoints": [
        {
          "containerPath": "/usr/local/apache2/htdocs",
          "sourceVolume": "my-vol",
          "readOnly": null
        }
      ],
      "memory": 300,
      "name": "simple-app",
      "cpu": 10,
      "image": "httpd:2.4"
    },
    {
      "volumesFrom": [
        {
          "readOnly": null,
          "sourceContainer": "simple-app"
        }
      ],
      "portMappings": [],
      "command": [
        "/bin/sh -c \"while true; do echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>' > top; /bin/date > date ; echo '</div></body></html>' > bottom; cat top date bottom > /usr/local/apache2/htdocs/index.html ; sleep 1; done\""
      ],
      "environment": [],
      "essential": false,
      "entryPoint": [
        "sh",
        "-c"
      ],
      "links": [],
      "mountPoints": [],
      "memory": 200,
      "name": "busybox",
      "cpu": 10,
      "image": "busybox"
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": null
      },
      "name": "my-vol"
    }
  ]
}

返回,看到大部分参数都被定义好了,

Task2:创建一个Service

配置服务:

配置网络:

Set Auto Scaling:

测试容器服务:

Task3:发布一个新的应用

复制下面的JSON,到Configure via JSON中,

{
  "family": "yourApp-demo",
  "containerDefinitions": [
    {
      "volumesFrom": [],
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "command": null,
      "environment": [],
      "essential": true,
      "entryPoint": null,
      "links": [],
      "mountPoints": [
        {
          "containerPath": "/usr/local/apache2/htdocs",
          "sourceVolume": "my-vol",
          "readOnly": null
        }
      ],
      "memory": 300,
      "name": "simple-app",
      "cpu": 10,
      "image": "httpd:2.4"
    },
    {
      "volumesFrom": [
        {
          "readOnly": null,
          "sourceContainer": "simple-app"
        }
      ],
      "portMappings": [],
      "command": [
        "/bin/sh -c \"while true; do echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Thank You!</h2> <p>Your application is now running on a container in Amazon ECS.</p>' > top; /bin/date > date ; echo '</div></body></html>' > bottom; cat top date bottom > /usr/local/apache2/htdocs/index.html ; sleep 1; done\""
      ],
      "environment": [],
      "essential": false,
      "entryPoint": [
        "sh",
        "-c"
      ],
      "links": [],
      "mountPoints": [],
      "memory": 200,
      "name": "busybox",
      "cpu": 10,
      "image": "busybox"
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": null
      },
      "name": "my-vol"
    }
  ]
}

选择更新的版本5,其他保持默认即可。

Task4:容器扩展

增加tasks的数量:

有关AWS云计算详细视频参考:https://edu.51cto.com/course/22206.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栗子哥BroLiz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值