[AWS][容器][ECS] 容器动手实验201
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AWS][容器][ECS] 容器动手实验201相关的知识,希望对你有一定的参考价值。
实验之前,还是先了解一下本次实验整体ECS的架构:
实验包括:
1. 创建和定义ECS的任务(Task)
2. 创建ECS Cluster
3. 部署应用到ECS Service中
4. 通过Task Definition更新应用
5. 容器的扩展
实验前准备:
- AWS账号
- 熟悉IAM role、EC2、Docker等知识
Amazon ECS 的一些关键组件:
- Container Instance:EC2实例,包含ECS agent 并且注册到ECS集群中。
- ECS Fargate:不需要管理和配置EC2实例,全Managed的容器编排服务(本实验不涉及)
- Cluster:多个Container Instance组成的集群。在集群中你可以定义每一个Task如何置放。
- Task Definition:任务定义,定义ECS中Docker容器。比如容器中Docker的镜像、每个任务中的每个容器CPU和内存数量(Fargate只需要定义Container的内存即可),Docker联网模式、IAM role等等。
- Task:ECS最小的管理单元,可以理解为kubernets中的Pod。包含一个或多个Container。
- Scheduler:service scheduler 定义运行task的数量和定义服务计划策略:
REPLICA——副本计划策略:默认情况下再多个可用区之间分布task。可以指定置放策略。
DAEMON——守护程序计划策略:无需指定task数量、置放策略。一个Container instance上只部署一个task。 - 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
以上是关于[AWS][容器][ECS] 容器动手实验201的主要内容,如果未能解决你的问题,请参考以下文章