Amazon ECS

ECS(弹性容器服务)是一个AWS集群协调平台。ECS允许你部署和运行容器化的Docker应用程序,使用ECS命令行界面(ecs cli),通过几个简单的cli命令对它们进行缩放,以创建微服务。你也可以使用AWS Web UI控制台来管理你的ECS集群,而无需使用CLI。
本文档将演示如何使用Fargate启动类型在ECS上设置SKIL集群。使用Fargate,不需要提供任何EC2实例,也不必担心在AWS中设置虚拟机的底层基础结构。

ECS 概念

任务定义
任务定义包含指定如何运行容器的所有元数据。你可以在这里了解更多关于任务定义的信息。你可以从任务定义创建任务,任务定义是运行容器的主要执行点。任务可以在其中运行多个容器。如果需要使用卷共享资源,或者需要使用“localhost”访问彼此,最好在单个任务定义中指定多个容器。

集群
群集包含应用程序设置中要具有的所有相关任务。它可以包含多个任务定义、多个用于缩放和维护任务日志的实例化任务。

先决条件
确保你已经处理了以下先决条件。

Docker

要安装Docker,请参阅以下Mac说明或以下Windows说明。对于Linux,可以使用以下命令安装Docker。

Shell

sudo yum -y update
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker

AWS CLI

AWS CLI将用于创建安全组、打开端口、创建IAM角色以及将角色策略附加到创建的角色。按照此链接在系统中安装AWS CLI。或者可以在Linux环境中执行以下命令

Shell

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" # Installing pip if necessary
sudo python get-pip.pypip install awscli --upgrade --user

配置 AWS CLI

通过执行aws configure,你可以使用cli配置你的aws帐户。主要设置配置为:

  1. IAM Access Key
  2. IAM Secret Key
  3. Default region (us-east-1 推荐)

Shell

aws configure

ECS CLI

ECS CLI用于ECS集群配置、部署任务定义、在集群内运行任务、管理和查看任务内运行容器的状态和日志。
要安装ECS CLI,请访问此处
对于Linux系统,可以使用以下命令。

Shell

sudo curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest
sudo chmod +x /usr/local/bin/ecs-cli
ecs-cli --version

配置ECS CLI

Amazon ECS需要权限,这样你的Fargate任务就可以将日志存储在CloudWatch中。任务执行IAM角色包含此权限。
你需要在创建的IAM角色上附加AmazoneCastaskeExecutionRolePolicy策略。确保你拥有iam:CreateRole权限,能够使用你的iam帐户创建角色。
使用ECS CLI使用你的凭据登录(分别用iam访问密钥和密钥替换<access_key>和<secret_key>)。

Shell

ecs-cli configure profile --profile-name my-ecs-profile --access-key <ACCESS_KEY> --secret-key <SECRET_KEY> # Provide with your ACCESS_KEY and SECRET_KEY

创建一个名为“execution-assume-role.json”的文件,并将以下内容放入其中。

JSON

{"Version": "2012-10-17","Statement": [{"Sid": "","Effect": "Allow","Principal": {"Service": "ecs-tasks.amazonaws.com"},"Action": "sts:AssumeRole"}]
}

保存文件并以“ecseExecutionRole”的名称创建任务执行角色,将AmazonECSTaskExecutionRolePolicy附加到该文件。

Shell

aws iam --region us-east-1 create-role --role-name ecsExecutionRole --assume-role-policy-document file://execution-assume-role.json
aws iam --region us-east-1 attach-role-policy --role-name ecsExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

集群设置

部署模式使用两个任务定义,一个指定zookeeper和mysql实例的配置,SKIL实例将连接到该配置,另一个任务定义具有SKIL实例的配置。这种分离的原因是可以轻松地缩放集群中的SKIL实例。如果我们在同一个任务定义中定义了所有容器实例,那么我们将不得不按比例缩放所有容器。但是对于SKIL集群的设置,我们只需要扩展SKIL实例,所有实例都将连接到同一个zookeeper和mysql任务。
按如下方式配置集群名称、区域并指定集群配置的名称:

Shell

ecs-cli configure --cluster <CLUSTER_NAME> --region <REGION> --default-launch-type FARGATE --config-name <CLUSTER_CONFIG_NAME>ecs-cli up # Starting the cluster using the cluster configuration

VPC 与子网配置

由于SKIL实例需要连接到同一个专用网络,因此需要在同一个虚拟专用云中配置所有任务,并在任务定义中指定子网。
可以在这里创建专有网络,并在这里为专有网络配置子网。确保在该区域中创建它们作为ECS集群。
创建安全组和端口配置
你需要打开入站流量所需的端口(2181、3306、8080、9008),以便稍后在任务运行时从远程Web浏览器访问SKIL UI。

Shell

aws ec2 create-security-group --group-name "<security_group_name>" --description "Security group for ECS (Shams)" --vpc-id "<vpc_id>"
# You'll get the security group id after successfully executing the above command
aws ec2 authorize-security-group-ingress --group-id "<security_group_id>" --protocol tcp --port 2181 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id "<security_group_id>" --protocol tcp --port 3306 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id "<security_group_id>" --protocol tcp --port 9008 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id "<security_group_id>" --protocol tcp --port 8080 --cidr 0.0.0.0/0

为任务定义编写文件和ECS配置
容器在 docker-compose文件中定义,而ECS配置则在另一个文件中指定。ECS配置将包含任务执行角色名称、网络配置、网络模式、CPU和内存资源配置。
将以下内容放入文件名docker-compose.yml中,用于zookeeper和mysql:

YAML

version: '2'
services:zookeeper:image: zookeepercpu_shares: 2048mem_limit: 4194304000ports:- "2181:2181"logging:driver: awslogsoptions: awslogs-group: tutorial-zookeeperawslogs-region: us-east-1awslogs-stream-prefix: zookeepermysql:image: mysql:5.5cpu_shares: 2048mem_limit: 4194304000ports:- "3306:3306"environment:- MYSQL_ALLOW_EMPTY_PASSWORD=true- MYSQL_DATABASE=skil_migrationslogging:driver: awslogsoptions: awslogs-group: tutorial-mysqlawslogs-region: us-east-1awslogs-stream-prefix: mysql

对于ECS配置,将以下脚本放在ecs-params.yml中。将<subnet_id>和<security_group_id>替换为你创建的子网ID和安全组ID。

YAML

version: 1
task_definition:task_execution_role: ecsExecutionRoleecs_network_mode: awsvpctask_size:mem_limit: 8GBcpu_limit: 4096
run_params:network_configuration:awsvpc_configuration:subnets:- "<subnet_id>"security_groups:- "<security_group_id>"assign_public_ip: ENABLED

首先运行zookeeper和mysql服务,并注意正在运行的任务的私有IP地址。可以在这里找到ECS集群详细信息。

Shell

ecs-cli compose --project-name zksql-td service up --create-log-groups

注意私有IP地址,如下图所示:

Private ip address of the task

任务的专有IP地址
对于SKIL配置,你需要首先对Docker Hub上可用的skil-ce镜像进行一些修改。为此,请将以下内容粘贴到start-skil.sh中。

Shell

#!/usr/bin/env bashexport SKIL_HOME=/opt/skil
#export SKIL_CLASS_PATH=/opt/skil/lib/*:/opt/skil/native/*:/opt/skil/jackson-2.5.1/*
export SKIL_LOG_DIR=/var/log/skil
export SKIL_PID_FILE=/run/skil/skil.pidexport SKIL_BACKEND=cpu
export SKIL_LICENSE_PATH=/etc/skil/license.txt
export SKIL_PUBLIC_KEY_PATH=/etc/skil/publickey.txtbash /opt/skil/sbin/pre-start.sh
bash /opt/skil/sbin/start-skil-daemonecho "Waiting for all SKIL Services to start..."
while [ $(jps | wc -l) != 5 ]
dosleep 1s
doneuntil [ "grep join /var/log/skil/zeppelin-*.log" ]
dosleep 1s
doneecho "SKIL Ready"tail -f /var/log/skil/*.logbash /opt/skil/sbin/stop-skil-daemon

现在,用下面的脚本创建一个“Dockerfile”。

Text

FROM skymind/skilUSER rootADD start-skil.sh /start-skil.sh
RUN cat /start-skil.sh
RUN chmod 755 /start-skil.shRUN yum install -y mysql-connector-java && ln -s /usr/share/java/mysql-connector-java.jar /opt/skil/lib/mysql-connector-java.jar# PLD
EXPOSE 9008
# File Server
EXPOSE 9508
# Zeppelin
EXPOSE 8080
# DL4J UI first port
EXPOSE 9002
# ModelHistoryServer port
EXPOSE 9100CMD ["/start-skil.sh"]

现在你需要构建一个Docker镜像并将其上传到ECR仓库。确保你拥有ecr:DescribeRepositories权限来管理你在ECS上的ecr仓库。
你可以在此处创建ECR仓库时获取仓库服务器的URI。为仓库命名为skymind/skil

Creating ECR repository

创建ECR仓库

创建仓库后,执行以下命令来构建和推送修改后的SKIL镜像。

Shell

sudo `aws ecr get-login --no-include-email --region <REGION>` # 运行从执行backticks中的命令返回的命令
sudo docker build -t skymind/skil:jdbc .
sudo docker tag skymind/skil:jdbc <repo_server_uri>/skymind/skil:jdbc
sudo docker push <repo_server_uri>/skymind/skil:jdbc

现在,通过将下面的脚本粘贴到“skil-ce.yml”中,为SKIL实例创建另一个任务定义。用包含zookeeper和mysql实例的任务的私有IP地址替换`<task_private_ip>。

YAML

version: '2'
services:skil:image: <repo_server_uri>/skymind/skil:jdbccpu_shares: 4096mem_limit: 8388608000ports:- "9008:9008"- "8080:8080"environment:- SKIL_USE_EMBEDDED_DB=false- SKIL_DB_NAME=skil_migrations- SKIL_DB_DRIVER=com.mysql.jdbc.Driver- SKIL_DB_URL=jdbc:mysql://<task_private_ip>:3306/skil_migrations- SKIL_DB_USER=root- MODEL_HISTORY_SERVER_LAUNCH_DEFAULT=false  - ZEPPELIN_LAUNCH_DEFAULT=false  - ZOOKEEPER_HOST=<task_private_ip>- ZOOKEEPER_PORT=2181- ZOOKEEPER_EMBEDDED=falselogging:driver: awslogsoptions: awslogs-group: tutorial-skilawslogs-region: us-east-1awslogs-stream-prefix: skil

现在,你可以运行SKIL服务并通过执行以下操作将它们连接到zookeeper和mysql进程:

Shell

ecs-cli compose --project-name skil-td --file skil-ce.yml service up --create-log-groups

通过指定任务定义的名称,可以看到正在运行的容器进程:

Shell

ecs-cli compose --project-name zksql-td service ps
ecs-cli compose --project-name skil-td service ps

你可以使用下面的ecs-cli命令查看任务ID日志:

Shell

ecs-cli logs --task-id <task_id> --follow

使用scale子命令增加所需任务的数量,并指定要从刚才定义的skil-td任务定义创建的SKIL实例的数量。

Shell

ecs-cli compose --project-name skil-td service scale 2
ecs-cli compose --project-name skil-td service ps

要删除你创建的正在运行的服务,请执行以下操作。

Shell

ecs-cli compose --project-name zksql-td service down
ecs-cli compose --project-name skil-td service down
ecs-cli down --force

SKIL/安装/Amazon ECS相关推荐

  1. 容器管理大战:Kubernetes vs.Docker Swarm与Amazon ECS

    Container Orchestration: 快速入门 自20世纪70年代以来,容器技术就已经出现,但直到2013年Docker首次亮相后才开始发挥作用.从那时起,容器已经流行起来:它们正在显著地 ...

  2. 亚太成为第一季度全球存储市场唯一增长地区;亚马逊云科技在中国区域推出Amazon ECS Anywhere | 全球TMT...

    行业观察 Gartner公布2021年第一季度全球存储市场报告,报告显示,一季度全球存储市场销售额317亿元,出货量7.5万台,同比下滑2%.5%.受新冠疫情影响,企业存储市场在全球各地区的表现喜忧参 ...

  3. SKIL/安装/MySQL

    MySQL 本指南总结了用于多节点SKIL安装的CentOS 7.4(EL7)中mysql 5.5社区的安装和配置.有关更详细的指南,请参阅https://dev.mysql.com/doc/mysq ...

  4. SKIL/安装/更新

    更新SKIL SKIL不断被Skymind开发成越来越多功能丰富的应用程序.因此,为了在SKIL中使用新功能,你需要定期将已安装的实例更新到最新版本. 备份数据 确保在启动更新之前备份/var/ski ...

  5. SKIL/安装/Docker集群

    Docker集群 使用Docker可以设置SKIL集群.如果你还没有这样做,我们建议你在尝试设置集群之前下载并运行单个Docker镜像. 要配置Docker Skil CE群集,你需要以下镜像: My ...

  6. SKIL/安装/Kubernetes

    Kubernetes Kubernetes是一个用于容器编排的开源工具.它在管理容器工作负载和实现集群及其部署的自动化方面有很大帮助.你可以在这里找到更多关于它的信息. 本文档将解释基本的Kubern ...

  7. beanstalk php 扩展,如何安装Amazon AWS Elastic Beanstalk的PHP扩展?

    我们在EC2实例上使用aws弹性beanstalk作为我们的PHP应用程序.由于我们选择了负载平衡,因此它会不断更改实例. 我想知道我们是否安装了一个PHP插件,是否会受到实例更改的影响,或者它也可以 ...

  8. 探索入门云计算风向标Amazon的ECS容器技术

    Amazon ECS 概述 对于经常接触云计算服务技术的同学们估计一听到ECS,耳朵都能磨出茧子,印象中ECS不就是弹性计算服务么,再人话点就是你按量充值的一台虚拟主机,然后通过SSH远程维护这台虚拟 ...

  9. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装

    Unity DOTS 学习笔记1 - ECS 0.50介绍和安装 为什么学习这个技术 ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计 ...

最新文章

  1. 记录Datagrid使用的一些事项
  2. OpenERP Web开发
  3. 苹果电脑无法用普通域用户加入域,用域管理员却可以,怎么破!?
  4. why we see different http status code like 404, 500. where are they handled
  5. Educational Codeforces Round 54 (Rated for Div.2)
  6. SpringBoot中各配置文件的优先级及加载顺序
  7. Randomatic mac - AE随机摆动的字母图层效果脚本
  8. 推荐12个非常不错而且免费的后台管理HTML模板
  9. DSP之直接存储器访问控制器
  10. 程序员工作交接文档怎么写_IT交接事项.doc
  11. 联邦学习 OR 迁移学习?联邦迁移学习不香吗
  12. php数组中随机抽取,PHP 数组中随机抽取一些元素_PHP教程
  13. rust炼油机怎么搞_rust挖油机在哪个位置 | 手游网游页游攻略大全
  14. luna sea - I For You,“我想为你拭去降临在你身上的所有痛楚I For You 。。。”
  15. 青蛙Pro绑定商户号(windows)
  16. POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”
  17. 金额格式化,符号位,保留两位小数
  18. 30W、45W、60W PD移动电源芯片方案+无线充方案
  19. 重装系统lol登录服务器,LOL无法登录的彻底解决方法
  20. 梦想在此起航,定要全力以赴。

热门文章

  1. 文旅部谈加强假日旅游市场监管 查处强迫消费等乱象
  2. 阿里《算法进阶指南》,完整版开放下载!
  3. FireEye 666漏洞
  4. VINS-Mono环境配置与测试笔记
  5. aelf技术点解读 | 分红合约接口实现方案
  6. SSM+Redis的小demo
  7. C语言中如何生成静态库
  8. 大家好!我是屁孩君儿子,今天给大家带来一个 1085 球弹跳高度的计算
  9. (面试题)面试官为啥总是让我们手撕call、apply、bind?
  10. 音频服务器运行失败怎么办,音频服务错误1068怎么解决 音频服务未运行win10解决方法...