提问

#楼主# 2020-4-2

跳转到指定楼层
本帖最后由 sinnet-cloud 于 2020-4-2 16:37 编辑

由于我们在ECS的集群中直接启动的ECS实例,所以咱们并不能很好的了解EC2实例在集群中是如何工作的,通过本篇文章可以将这些依赖关系详细罗列一下,让大家能够清晰的了解其工作原理,也为日后的使用和快速定位问题起到一定的帮助。

首先我们使用这个ECS的资源有两种途径FARGATE和EC2 instance。

由于FARGATE为完全托管的,所以我就详细给大家介绍下EC2的启动环境。在实例的启动里面主要依靠下面四个必须的条件。

  • Docker的版本
  • ecs agent的安装
  • EC2 ecsInstanceRole权限
  • ecs配置文件

下面我会为大家详细介绍每一步的安装和验证,最后将资源加入到ECS集群中。

安装Docker的版本

在实例上安装 Docker。Amazon ECS 需要最低 Docker 版本的 1.9.0 (推荐使用版本 18.06.1-ce),许多系统程序包管理器中的默认 Docker 版本 (如 yum 或 apt-get) 未满足此最低要求。有关在特定 Linux 分发版上安装最新 Docker 版本的信息,请参阅 https://docs.docker.com/engine/installation/

  • ecs agent的安装

要在非 Amazon Linux EC2 实例上安装 Amazon ECS 容器代理,您可以从区域性 S3 存储桶之一或 Docker Hub 下载代理。如果您从区域性 S3 存储桶之一下载,则可以选择使用 PGP 签名来验证容器代理的有效性。
下面按区域列出了最新的 Amazon ECS 容器代理文件,以供参考。

Region
Region Name
Container agent
Container agent signature
us-east-2
US East (Ohio)
ECS container agent
PGP signature
us-east-1
US East (N. Virginia)
ECS container agent
PGP signature
us-west-1
US West (N. California)
ECS container agent
PGP signature
us-west-2
US West (Oregon)
ECS container agent
PGP signature
ap-east-1
Asia Pacific (Hong Kong)
ECS container agent
PGP signature
ap-northeast-1
Asia Pacific (Tokyo)
ECS container agent
PGP signature
ap-northeast-2
Asia Pacific (Seoul)
ECS container agent
PGP signature
ap-southeast-1
Asia Pacific (Singapore)
ECS container agent
PGP signature
cn-north-1
China (Beijing)
ECS container agent
PGP signature
cn-northwest-1
China (Ningxia)
ECS container agent
PGP signature

在容器实例上运行以下命令,以允许端口代理使用回环地址路由流量。

  1. ubuntu:~$ sudo sh -c "echo 'net.ipv4.conf.all.route_localnet = 1' >> /etc/sysctl.conf"
  2. ubuntu:~$ sudo sysctl -p /etc/sysctl.conf
复制代码



创建 /etc/ecs 目录并创建 Amazon ECS 容器代理配置文件。

  1. ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
复制代码


编辑 /etc/ecs/ecs.config 文件并添加以下内容,cluster-name替换称自己的集群名称

  1. ECS_DATADIR=/data
  2. ECS_ENABLE_TASK_IAM_ROLE=true
  3. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
  4. ECS_LOGFILE=/log/ecs-agent.log
  5. ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]
  6. ECS_LOGLEVEL=info
  7. ECS_CLUSTER=<span style="color: #ff0000">Cluster-name</span>
复制代码


在容器实例上创建主机卷挂载点。

  1. ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
复制代码



直接从区域性 S3 URL 中下载 ECS 容器代理 tarball 并加载它。如果您未从 S3 下载代理 tarball,则下一步中的 docker run 命令会自动从 Docker Hub 中下载。加载镜像

  1. curl -o ecs-agent.tar http://s3.amazonaws.com/amazon-ecs-agent-us-east-1/ecs-agent-latest.tar
  2. sudo docker load --input ./ecs-agent.tar
复制代码


或者直接从Docker Hub 中下载

  1. sudo docker run --name ecs-agent \
  2. --detach=true \
  3. --restart=on-failure:10 \
  4. --volume=/var/run:/var/run \
  5. --volume=/var/log/ecs/:/log \
  6. --volume=/var/lib/ecs/data:/data \
  7. --volume=/etc/ecs:/etc/ecs \
  8. --net=host \
  9. --env-file=/etc/ecs/ecs.config \
  10. amazon/amazon-ecs-agent:latest
复制代码


下面就可以直接运行起来了。

EC2 ecsInstanceRole权限配置

在IAM角色中创建<span style="color: #444444">ecsInstanceRole,内容如下</span>

  1. {
  2. "Version": "2012-10-17",
  3. "Statement": [
  4. {
  5. "Effect": "Allow",
  6. "Action": [
  7. "ec2:DescribeTags",
  8. "ecs:CreateCluster",
  9. "ecs:DeregisterContainerInstance",
  10. "ecs:DiscoverPollEndpoint",
  11. "ecs:Poll",
  12. "ecs:RegisterContainerInstance",
  13. "ecs:StartTelemetrySession",
  14. "ecs:UpdateContainerInstancesState",
  15. "ecs:Submit*",
  16. "ecr:GetAuthorizationToken",
  17. "ecr:BatchCheckLayerAvailability",
  18. "ecr:GetDownloadUrlForLayer",
  19. "ecr:BatchGetImage",
  20. "logs:CreateLogStream",
  21. "logs:PutLogEvents"
  22. ],
  23. "Resource": "*"
  24. }
  25. ]
  26. }
复制代码


并将此权限赋予EC2,或将此AK/SK赋予到其他的docker主机。

ecs文件配置


找到在ECS中的集群,将集群名称"webcluster"替换成你自己的集群名称。

ECS1.png

  1. echo ECS_CLUSTER=webcluster >> /etc/ecs/ecs.config
  2. echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
复制代码



将以上两行命令编辑到ecs配置文件中。

验证

Docker的版本

通过#docker --version 来查看docker的版本

  1. [root@ip-10-82-1-31 ec2-user]# docker --version
  2. Docker version 18.06.1-ce, build e68fc7a215d7133c34aa18e3b72b4a21fd0c6136
复制代码


ecs agent的安装

通过下面命令来验证ecs agent的

  1. [root@ip-10-82-1-31 ec2-user]# curl -s http://localhost:51678/v1/metadata | python -mjson.tool
  2. {
  3. "Cluster": "webcluster",
  4. "ContainerInstanceArn": "arn:aws:ecs:ap-northeast-2:346803106628:container-instance/71ab19b9-2002-42c7-b6d1-482b36439a7a",
  5. "Version": "Amazon ECS Agent - v1.29.1 (f95f731b)"
  6. }
复制代码


也可以通过docker ps查看到agent

  1. [root@ip-10-82-1-31 ec2-user]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a32c4a1e2bac amazon/amazon-ecs-agent:latest "/agent" 4 seconds ago Up 3 seconds ecs-agent1
复制代码


在ECS集群中进行确认,可以看到新加入到ECS实例中的实例。

ECS3.png


到此今天的内容就全部完成了,后面会介绍更多关于docker的文章。

【原创声明】本文为光环云原创文章,作者张国鑫。转载请注明作者及出处。

公众号码.png

-----------------------------------------
相关文章:

【ECS系列1】使用AWS ECS进行docker集群的启动和管理

【ECS系列2】使用ALB对docker应用进行自动映射

转播转播
回复

使用道具

成为第一个回答人

B Color Link Quote Code Smilies
光环云社区 |京ICP备18044167号-13|

京公网安备 11010102003758号