注意:以下文档只适用于TOP接口,请谨慎使用!

文档中心 > 聚石塔

托管版 ECI 使用说明(旧版)

更新时间:2022/01/18 访问次数:1168

简介

托管版 Kubernetes 集群 需要您手动创建集群,并添加 ECS 作为 Kubernetes 集群的节点

相关文档请参考:https://help.aliyun.com/document_detail/86737.html

ECI 为阿里云产品,旨在用户无需管理底层服务器,也无需关心运行过程中的容量规划,只需要提供打包好的Docker镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。

相关文档地址为:

https://help.aliyun.com/document_detail/89129.html

聚石塔集成 ECI,为您提供更为方便的集成,以及管控能力

名词解释

真实节点:运行在集群中的 ECS 上的节点

虚拟节点:来源于Kubernetes社区的Virtual Kubelet技术,容量相当与无限大,不会使用集群中的 ECS 资源

ECI:在虚拟节点上启动的 pod

特别提醒

ECI 实例的公网 ip:需要使用 VPC绑定NAT网关+EIP 方式进行公网访问,公网 ip 由绑定的 EIP 确定

ECI 实例的内网 ip:由应用所在的集群的 交换机 的 IPv4网段 确定,ECI 实例的 内网ip,在此范围内给出

image.png

ECI 与 非集群内的 ECS 通信:需要将 集群的安全组 授权给 ECS安全组

image.png

不要通过 弹性容器实例 删除 ECI ,这样只会删除 ECI 资源,但是 pod 相关配置并不会跟着一起被删除

image.png

使用流程

1.集成虚拟节点

通过 运维中心-插件管理-插件列表 进入 集群管理页面 如下图

image.png

请先安装 ECI节点 ,安装成功后再进行 虚拟节点自动伸缩 的安装 ,点击 安装 进入如下页面
image.png

集群 下拉框选项中,选择需要集成 ECI 能力的集群,部署参数为空即可,最后点击 部署 。


2.设置资源分配策略

通过 运维中心-容器集群-资源分配策略 进入 资源分配策略列表页 ,通过 新建策略 或者 管理 已经存在的策略进入 新建/编辑策略 页面,如下图

image.png

调度到虚拟节点 选择 可以 ,部分页面如下

image.png

需要填写 ECI 使用的 CPU 内存 的上限,也就是说,该应用所使用的 单个 ECI 资源的大小不会超过此处设置的上限,一旦超过,则不允许使用 ECI(部署配置通过 yaml 方式的除外,并且此处限制只针对修改后发布的服务进行限制,正在运行的服务不做限制)

3.编辑部署配置(新版本)

a.通过页面进行配置的方式:

新版应用视图中可以通过 环境管理-实例管理 页面进行修改

image.png

ECI 的大小可以通过两种方式进行设置:

1.填写 ECI CPU请求ECI 内存请求 ,则会以此处填写的值为准

2.不填写 ECI CPU请求ECI 内存请求 ,则会以 CPU请求内存请求 的值为准

例如:

CPU请求:2
内存请求:8192
ECI CPU请求:1
ECI 内存请求:2048

最终以 CPU=1,内存=2048 为准


注意 ECI实例级别需要满足CPU和内存约束。对于未满足的情况,系统会进行规整,计费按照规整后CPU和内存值进行计费(ECI支持的规格见文末部分 ECI实例规格,有关于实际使用规格的计算方式请参见本文的 规格计算 部分)。

b.通过 Yaml 进行配置的方式

新版应用视图中可以通过 环境管理-环境配置 页面对 yaml 配置文件进行修改

image.png

首先需要在配置中添加 容忍

tolerations:
    - key: taint.jst.com/eci
      operator: Exists

接下来需要配置ECI规格,配置方式主要有以下两种

1.指定ECI实例内容器规格(Kubernetes默认方式)

注意 每个ECI实例内支持最多20个容器,实例内每个容器的资源支持自定义配置,但汇总到ECI实例级别需要满足CPU和内存约束。对于未满足的情况,ECI会执行 自动规整 操作,计费按照规整后CPU和内存值进行计费(ECI支持的规格见文末部分 ECI实例规格)。

说明 对于大于4vCPU规格,为了减少因操作失误造成规整,浪费计费资源,您需要在OpenAPI中严格声明相同的规格资源,否则接口会返回规格非法错误。 推荐对于大于4vCPU规格的资源,使用指定ECI实例CPU和内存规格的方式进行资源申请。


1.Kubernetes方式

Kubernetes原生方式使用,直接定义对应container的request即可。


apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "500m"
            memory: "1024Mi"
      - name: busybox
        image: busybox:latest # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: "500m"
            memory: "1024Mi"

2.指定ECI规格

增加k8s.aliyun.com/eci-use-specs注解, 创建Pod时允许使用的实例规格列表,遇到没库存时,按照顺序遍历规格列表购买ECI实例,应对库存问题。

k8s.aliyun.com/eci-use-specs的值,支持列表,使用逗号分隔,列表中元素的格式:

1.模糊匹配
  • ${cpu}-${mem}Gi:例如: 2-4Gi;表示创建一个2核4G的ECI实例。模糊匹配仅支持普通规格,对于本地SSD、GPU等实例需设置明确的实例规格。

模糊配置方式:


apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: vk-cos-use
  labels:
    app: cos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cos
  template:
    metadata:
        annotations: 
            "k8s.aliyun.com/eci-use-specs": "2-4Gi,4-8Gi,ecs.c6.xlarge"
        labels:
            app: cos
    spec:
      containers:
      - name: u1
        image: "registry-vpc.cn-beijing.aliyuncs.com/lxx/cos-4g"
      nodeName: virtual-node-eci-0
2.精确设置

明确指定创建ECI使用的实例规格,例如:ecs.c6.xlarge,ECI支持的实例规格,请参见实例规格族


apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: vk-cos-use
  labels:
    app: cos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cos
  template:
    metadata:
        annotations: 
            "k8s.aliyun.com/eci-use-specs": "ecs.c5.xlarge,ecs.c6.xlarge,ecs.c6.4xlarge"
        labels:
            app: cos
    spec:
      containers:
      - name: u1
        image: "registry-vpc.cn-beijing.aliyuncs.com/lxx/cos-4g"
      nodeName: virtual-node-eci-0


更多详细配置请参考文档下列文档:

指定CPU和内存创建ECI:https://help.aliyun.com/document_detail/114662.html

指定ECS规格创建ECI:https://help.aliyun.com/document_detail/114664.html

多规格创建:https://help.aliyun.com/document_detail/146468.html

GPU实例:https://help.aliyun.com/document_detail/114581.html

3.编辑部署配置(旧版本)

通过 应用发布-部署配置 进入 部署配置列表页

image.png

下面分为两种情况:

a.通过页面进行配置的方式:

点击 编辑 已存在的配置,进入 编辑部署配置页面

image.png

b.通过 Yaml 进行配置的方式

点击 新建Yaml部署配置 或者 编辑 已存在的配置,进入 新建/编辑部署配置页面

image.png


4.发布应用

每次修改完相应配置都需要 重新发布应用 才可以生效,ECI 实例的具体规格 以及是否支持 使用 ECI,都是根据发布当时的 部署配置 以及 资源分配策略 决定的(通过 yaml 配置的方式不做任何处理,由用户自行控制)

例如:
部署配置中:
  ECI CPU请求:2
  ECI 内存请求:2048
资源分配策略:
  ECI CPU上限:2
  ECI 内存上限:4096

此时进行发布,发布后的应用可以正常使用 ECI ,并且 ECI 规格为 2C2G

基于当前场景,分别进行进行以下操作:

a.修改部署配置为
ECI CPU请求:4
 ECI 内存请求:8196

没有重新发布,则应用不受影响,可以正常使用 ECI ,并且 ECI 规格为 2C2G

如果重新发布,则由于应用的部署配置中请求资源 超过 资源分配策略中定义的ECI资源使用上限,因此不可以使用 ECI,但是可以正常发布,应用可以在 真实节点(ECS)上正常调度使用。

b.修改资源分配策略为
ECI CPU上限:1
ECI 内存上限:2048

没有重新发布,则应用不受影响,可以正常使用 ECI ,并且 ECI 规格为 2C2G

如果重新发布,则由于应用的部署配置中请求资源 超过 资源分配策略中定义的ECI资源使用上限,因此不可以使用 ECI,但是可以正常发布,应用可以在 真实节点 上正常调度使用



最终发布的应用中的实例是否在虚拟节点上,可以在实例列表页查看

image.png

5.数据库访问以及公网访问(可选)

数据库访问:将 ECI 实例的内网 IP 段(获取方式参见本文的特别提醒) 添加到 数据库的白名单中

公网访问:需要使用 VPC绑定NAT网关+EIP 方式进行公网访问,公网 ip 由绑定的 EIP 确定

ECI 调度策略

默认情况下,允许使用 ECI 的应用,只有在创建 pod 时,真实节点上没有足够的资源,导致调度失败时,才会向虚拟节点调度,真正使用 ECI。也就是说,会优先使用集群内提前购买好的资源,资源不足时才会使用 ECI。

同时,是否选择集成虚拟节点,不影响 部署配置资源分配策略 中对 ECI 相关属性的配置。

也就是说,通过配置 部署配置资源分配策略 ,应用部署后,状态为 允许使用 ECI 可能有一下两种情况

a.有 虚拟节点,则在资源不足时,会使用 ECI

b.没有 虚拟节点,在资源不足时,不会使用 ECI,而是成为不可调度状态。后期如果集成上虚拟节点,则可以正常使用 ECI

增强 ECI 调度策略

为了提供能强的 调度控制能力,我们提供了 ECI 调度控制 插件

使用流程

0.前置条件

集群已支持 ECI,即已经安装 ECI节点虚拟节点自动伸缩 插件

1.插件集成

运维中心 - 插件管理 - 插件列表 选择 ECI调度控制 单击 安装

image.png

选择需要安装插件的集群,单击部署即可

image.png

2.配置策略

a.前置条件:

在给应用配置 ECI 调度策略之前,要确保该应用已经允许使用 虚拟节点

可以前往 运维中心 - 资源分配策略 找到对应的应用环境,单击 管理

image.png


调度到虚拟节点 选择 可以

image.png

b.配置 ECI 调度策略

环境管理 - 详细信息 - 实例管理 在实例信息部分可以看到如下内容

image.png

普通实例数/ECI 实例数: 分别表示,该应用环境下面运行中的 实例数量(包括下线中及其他状态的实例)

ECI 调度策略:目前启用的策略,第一次进入应该显示为 未启用

单击 修改策略 可以看到下图所示弹窗

image.png

普通实例限制值:普通实例数量的阈值,当普通实例数量超过该值时,强制使用 ECI

当实例数小于该值时,分两种情况:

强制:不论资源是否充足,都不使用 ECI(可能会存在资源不足导致实例启动失败的情况)

非强制:资源不足的时候允许使用 ECI

启用状态:需要设置为已启用之后点击保存,才会启用该策略

特别提醒:

(1)策略只对配置之后启动的实例生效,不会影响之前的实例分布情况

例如:未配置策略前,普通实例数/ECI 实例数 为 10/10,普通实例限制值 为 6,不会改变现有状态,如果之后进行扩容,普通实例数已经超过限制,则后面启动的实例都会使用 ECI

(2)目前不支持优先缩容 ECI ,当前的缩容策略为,最新启动的最先缩容

(3)修改资源分配策略,关闭 ECI 之后,会同时关闭该应用环境的 ECI 调度策略

规格计算

本规格计算方式,仅针对 通过页面进行部署配置 的方式

1.确定 ECI 使用规格上限

资源分配策略中的 ECI 内存上限 首先会转换单位为 GB,转换会按照 向下 取整进行,例如:

2049MB => 2GB
2048MB => 2GB
2047MB => 1GB

2.确定 ECI 请求资源量

部署配置中的 CPU 和 内存 会首先以 ECI CPU请求ECI 内存请求 为准,如果值为空,则以 CPU请求内存请求 的值为准,并且 内存 首先会转换单位为 GB,转换会按照 向上 取整进行,例如:

2049MB => 3GB
2048MB => 2GB
2047MB => 2GB

3.确定 ECI 规格

ECI 的规格是有约束的(具体规格见本文中的 ECI实例规格 章节),所以最终的 ECI 规格需要符合给定的约束。

例:

资源限制:2C4G
资源请求:1C2G

ECI 实际规格为:1C2G

资源限制:2C4G
资源请求:2C3G

ECI 实际规格为:2C4G

原因:ECI 约束中资源大于等于 资源请求 2C3G 的最小规格为 2C4G,同时该规格不大于 资源限制 2C4G

资源限制:2C6G
资源请求:2C5G

ECI 实际规格为:无(不可使用 ECI)

原因:ECI 约束中资源大于等于 资源请求 2C5G 的最小规格为 2C8G,同时该规格大于 资源限制 2C6G

容器网络配置

  • 容器访问公网。暂时只支持NAT网关出公网容器的公网出口IP为NAT网关绑定的EIP
  • 容器访问RDS。ECI容器实例的内网IP从集群交换机网段中分得将交换机网段设置为RDS白名单即可
  • 容器访问VPC内ECS。默认的,serverless集群部署生成的ECI容器属于集群安全组,如果VPC内的ECS不在集群安全组内,需要进行安全组授权。1)将ECS加入集群安全组; 或者,2)ECS所在安全组授权一下集群安全组


集群安全组:运维中心-集群管理-基本信息

image.png

外网访问

VPC绑定NAT网关+EIP

主要步骤:

  1. 创建VPC及VSwitch。
  2. 创建NAT。
  3. 创建EIP,并绑定到NAT。
  4. 为NAT配置SNAT条目。

操作步骤

  1. 创建VPC及VSwitch。在VPC 控制台完成VPC及VSwitch的创建。
  2. 创建NAT。创建NAT网关,创建的时候选择上一步操作创建的VPC。
  3. 创建EIP,并绑定到NAT。 将EIP绑定到NAT。
  4. 为NAT配置SNAT条目。在NAT中创建SNAT条目,以实现访问外网。
    完成后,ECI创建时就可以正常拉取Docker Hub镜像了。VPC对应交换机下的所有ECI实例,都能够通过该VPC和交换机上绑定的NAT网关+EIP访问外网。
    如果需要通过外网来访问ECI,则还需要配置DNAT条目,具体可以参阅文档PAI Studio-Notebook使用文档

计费规则

计费资源

ECI根据您申请ECI资源的方式,支持2种计费模式:

  • 按CPU和内存计费。
  • 按ECS规格计费。

推荐您使用CPU和内存模式使用ECI,该模式下ECI会使用ECS多个规格族,进行ECI实例的创建,保障资源的交付。例如:您申请2c4g的ECI实例,ECI会尝试使用ECS的ecs.c6.large、ecs.c5.large、ecs.sn1ne.large、ecs.sn1.large等规格进行资源的交付。


注意 每个ECI实例以您申请的资源作为计费单元,而不是业务在运行过程中实际使用的CPU利用率和内存使用率。例如:您申请一个2c4g的ECI实例,运行过程中平均CPU利用率为20%,内存使用率为60%,该实例会按照2c4g作为计量和计费单位,而不是2c x 20%和4g x 60%。

CPU和内存模式

CPU和内存模式根据你申请的CPU和内存进行计费。


说明 ECI针对不支持的CPU和内存规格,会执行自动规整操作,计费按照自动规整后规格进行计费,CPU和内存规格请参见指定容器 CPU 和内存

计费公式:ECI实例费用 = (ECI实例CPU核数 x CPU单价 + ECI实例内存大小 x 内存单价)x ECI实例运行时长,按秒计费,实例费用不足0.01元,将补齐按照0.01元收取。

计费项 价格(秒价) 分钟价 小时价
CPU(vCPU) 0.000049 元/秒 0.00294 元/分钟 0.1764 元/小时
内存(GB) 0.00000613 元/秒 0.0003678 元/分钟 0.0221 元/小时


ECI部分规格与ECS企业级实例价格对比:

ECI规格 ECI小时价格 5代ECS(华北2) 6代ECS(华北2)
1c2g 0.221 元/小时 N/A N/A
1c4g 0.265 元/小时 N/A N/A
1c8g 0.353 元/小时 N/A N/A
2c2g 0.397 元/小时 0.59 元/小时 N/A
2c4g 0.441 元/小时 0.62 元/小时 0.39 元/小时
2c8g 0.529 元/小时 0.89 元/小时 0.5 元/小时
2c16g 0.706 元/小时 1.13 元/小时 0.66 元/小时
4c4g 0.794 元/小时 1.18 元/小时 N/A
4c8g 0.882 元/小时 1.24 元/小时 0.78 元/小时
4c16g 1.059 元/小时 1.77 元/小时 1 元/小时
4c32g 1.412 元/小时 2.26 元/小时 1.33 元/小时



说明 ECS价格未包含系统盘价格,40G高效系统盘 0.02 元/小时;40G ESSD系统盘 0.08 元/小时。ECI实例默认使用ESSD系统盘,包含在ECI小时价格中。

ECS规格模式

ECI支持根据实例规格族进行资源申请,价格参考各地域ECS按量价格。您可以根据需要,指定ECI实例底层使用的ECS规格族,获得各规格族的指定能力,例如:指定使用ecs.sn1ne规格族,来使用网络增强能力。

计费公式:ECI实例费用 = ECI实例指定的ECS规格单价 x ECI实例运行时长,实例按秒计费。

其他资源

网络

如果您的ECI实例需要访问公网,需要通过您VPC内的NAT网关绑定弹性公网IP(EIP)地址访问公网,NAT及EIP的计费说明,请参见计费说明包年包月

存储

ECI支持多种类的存储类型,不同存储类型的计费规则如下:

镜像缓存(快照和云盘)

若您需要使用ECI镜像缓存功能,会产生快照和存储费用。

  • 快照的收费规则请参见快照计费方式
  • 使用镜像加速功能的每个ECI实例会使用一块基于快照产生的云盘,云盘默认使用ESSD类型、20GB容量,计费规格请参考 ESSD磁盘价格(PL1)

按量使用示例

示例一

您需要每小时运行一次定时任务,定期处理历史文件,需要使用2个ECI实例,每个ECI实例使用1vCPU2G内存,每次运行5分钟(300秒)。

单次费用

单次CPU费用:

  • CPU费用 = 实例数 x vCPU数 x 每vCPU*秒价格 x 每小时vCPU持续时间(秒)
  • CPU费用 = 2 x 1 x 0.000049 x 300 = 0.0294 元

单次内存费用 :

  • 内存费用 = 实例数 x 内存数(GB) x 每GB价格 x 每小时内存持续时间(秒)
  • 内存费用 = 2 x 2 x 0.00000613 x 300 = 0.0074 元

单次ECI费用 :

  • 小时ECI费用 = 小时CPU费用 + 小时内存费用
  • 小时ECI费用 = 0.0294 元 + 0.0074 元 = 0.04 元

月度运行费用

  • 月度ECI费用 = 每小时ECI费用 x 月度执行总次数
  • 月度ECI费用 = 0.04 x ( 24 x 30 ) = 28.8元


说明 若您使用ECS实例,该定时任务需要使用1台ecs.c5.large,需要支付179元(ECS包月模式)或者37.2元(ECS按量模式)月度运行费用,通过使用ECI,可以极大的节省您的运行成本。


示例二

您需要每天2:00运行1个统计报表任务,使用10个ECI实例,每个ECI实例使用2vCPU8GiB内存,每次运行1个小时(3600秒)。

单次费用

单次CPU费用:

  • CPU费用 = 实例数 x vCPU 数 x 每vCPU*秒价格 x 每小时vCPU持续时间(秒)
  • CPU费用 = 10 x 2 x 0.000049 x 3600 = 3.528 元

单次内存费用:

  • 内存费用 = 实例数 x 内存数 (GB) x 每GB价格 x 每小时内存持续时间(秒)
  • 内存费用 = 10 x 8 x 0.00000613 x 3600 = 1.765 元

单次ECI费用:

  • 小时ECI费用 = 小时CPU费用 + 小时内存费用
  • 小时ECI费用 = 3.528 元 + 1.765 元 = 5.29 元

月度运行费用:

  • 月度ECI费用 = 每小时ECI费用 x 月度执行总次数
  • 月度ECI费用 = 5.29 x 30 = 158.7 元


说明 若您使用ECS实例,该任务需要使用10台ecs.g5.large,需要支付2422.5元(包月模式)或者267元(按量模式)月度运行费用,通过使用ECI,可以极大的节省您的运行成本。

限制条件

  • 您的账户需要有 100 元的余额并通过实名认证,否则无法创建 ECI 实例。
  • 目前 ECI 只支持 Linux 容器。
  • 目前 ECI 只支持 VPC 网络。
  • 不支持在虚拟节点上运行DaemonSet Pod。
  • 不支持hostPath/hostPid。
  • 不支持privileged权限开放。
  • 不支持过大的configmap和secret volume挂载(上限256KB,很难达到该上限)。
  • 不支持NodePort类型的Service。
  • 不支持Network Policy
  • 单个 ECI 实例 CPU 最大规格 64 vCPU
  • 单个 ECI 实例数据卷数量 100 个(很难达到该上限
  • 单个 ECI 实例内支持最大的容器数 20 个
  • 支持的容器最大镜像 layer 50 个
  • 单个虚拟节点支撑 3000 个ECI Pod

账号能够创建的ECI数量,依赖于账号的vCPU限额,vCPU限额的查询办法参考这里。所有ECI实例的vCPU之和,不能超过vCPU限额,如果需要超过,请提交工单申请。

可用区

https://help.aliyun.com/document_detail/89155.html

ECI实例规格

vCPU 内存(GiB) emptyDir空间大小(GiB) 网络带宽能力(出/入)(Gbit/s) 网络收发包能力(出/入)(万PPS) 支持IPv6 多队列 弹性网卡(包括一块主网卡)
0.25 0.5、1 20 0.1 4 1 1
0.5 1、2 20 0.2 5 1 1
1 2、4、8 20 0.5 5 1 1
2 2、4、8、16 20 1 30 2 1
4 4、8、16、32 20 1.5 50 2 1
8 8、16、32、64 20 2.0 80 4 1
12 12、24、48、96 20 2.5 90 4 1
16 16、32、64 、128 20 3.0 100 4 1
24 48、96、192 20 4.5 150 6 1
32 64、128、256 20 6.0 200 8 1
52 96、192、384 20 12.5 300 32 1
64 128、256、512 20 20.0 400 16 1



Q&A

1、只有在集群资源不足的时候才能使用 ECI 资源吗?

默认情况下是这样的。但是也可以通过添加标签选择功能实现,一下有两种方案:

应用全部使用 ECI:通过标签选择器,使应用指定到 虚拟节点 上,这样就可以直接使用 ECI 了

应用同时使用 集群资源以及 ECI:给集群中一个或多个节点加上特定标签,同时给 虚拟节点 也加上相同标签,这样添加相应标签选择器的应用会优先使用 普通节点上的资源,在资源不足的时候 会使用 ECI 资源。使用该方案时,建议在 普通节点 上添加污点,并给应用添加相应 容忍,防止其他应用使用该节点。

2、集群中服务的 DNS 解析量很大,仅通过扩容 coredns 已不足以支撑,怎么办?

目前提供了 sidecar dns 解决方案,该方案需要开通白名单,请在答疑群中 @照前 ,进行白名单添加

3、应用需要访问公网,且流量峰值巨大,单个 EIP 的带宽已经无法支持,怎么办?

可以优先使用 共享带宽 的方案,一个共享带宽可以添加多个 EIP,相应的可以增加带宽峰值。如果该方案依然无法解决请在答疑群中 @照前。

FAQ

关于此文档暂时还没有FAQ
返回
顶部