弹性容器实例和容器服务提供 vci-profile 能力,可无侵入式支持业务下发至 VCI Pod。
vci-profile 是 VCI 配置文件,提供集群或命名空间维度的 VCI 资源使用统一配置以及全局固定配置的能力。减少用户对于业务工作负载 YAML 的修改,同时能够更加便捷、高效以及无侵入式使用 VCI 能力,避免用户混淆运维管理和业务管理的情况。
目前通过 vci-profile 选择并调度至 VCI 资源的行为属于“软性调度”,即最终 Pod 的调度结果会受到集群中的 VCI Annotation、弹性资源优先级调度策略(Resource Policy)等能力共同作用的影响,因此存在可能导致 Pod 最终未调度至 VCI 的情况。
功能之间的相互影响说明如下:
功能 | 说明 | 作用域 | 作用效果 |
---|---|---|---|
VCI Annotation | 指强制使用 VCI 的 Annotation:vke.volcengine.com/burst-to-vci: enforce 。该功能解决单个 Pod 是否调度到 VCI 的问题。 | 工作负载 | 硬性调度至 VCI,ResourcePolicy 策略无效。 |
vci-profile 文件 | 该功能解决无侵入式使用 VCI 的问题。 | 集群 | 软性调度至 VCI,会受到 ResourcePolicy 策略影响。详细说明见下方正文。 |
弹性资源优先级调度 | 该功能解决 Pod 所需计算资源的问题。 | 工作负载 | ECS、VCI 资源动态混合弹性。 |
说明
目前仅 VPC-CNI 网络模型的集群支持使用 vci-profile 文件。
如需使用 vci-profile 能力,需要在满足 前提条件 的集群中创建 vci-profile 文件。目前支持通过容器服务控制台一键创建和通过 kubectl 创建两种方式。推荐使用控制台一键创建方式。
登录 容器服务控制台。
在左侧导航栏中选择 集群。
在集群列表,单击需目标集群名称。
在集群管理页面的左侧导航栏中,选择 节点管理 > 虚拟节点。
在 虚拟节点 页面单击 VCI 全局配置。
集群中无 vci-profile 文件时,根据系统提示,单击 一键创建,为当前集群创建 vci-profile 文件。
在 VCI 全局配置 页面,按需配置参数,然后单击 确定。
参数 | 选项 | 说明 |
---|---|---|
VCI 全局配置 | ||
默认采集配置 | VCI Pod 是否开启日志采集能力,将日志采集到火山引擎日志服务。 | |
Kubernetes 一致性策略 | 特权模式 | VCI Pod 的特权模式(包括 Pod、Container 级别)兼容性配置。
|
DNS 解析策略 | VCI Pod 内部的 DNS 解析行为配置。
| |
节点文件目录挂载策略 | VCI Pod 挂载节点文件目录的配置。
| |
Pod hostIP 反显策略 | VCI Pod 的节点 IP 地址相关参数
| |
VCI 选择器配置 | ||
命中调度策略 | 尽量调度 | 不会忽略扩展调度器等因素影响,无法保证规则选中的 Pod 一定调度至 VCI。 |
强制调度 | 忽略扩展调度器等因素影响,强制保证规则选中的 Pod 一定调度至 VCI。 | |
规则 | 名称 | 选择器(selector)对象名称。系统默认的命名格式为selector-N ,您也可以自定义配置,同一个集群内名称需唯一。 |
命名空间选择器 | 开启后,表示通过 NameSpace Label 筛选 Pod。您可按需配置如下参数:
说明 可以同时设置 标签选择 和 表达式选择,相互为 逻辑与 关系。 | |
对象选择器 | 开启后,表示通过 Pod Label 筛选 Pod。您可按需配置如下参数:
说明 可以同时设置 标签选择 和 表达式选择,相互为 逻辑与 关系。 | |
命中作用器 | 开启后,表示为 Pod 动态追加 标签(Label)或者 注解(Annotation)。 |
连接集群。具体操作说明,请参见 连接集群。
创建 vci-profile 的 YAML 文件。
在 kube-system 命名空间下以 ConfigMap 形式创建 vci-profile 文件。后续在集群中创建 Pod 时系统会读取 kube-system 命名空间下的 vci-profile 文件,并按照 vci-profile 中的配置来创建 Pod。
vci-profile 文件的完整 YAML 模板如下:
apiVersion: v1 kind: ConfigMap metadata: name: vci-profile # ConfigMap 名称,必须为 vci-profile。 namespace: kube-system # vci-profile 文件所属命名空间,必须为 kube-system。 data: preferredSubnetIds: subnet-3tispp1nai1****, subnet-3tispp1nai2**** # VCI Pod 所属的 VPC 子网。 tlsEnable: "true" # VCI Pod 是否开启并采集日志到火山引擎日志服务。 securityContextPrivilegedConfig: ignore # VCI Pod 的特权模式兼容性配置。 dnsPolicyClusterFirstWithHostNetConfig: clusterFirst # VCI Pod 内部的 DNS 解析行为配置。 volumesHostPathConfig: ignore # VCI Pod 挂载节点文件目录的配置。 hostIpConfig: podIp # VCI Pod 的 status.hostIP 反显字段配置。 enforceSelectorToVci: "true" # 是否强制调度 selectors 选中的 Pod 到 VCI。 timezone: Asia/Shanghai # 同步虚拟节点和容器的时区。 selectors: | [ { "name": "selector-demo1", "namespaceSelector": { "matchLabels": { "vci": "true" }, "matchExpressions": [ { "key": "tier", "operator": "In", "values": ["backend"] } ] }, "effect": { "annotations": { "vci.volcengine.com/tls-enable": "true" }, "labels": { "created-by-vci": "true" } } } ]
您可以修改 vci-profile 中的data
字段配置。
data 中的配置项 | 说明 | 详细说明和示例 |
---|---|---|
selectors | 通过配置 vci-profile 文件中的selectors ,匹配 Pod 使用 VCI 资源并为 Pod 增加相应的 Annotation 和 Label。 | selectors 配置项 |
除 selectors 外,preferredSubnetIds、tlsEnable 等配置项 | 除selectors 外,支持通过更新preferredSubnetIds 、tlsEnable 等配置项来控制集群级别 VCI Pod 的固定配置。 | 全局固定配置项 |
创建 vci-profile 文件对应的 ConfigMap。
kubectl create -f vci-profile.yaml
创建 Pod 时,系统会按照 vci-profile 文件中的selectors
字段去匹配 Pod。对于 Label 能够匹配上的 Pod,会软性调度到 VCI 资源,并且为 Pod 追加 VCI 相关的 Annotation 和 Label。
selectors
中可以包含多个 selector,每个 selector 由name
、namespaceSelector
、objectSelector
、effect
组成。详细说明如下:
参数 | 必填与否 | 说明 |
---|---|---|
name | 必填 | selector 对象名称。不能为空。 |
namespaceSelector | 非必填 | 通过 NameSpace Label 筛选 Pod。
说明 可以同时设置 matchExpressions 和 matchLabels,相互为 逻辑与 关系。 |
objectSelector | 非必填 | 通过 Pod Label 筛选 Pod。
说明 可以同时设置 matchExpressions 和 matchLabels,相互为 逻辑与 关系。 |
effect | 非必填 | 为 Pod 动态追加的 Annotation 和 Label。
|
namespaceSelector
和objectSelector
中选择一个进行配置。namespaceSelector
和objectSelector
,则 Pod 需要同时满足两者才会视为匹配,即namespaceSelector
和objectSelector
为 逻辑与 关系。namespaceSelector
和objectSelector
均未配置,但是却配置了effect
时,effect
将对所有通过 vci-profile 判定调度到 VCI 的 Pod 生效。注意
此时 ResourcesPolicy 策略无效。但如果 Pod 上存在 Annotation:vke.volcengine.com/burst-to-vci:enforce
,则会受到该类型effect
的影响。
effect
中声明的 Annotation 和 Label 追加到 VCI Pod 中(只追加 Key,不覆盖 Value)。effect
,以此类推。namespaceSelector
时,建议谨慎设置集群默认创建的命名空间(default、kube-system、kube-node-lease、kube-public)下的全部 Pod 调度到 VCI。因为 VKE 部分系统组件以 Daemonset 形式部署在上述命名空间内,目前 VCI 暂未提供完整的 Daemonset 能力。通过配置namespaceSelector
和objectSelector
,将 Pod 本身以及所属命名空间均含有 Label:"use-vci": "true"
的 Pod 调度到 VCI。
apiVersion: v1 kind: ConfigMap metadata: name: vci-profile # ConfigMap 名称,必须为 vci-profile。 namespace: kube-system # vci-profile 文件所属命名空间,必须为 kube-system。 data: selectors: | [ { "name": "selector-demo", "namespaceSelector": { "matchLabels": { "vci": "true" } }, "objectSelector":{ "matchLabels":{ "use-vci": "true" } } } ]
配置selectors
后,您可以通过以下命令确认selectors
是否生效。
kubectl get mutatingwebhookConfiguration general-webhook-mutate-configuration -o yaml
如果返回的 YAML 中已包含配置的selectors
字段,则表示配置成功;如果未包含,请检查selectors
的格式是否有误。以 CPU 负载配置示例 举例,YAML 中会增加如下配置:
- admissionReviewVersions: - v1 - v1beta1 clientConfig: caBundle: ... url: https://xx-general-webhook:9443/vci-profile failurePolicy: Fail matchPolicy: Equivalent name: vciprofile-0.mutating.ek8s.io namespaceSelector: matchLabels: vci: "true" objectSelector: matchLabels: use-vci: "true" reinvocationPolicy: Never rules: - apiGroups: - "" apiVersions: - '*' operations: - CREATE resources: - pods scope: '*' sideEffects: None timeoutSeconds: 10
data
中包含的preferredSubnetIds
、tlsEnable
等固定配置项对应 Pod 的 VPC 子网、日志采集等信息,您可以根据需要进行更新。更新后的配置可以即时生效,无需重启 vci-virtual-kubelet 组件。
说明
vci-profile 文件中的全局固定配置,作用于集群级别,即在集群中创建 VCI Pod 时:
详细的配置项说明如下:
配置项 | 示例值 | 说明 |
---|---|---|
preferredSubnetIds | subnet-3tispp1nai1****, subnet-3tispp1nai2**** | VCI Pod 所属的 VPC 子网。可配置不同可用区的子网,多个子网间使用半角逗号分隔( 说明 若当前虚拟节点(Virtual Node)只能识别当前可用区的单个子网,则按照先后顺序选择。 |
tlsEnable | true | VCI Pod 是否开启日志采集能力,将日志采集到火山引擎日志服务。Value 取值如下:
|
securityContextPrivilegedConfig | ignore | VCI Pod 的特权模式(包括 Pod、Container 级别)兼容性配置。 |
dnsPolicyClusterFirstWithHostNetConfig | clusterFirst | VCI Pod 内部的 DNS 解析行为配置。 |
volumesHostPathConfig | ignore | VCI Pod 挂载节点文件目录的配置。 |
hostIpConfig | podIp | VCI Pod 的节点 IP 地址相关参数 |
enforceSelectorToVci | true | vci-profile 文件中, |
timezone | Asia/Shanghai | 设置虚拟节点的时区。VCI Pod 开启时区同步功能后,将同步虚拟节点的时区。 |