kops创建InstanceGroup时machineType与mixedInstancesPolicy的区别是什么
核心逻辑说明
你之前的理解是错误的,machineType 并不是优先选用的实例规格,无库存时才切换混合列表的逻辑不存在,两个参数的定位完全不同:
machineType是 InstanceGroup 的基础必填字段
这是kops为了兼容单实例规格场景的历史遗留必填参数,即便开启混合实例策略也必须填写,否则配置会直接校验失败。- 开启
mixedInstancesPolicy后的实际生效逻辑
一旦配置了mixedInstancesPolicy,EC2 Auto Scaling组的实例候选池仅包含你在mixedInstancesPolicy.instances下列出的规格,完全不会用到你填写的machineType对应规格,除非你手动把该规格也加入到instances列表中。
ASG的实例选择逻辑完全遵循你配置的分配策略(Spot实例默认是容量优化优先),从候选池里选择库存最充足的规格,和machineType的库存情况没有任何关系。 machineType在混合实例场景下的作用
此时machineType是作为资源基线校准标准存在的:kops会以该规格的vCPU、内存、网络带宽等参数作为单位基准,计算混合实例池中不同规格的容量权重,同时也会基于该值计算节点kubelet的资源预留、集群调度的资源核算标准,避免不同规格节点加入集群后出现调度资源计算偏差。
此外如果后续你删除了mixedInstancesPolicy配置,InstanceGroup会自动回退到单规格模式,直接使用machineType的配置创建ASG,无需额外修改配置。
配置示例修正
你给出的示例中,m5.xlarge 并不会被ASG选用,如果需要把它加入实例候选池,需要手动添加到instances列表中:
apiVersion: kops.k8s.io/v1alpha2 kind: InstanceGroup ... spec: image: kope.io/k8s-1.16-debian-... machineType: m5.xlarge # 作为资源计算基准 maxSize: XX minSize: XX mixedInstancesPolicy: instances: - m5.xlarge # 加入候选池后才会被ASG选中 - m4.xlarge - r4.xlarge - c4.xlarge
内容的提问来源于stack exchange,提问作者user389955
相关产品推荐
相关产品推荐

