本文介紹部署在K8s集群上的應(yīng)用如何使用虛擬節(jié)點(diǎn)(Virtual Node)以及彈性容器實(shí)例(ECI)。

前提條件

使用限制

僅適用于容器服務(wù)ACK托管版或容器服務(wù)ACK專有版集群,且版本大于1.14。

調(diào)度EDAS應(yīng)用到虛擬節(jié)點(diǎn)

方式一:配置Pod標(biāo)簽

在EDAS上創(chuàng)建或部署應(yīng)用時(shí),在應(yīng)用高級(jí)設(shè)置頁(yè)簽,將標(biāo)簽(Label)配置名稱設(shè)置為alibabacloud.com/eci設(shè)置為true,應(yīng)用Pod將會(huì)被調(diào)度到虛擬節(jié)點(diǎn)。

配置Pod標(biāo)簽

方式二:配置命名空間標(biāo)簽

為K8s集群命名空間增加標(biāo)簽:alibabacloud.com/eci=true后,新建的Pod將被調(diào)度到虛擬節(jié)點(diǎn)上,不影響已經(jīng)運(yùn)行中的Pod。

方式三:ECI彈性調(diào)度

重要 該方式僅適用于ACK Pro版集群,且集群的Kubernetes版本不能低于1.18。

在EDAS上創(chuàng)建或部署應(yīng)用時(shí),在應(yīng)用高級(jí)設(shè)置頁(yè)簽,將注解(Annotation)配置名稱設(shè)置為alibabacloud.com/burst-resource有如下兩種配置。

  • eci:當(dāng)集群普通節(jié)點(diǎn)的資源不足時(shí),使用ECI。
  • eci_only:只使用ECI。
ECI彈性調(diào)度

方式四:自定義彈性資源優(yōu)先級(jí)調(diào)度

重要 Kubernetes集群為ACK Pro且版本為1.20。

為應(yīng)用ID為933ff653-xxxx-xxxx-xxxx-d127a75cxxxx的EDAS K8s應(yīng)用配置ECS和ECI混合調(diào)度,當(dāng)普通ECS節(jié)點(diǎn)資源不足時(shí),Pod將被調(diào)度到虛擬節(jié)點(diǎn)上。

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: edas-app-name //建議與EDAS應(yīng)用名相同
  namespace: edas-app-namespace //與EDAS應(yīng)用保持相同命名空間
spec:
  selector:
    edas.appid: 933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
  strategy: prefer
  units:
  - resource: ecs
  - resource: eci

更多內(nèi)容,請(qǐng)參見自定義彈性資源優(yōu)先級(jí)調(diào)度

方式五:使用virtual-kubelet-autoscaler組件調(diào)度Pod到ECI

virtual-kubelet-autoscaler是阿里云提供的Kubernetes Autoscaler插件。在Pod進(jìn)行調(diào)度時(shí),如果沒有匹配的Node節(jié)點(diǎn)(例如已有的ECS work節(jié)點(diǎn)資源不足),那么將會(huì)由virtual-kubelet-autoscaler接管,把調(diào)度失敗的Pod重新調(diào)度到ECI(虛擬節(jié)點(diǎn))上。

安裝組件,請(qǐng)參見安裝virtual-kubelet-autoscaler

方式六:配置ECI Profile

重要 該方式需要開啟Webhook功能。

修改K8s集群kube-system命名空間下名為eci-profile的ConfigMap。

為應(yīng)用ID為933ff653-xxxx-xxxx-xxxx-d127a75cxxxx的EDAS K8s應(yīng)用配置ECI Profile。該配置會(huì)將應(yīng)用的Pod調(diào)度到ECI實(shí)例上,并且自動(dòng)開啟鏡像緩存功能,增加created-by-eci=true的標(biāo)簽。


apiVersion: v1
kind: ConfigMap
metadata:
  name: eci-profile
  namespace: kube-system
data:
  vpcId: "vpc-xxx"
  securityGroupId: "sg-xxx"
  vswitchIds: "vsw-111,vsw-222"
  enableClusterIp: "true"
  enableHybridMode: "false"
  enablePrivateZone: "false"
  selectors: |
    [
        {
            "name":"for-edas-app-1",
            "objectSelector":{
                "matchLabels":{
                    "edas.appid": 933ff653-xxxx-xxxx-xxxx-d127a75cxxxx
                }
            },
            "effect":{  #需要?jiǎng)討B(tài)追加的Annotation和Label
                "annotations":{
                    "k8s.aliyun.com/eci-image-cache": "true"
                },
                "labels":{
                    "created-by-eci":"true"
                }
            }
        }
    ]

更多內(nèi)容,請(qǐng)參見配置ECI Profile