详情页标题前

阿里云容器服务ACK配置eci-profile-云淘科技

详情页1

为了减少您对业务YAML的改动,ECI支持了eci-profile。eci-profile可以提供集群维度的ECI资源视图,支持根据selector实现Pod编排。本文介绍如何配置eci-profile。

功能介绍

阿里云容器服务ACK通过VK(部署ack-virtual-node组件)使用ECI时,可能会碰到以下问题:

  • 需要上层业务修改YAML才能调度业务Pod到ECI

  • 需要上层业务修改YAML才能开启ECI特有的高级特性

这类问题导致了运维管理工作和业务管理工作混淆在一起。为解决此类问题,ECI支持了eci-profile。eci-profile可以实现以下三个功能:

  • ECI Scheduler

    在混合使用ECI和普通节点的场景下,一般可以通过配置Pod Label、配置Namespace Label和配置ECI弹性调度等方式将Pod调度到ECI,但这些方式均需要对存量资源做一定的修改,无法做到零侵入。

    对于上述情况,ECI Scheduler基于Mutating Webhook机制实现了一种新的调度机制。在eci-profile中,您可以自定义selector,selector可以根据Pod的Label或者Pod所属Namespace的Label来筛选Pod,满足selector筛选条件的Pod会自动调度到ECI。

  • ECI Effect

    对于ECI的一些功能特性,例如指定ECS实例规格,启用镜像缓存,设置NTP服务等,需要在Pod中追加Annotation或者Label来实现。更多信息,请参见ECI Pod Annotation。

    对于上述情况,ECI Effect实现了自动追加Annotation和Label的功能。在eci-profile中,您可以自定义selector,在selector中同时指定筛选条件和要追加的Annotation和Label,满足selector筛选条件的Pod会自动调度到ECI,并自动追加指定的Annotation和Label。

  • 配置热更新

    eci-profile中包含了Cluster IP、混合云模式、日志采集、交换机等配置,您可以根据需要进行更新。

    • 更新配置时无需重启VK。

    • 对于新创建的ECI Pod,可以即时生效更新后的配置;对于存量ECI Pod,需要滚动发布后才能生效更新后的配置。

注意事项

  • 使用该功能时,请确保集群中的VK(ack-virtual-node组件)为最新版本。关于如何升级组件,请参见管理组件。

  • 如果需要使用ECI Scheduler功能,则必须要开启Webhook。ACK Serverless集群默认调度Pod到ECI,无需使用ECI Scheduler功能。

配置说明

创建Pod时,系统会读取kube-system命名空间下的eci-profile配置文件(名为eci-profile的ConfigMap),按其data配置来创建Pod。您可以通过kubectl get cm -n kube-system eci-profile -o yaml命令查看eci-profile的YAML。eci-profile的YAML模板如下:

apiVersion: v1
data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false" 
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  featureGates: "WaitForFirstConsumer=false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-11T08:28:14Z"
  name: eci-profile
  namespace: kube-system
  resourceVersion: "356"
  uid: b345fa8c-919e-41fc-a981-57864b1a****

您可以修改eci-profile中的data配置,配置selectors或更新固定配置项。

data中的配置项

说明

详细说明及示例

selectors

可自定义增加selector(分为objectSelector和namespaceSelector)和effect,用于实现ECI Scheduler和ECI Effect功能。您可以根据需要灵活配置selectors。

配置selectors

除selectors外,vpcId、vswitchIds等固定配置项

集群级别配置项,支持热更新。您可以根据需要更新配置项取值。

更新固定配置项

修改eci-profile的方式如下:

  • 通过kubectl edit命令

    kubectl edit configmap eci-profile -n kube-system
  • 通过容器服务管理控制台

    1. 登录容器服务管理控制台。

    2. 在集群页面,找到目标集群,单击集群名称。

    3. 在集群管理页的左侧导航栏,选择配置管理>配置项

    4. 选择命名空间为kube-system

    5. 找到eci-profile,单击YAML编辑

配置selectors

selectors包含了ECI Scheduler和ECI Effect的配置。创建Pod时,系统会按照selectors去匹配Pod,对于Label能够匹配上的Pod,会自动调度到ECI,或者追加Annotation和Label,以便生效ECI的功能特性。

selectors中可以包含多个selector,在每个selector中,您必须声明selector的name,可以根据需要声明以下信息:

  • namespaceSelector:要匹配的Namespace Label。

  • objectSelector:要匹配的Pod Label。

  • effect:要动态追加的Annotation和Label。

selectors的配置模板如下:

说明

请根据自身业务场景设计selectors,实际配置时请去除注释信息。

data:
  selectors: |
    [
      {
        "name": "selector-demo1", #selector名称,必填,不能为空
        "namespaceSelector": {    #通过NameSpace Label筛选,可选
          "matchLabels": {        #要匹配的NameSpace Label。如果填写多个,为与关系
            "eci": "true"
          }
        },
        "objectSelector": {       #通过Pod Label筛选,可选
          "matchLabels": {        #要匹配的Pod Label。如果填写多个,为与关系
            "eci": "true"
          }
        },
        "effect": {               #要动态追加的Annotation和Label,可选
          "annotations": {
            "k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge"
          },
          "labels": {
            "created-by-eci": "true"
          }
        }
      },
      {
        "name": "selector-demo2",   
        "objectSelector": {      
          "matchLabels": {     
            "eci": "test"
    	  }
        }
      }
    ]

上述模板中,名为selector-demo1的selector可以实现以下功能:

如果Pod所属命名空间含有eci: true Label,并且Pod本身含有eci: true Label,则该Pod会自动调度到ECI,并且增加"k8s.aliyun.com/eci-use-specs": "ecs.c6.xlarge"的Annotation,以及created-by-eci: true Label。

重要

  • 在一个selector中,建议您至少配置namespaceSelector和objectSelector中的一个。如果两者同时配置了,则Pod需要同时匹配两者;如果两者均未配置但配置了effect,则effect对所有调度到ECI的Pod均生效。

  • 如果配置了多个selector,将按照顺序匹配selector。匹配成功后,会自动把effect中声明的Annotation和Label追加到Pod中(只追加,不覆盖)。对于重复的Annotation和Label,Pod中原有声明的值优先级最高,其次是顺序匹配上的第一个selector中的effect,以此类推。

配置selectors后,您可以通过以下命令确认selectors是否生效。如果返回的YAML中已包含配置的selectors,则表示配置成功;如果未包含selectors,请检查selectors的格式是否有误。

kubectl get mutatingwebhookconfigurations -o yaml vk-webhook

配置示例一:将特定Pod调度到ECI

配置namespaceSelector和objectSelector实现以下功能:

如果Pod含有created-by-eci: true Label,且所属Namespace含有type: eci Label,则该Pod会被调度到ECI。

data:
  selectors: |
    [
      {
        "name":"eci-selector",
        "namespaceSelector":{
          "matchLabels":{
            "type":"eci"
          }
        },
        "objectSelector":{
          "matchLabels":{
            "created-by-eci":"true"
          }
        }
      }
    ]

配置示例二:将特定Pod调度到ECI并使用GPU规格创建

配置namespaceSelector和effect实现以下功能:

如果Pod所属Namespace含有gpu: true Label,则该Pod会被调度到ECI,并使用指定的GPU实例规格ecs.gn6v-c8g1.2xlarge,同时添加gpu: test Lable。

data:
  selectors: |
    [
      {
        "name":"gpu-namespace-selector",
        "namespaceSelector":{
          "matchLabels":{
            "gpu":"true"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-use-specs":"ecs.gn6v-c8g1.2xlarge"
          },        
          "labels":{
            "gpu":"test"
          }
        }
      }
    ]

配置示例三:将特定Pod调度到ECI并开启自动匹配镜像缓存

配置objectSelector和effect实现以下功能:

如果Pod含有imc: auto Label,则该Pod会被调度到ECI,并使用自动匹配镜像缓存功能。

data:
  selectors: |
    [
      {
        "name":"autoimc-object-selector",
        "objectSelector":{
          "matchLabels":{
            "imc":"auto"
          }
        },
        "effect": {
          "annotations": {
            "k8s.aliyun.com/eci-auto-imc": "true"
          }
        }
      }
    ]

更新固定配置项

data中包含的vpcId、vswitchIds等固定配置项对应VPC、交换机等信息,您可以根据需要进行更新,更新后的配置可以即时生效(无需重启VK)。支持更新的配置项如下:

配置项

示例值

说明

enableClusterIp

“true”

是否支持Cluster IP。

enableLinuxArm64Node

“false”

是否开启ARM节点。如果配置为true,表示可以创建ARM规格的ECI Pod。具体请参见创建ARM实例。

enableLogController

“false”

是否开启SLS CRD日志采集功能。如果配置为true,还需配置

slsMachineGroup。

enablePVCController

“false”

是否开启云盘在线扩容功能。如果配置为true,则允许对绑定了云盘的PVC进行在线扩容。

enablePrivateZone

“false”

是否使用PrivateZone进行域名解析。

enableReuseSSLKey

“false”

是否开启SSL Key复用。如果配置为true,则在创建ECI Pod时,会复用SSL Key来提升创建效率。

重要

默认情况下,创建ECI Pod时,VK会给每个ECI Pod下发不同的SSL证书,这在大批量创建时会影响效率。开启SSL Key复用后,VK会给每个ECI Pod下发同一个SSL证书,这在安全性上会有所降低。

featureGates

“WaitForFirstConsumer=false”

featureGates表示灰度特性,您可以按需配置,目前仅支持配置WaitForFirstConsumer。

配置WaitForFirstConsumer=true时,表示VK+ECI模式下,StorageClass默认使用WaitForFirstConsumer模式。

  • 启用该配置前,需确保csi-provisioner组件已升级到最新release版本,

  • 启用该配置后,当PVC被Pod使用时,需要Pod完成调度后,才触发PV和后端存储的创建,同时完成PVC和PV的绑定。此时,StorageClass中的Zone和Region将不再生效,而是使用Pod调度所在节点的Zone和Region创建存储资源,以保证计算资源调度优先。

更多信息,请参见Volume Binding Mode。

securityGroupId

sg-2ze0b9o8pjjzts4h****

ECI Pod所属安全组。

slsMachineGroup

“test-mg”

ECI Pod所属机器组。当enableLogController配置为true时,需配置该项。

vSwitchIds

vsw-2zeet2ksvw7f14ryz****

ECI Pod所属交换机。可配置多个,用半角逗号间隔。

vpcId

vpc-2zeghwzptn5zii0w7****

ECI Pod所属VPC。

说明

  • 上述配置项均为集群级别的配置项,即在创建ECI Pod时,如果没有额外配置,会采用eci-profile中的配置。

  • 不支持修改resourceGroupId(资源组),ECI Pod默认采用创建集群时配置的资源组。

配置示例如下:

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enableLinuxArm64Node: "false" 
  enableLogController: "false"
  enablePVCController: "false"
  enablePrivateZone: "false"
  enableReuseSSLKey: "false"
  featureGates: "WaitForFirstConsumer=false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  slsMachineGroup: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
  vpcId: vpc-2zeghwzptn5zii0w7****

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/171594.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云容器服务ACK跨地域跨集群迁移应用-云淘科技

    阿里云容器服务备份中心为集群提供灾难备份和恢复能力,对于Kubernetes集群内应用的崩溃一致性、应用一致性、跨地域的灾难恢复提供了一站式的解决方案。本文介绍如何通过应用备份功能实现不同地域集群间的应用迁移。 前提条件 已创建用于备份和恢复的两个集群,且集群版本在v1.20及以上。具体操作,请参见创建Kubernetes托管版集群、创建Kubernetes…

    2023年12月10日
  • 阿里云容器服务ACK将AHAS-应用限流接入注册集群-云淘科技

    注册的集群接入AHAS-应用限流能为分布在各处的Kubernetes集群提供统一的管理方式。本文介绍如何通过容器服务Kubernetes版中的应用将AHAS-应用限流接入至注册的Kubernetes集群。 前提条件 已通过容器服务Kubernetes版接入一个注册的Kubernetes集群。具体操作,请参见创建注册集群并接入本地数据中心集群。 已通过kube…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK通用数据结构-云淘科技

    addon 集群组件配置。 参数名称 类型 示例值 描述 name String nginx-ingress-controller 组件名称。 config String {\”IngressSlbNetworkType\”:\”internet\”} 组件配置。 disabled Boolean false …

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK使用OpenAPI诊断工具进行故障排查-云淘科技

    阿里云OpenAPI平台提供使用诊断工具。本文介绍如何使用OpenAPI诊断工具进行故障排查。 您可以登录OpenAPI使用诊断,输入完整的RequestID或SDK报错信息,然后单击诊断,获取您的故障排查结果及对应的解决方案。 如果诊断工具仍未能解决您的问题,您可以参考故障排除、常见问题获取解决方案。 内容没看懂? 不太想学习?想快速解决? 有偿解决: 联…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK配置eci-profile-云淘科技

    为了减少您对业务YAML的改动,ECI支持了eci-profile。eci-profile可以提供集群维度的ECI资源视图,支持根据selector实现Pod编排。本文介绍如何配置eci-profile。 功能介绍 阿里云容器服务ACK通过VK(部署ack-virtual-node组件)使用ECI时,可能会碰到以下问题: 需要上层业务修改YAML才能调度业务…

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。