在指定vCPU和內存創建ECI Pod的場景下,如果您對規格有一定要求,例如只想使用6代ECS規格(如g6、c6等),可添加k8s.aliyun.com/eci-instance-generation
的Annotation來指定ECS規格代數。本文介紹創建ECI Pod時,如何指定或排除ECS規格代數。
功能說明
指定vCPU和內存創建ECI Pod時,系統會使用多種ECS規格進行支撐,并自動選擇滿足vCPU和內存條件且有庫存的規格。此時,您可以添加Annotation(k8s.aliyun.com/eci-instance-generation
)來指定或排除ECS規格代數。
如果指定了某些ECS規格代數,則系統僅會從相應代數的ECS規格中進行選擇,如果指定的ECS規格代數沒有庫存,則不會創建ECI Pod。
如果排除了某些ECS規格代數,則系統在選擇規格時會排除這些規格代數,從其他ECI支持的ECS規格代數中選擇規格。
支持指定或排除的ECS規格代數,及其包含的ECS規格族如下:
ECS規格代數 | ECS規格族 |
8 | g8i、c8i、r8i、hfg8i、hfc8i、hfr8i |
7 | g7、c7、r7、hfg7、hfc7、hfr7、g7ne |
6 | g6e、g6、c6e、c6、r6e、r6、hfc6、hfg6、s6 |
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-generation
的取值為ECS規格代數,相關說明如下:
支持配置多個規格代數,取值范圍為4、5、6、7。
在規格代數前加上
-
表示排除該規格代數。例如:
k8s.aliyun.com/eci-instance-generation: "-5,-4"
表示排除5代和4代ECS規格,使用7代或6代ECS規格。對于指定的規格代數,系統會按照配置的順序進行選擇。
例如:
k8s.aliyun.com/eci-instance-generation: "6,5"
表示優先使用6代ECS規格,當6代ECS規格中,滿足vCPU和內存條件的規格庫存不足時,使用5代ECS規格。如果5代ECS規格庫存仍不足,則創建失敗。
使用k8s.aliyun.com/eci-instance-generation
時,必須先指定vCPU和內存規格,您可以通過以下兩種方式指定:
通過定義容器的limits或requests來指定,建議使用limits。
在Pod metadata中添加
k8s.aliyun.com/eci-use-specs
的Annotation來指定。
示例一:指定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-instance-generation: "6,5" # 指定優先使用6代ECS規格,其次使用5代ECS規格
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規格代數
配置項 | 實現效果 |
| 從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規格
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
示例三:指定ECS規格代數并排除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規格族
配置項 | 實現效果 |
| 從除了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
示例五:不生效配置
指定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. | 由于已通過 |
如下示例中,會自動忽略指定6代ECS規格的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-generation: "6" # 指定ECS規格代數(實際不會生效)
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80