全部產品
Search
文件中心

Elastic Container Instance:指定或排除ECS規格類型系列建立Pod

更新時間:Oct 22, 2024

在指定vCPU和記憶體建立ECI Pod的情境下,如果您對規格有一定要求,例如只想使用ecs.g6規格類型系列,可添加k8s.aliyun.com/eci-instance-family的Annotation來指定ECS規格類型系列。本文介紹建立ECI Pod時,如何指定或排除ECS規格類型系列。

功能說明

指定vCPU和記憶體建立ECI Pod時,系統會使用多種ECS規格進行支撐,並自動選擇滿足vCPU和記憶體條件且有庫存的規格。此時,您可以添加Annotation(k8s.aliyun.com/eci-instance-family)來指定或排除ECS規格類型系列。

  • 如果指定了某些ECS規格類型系列,則系統僅會從相應的ECS規格類型系列中進行選擇。如果指定的ECS規格類型系列沒有庫存,則不會建立ECI Pod。

  • 如果排除了某些ECS規格類型系列,則系統在選擇規格時會排除這些規格類型系列,從其他ECI支援的ECS規格類型系列中選擇規格。

說明

可以配合使用k8s.aliyun.com/eci-instance-generation來指定或排除ECS規格代數,實現更精細的規格控制。

支援指定或排除的ECS規格類型系列如下:

架構

ECS規格代數

ECS規格類型系列

Arm

8

g8y、c8y、r8y

x86

8

g8i、c8i、r8i、hfg8i、hfc8i、hfr8i

7

g7、c7、r7、hfg7、hfc7、hfr7、g7ne

6

g6e、g6、c6e、c6、r6e、r6、hfc6、hfg6

5

u1、g5、g5ne、c5、r5、ic5、hfc5、hfg5

4

sn2ne、sn1ne、se1ne、se1

關於ECS規格的詳細資料,請參見:

注意事項

  • 指定或排除ECS規格類型系列建立的ECI Pod按照實際產生的ECS規格進行計費,不按照vCPU和記憶體計費。

    重要

    ECI Pod建立成功後,您可以執行kubectl describe pod命令查看其YAML詳情,通過k8s.aliyun.com/eci-instance-spec欄位確認ECI Pod實際使用的ECS規格,ECI會按照該ECS規格進行計費。

  • 指定或排除ECS規格類型系列時,系統無法自動選擇到某些規格,如GPU規格(gn6i等)、本地碟規格(i2g等)等。如有需要,請明確指定ECS規格來建立ECI Pod。具體操作,請參見指定ECS規格建立Pod

  • 指定或排除ECS規格類型系列的功能僅適用於指定vCPU和記憶體規格的情境,如果優先指定的是ECS規格,則該功能不會生效。

  • 支援指定或排除規格類型系列建立搶佔式執行個體,該情境下系統會綜合考量配置的規格類型系列順序和市場價格(價格優先),為您選擇最優的執行個體規格。如果您對規格類型系列有嚴格要求,建議只配置一個規格類型系列。

配置說明

k8s.aliyun.com/eci-instance-family的取值為ECS規格類型系列,相關說明如下:

  • 可配置多個規格類型系列,取值範圍為ECI支援的ECS規格類型系列。

    重要

    目前8代規格僅支援Arm架構規格,建立Pod時需要通過nodeSelector調度到Arm節點,因此無法與其他x86架構的規格同時配置,只能單獨指定或排除Arm規格類型系列,具體配置樣本請參見樣本五:指定Arm規格類型系列

  • 在規格類型系列前加上-表示排除該規格類型系列。

    例如:k8s.aliyun.com/eci-instance-family: "-ecs.c6, -ecs.c5"表示排除ecs.c6和ecs.c5規格類型系列。

  • 對於指定的規格類型系列,系統會按照配置的順序進行選擇。

    例如:k8s.aliyun.com/eci-instance-family: "ecs.c6, ecs.c5"表示優先使用ecs.c6規格類型系列,當ecs.c6規格類型系列中,滿足vCPU和記憶體條件的規格庫存不足時,使用ecs.c5規格類型系列。如果ecs.c5規格類型系列仍庫存不足,則建立失敗。

使用k8s.aliyun.com/eci-instance-family時,必須先指定vCPU和記憶體規格,您可以通過以下兩種方式指定:

  • 通過定義容器的limits或requests來指定,建議使用limits。

  • 在Pod metadata中添加k8s.aliyun.com/eci-use-specs的Annotation來指定。

樣本一:指定ECS規格類型系列

配置項

實現效果

  • 通過limit指定了vCPU和記憶體資源(2 vCPU,4 GiB記憶體)。

  • 通過k8s.aliyun.com/eci-instance-family: "ecs.c6, ecs.g6"指定優先使用ecs.c6規格類型系列的規格,其次使用ecs.g6規格類型系列中的規格。

優先使用ecs.c6.large規格,其次使用ecs.g6.large規格。

說明

該樣本配置效果等同於k8s.aliyun.com/eci-use-specs: "ecs.c6.large,ecs.g6.large"

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      name: test
      labels:
        app: test
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-instance-family: "ecs.c6,ecs.g6"    # 指定優先使用ecs.c6規格類型系列的規格,其次使用ecs.g6規格類型系列的規格
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: "2"       # vCPU上限        
            memory: "4Gi"  # 記憶體上限

樣本二:排除ECS規格類型系列

配置項

實現效果

  • 通過k8s.aliyun.com/eci-use-specs: "2-4Gi"指定vCPU和記憶體資源(2 vCPU,4 GiB記憶體)。

  • 通過k8s.aliyun.com/eci-instance-family: "-ecs.hfg6,-ecs.hfg5"排除使用ecs.hfg6和ecs.hfg5規格類型系列中的規格。

從除了ecs.hfg6和ecs.hfg5規格類型系列外的其他ECI支援的ECS規格類型系列中選擇滿足vCPU和記憶體要求的規格。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                    # 指定模糊的vCPU和記憶體規格
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg6,-ecs.hfg5"    # 排除ecs.hfg6和ecs.hfg5規格類型系列
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

樣本三:指定ECS規格代數並排除ECS規格類型系列

配置項

實現效果

  • 通過k8s.aliyun.com/eci-use-specs: "2-4Gi"指定vCPU和記憶體資源(2 vCPU,4 GiB記憶體)。

  • 通過k8s.aliyun.com/eci-instance-generation: "6,5" 指定優先使用6代ECS規格,其次使用5代ECS規格。

  • 通過k8s.aliyun.com/eci-instance-family: "-ecs.hfg5"排除ecs.hfg5規格類型系列。

  • 優先從6代ECS規格中選擇滿足vCPU和記憶體條件的規格。

  • 如果6代ECS規格庫存不足,從除了ecs.hfg5規格類型系列外的其他ECI支援的5代ECS規格中進行選擇。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                   # 指定模糊的vCPU和記憶體規格
        k8s.aliyun.com/eci-instance-generation: "6,5"           # 指定優先使用6代ECS規格,其次使用5代ECS規格
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg5"           # 排除ecs.hfg5規格類型系列
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

樣本四:排除ECS規格代數並排除ECS規格類型系列

配置項

實現效果

  • 通過k8s.aliyun.com/eci-use-specs: "2-4Gi"指定vCPU和記憶體資源(2 vCPU,4 GiB記憶體)。

  • 通過k8s.aliyun.com/eci-instance-generation: "-5,-4" 排除使用5代和4代ECS規格。

  • 通過k8s.aliyun.com/eci-instance-family: "-ecs.hfg6"排除ecs.hfg6規格類型系列。

從除了ecs.hfg6規格類型系列外的其他7代和6代ECS規格中選擇滿足vCPU和記憶體條件的規格。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi"                    # 指定模糊的vCPU和記憶體規格
        k8s.aliyun.com/eci-instance-generation: "-5,-4"          # 排除5代和4代ECS規格
        k8s.aliyun.com/eci-instance-family: "-ecs.hfg6"            # 排除ecs.hfg6規格類型系列
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

樣本五:指定Arm規格類型系列

配置項

實現效果

  • 通過k8s.aliyun.com/eci-use-specs: "2-4Gi,4-8Gi"指定vCPU和記憶體資源(優先2 vCPU,4 GiB記憶體,其次4 vCPU,8 GiB記憶體)。

  • 通過k8s.aliyun.com/eci-instance-family: "ecs.c8y"指定使用ecs.c8y規格類型系列的規格。

  • 通過alibabacloud.com/eci: "true"kubernetes.io/arch: arm64將Pod調度到Arm架構的虛擬節點。

優先使用ecs.c8y.large規格,其次使用ecs.c8y.xlarge規格。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "2-4Gi,4-8Gi"              # 指定多個模糊的vCPU和記憶體規格
        k8s.aliyun.com/eci-instance-family: "ecs.c8y"            # 指定ecs.c8y規格類型系列
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/arch: arm64  # 調度到Arm節點

樣本六:不生效配置

指定ECS規格類型系列的功能僅適用於模糊指定vCPU和記憶體規格的情境,不適用於明確指定ECS規格的情境。如果指定ECS規格類型系列的功能沒有生效,會產生IgnoreInstanceTypeFeatures事件。

事件名稱

事件類型

事件資訊

事件說明

IgnoreInstanceTypeFeatures

Warning

[eci.containergroup]The instance type features will be ignored as the provided specifications, [%s],correspond exclusively to ECS instance types.

由於已通過k8s.aliyun.com/eci-use-specs明確指定了ECS規格,因此自動忽略指定ECS規格類型系列的Annotation。

如下樣本中,會自動忽略指定ecs.c6規格類型系列的Annotation,僅使用ecs.c5.large規格建立ECI Pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true" 
      annotations:
        k8s.aliyun.com/eci-use-specs: "ecs.c5.large"   # 指定明確的ECS規格
        k8s.aliyun.com/eci-instance-family: "ecs.c6"   # 指定ECS規格類型系列(實際不會生效)
    spec:
      containers:
      - name: nginx
        image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
        ports:
        - containerPort: 80

在Pod事件中可看到IgnoreInstanceTypeFeatures事件如下:

generation1