You need to enable JavaScript to run this app.
导航
在 VKE 上创建和使用 VCI 类型的 DaemonSet
最近更新时间:2025.05.26 11:13:08首次发布时间:2025.05.26 11:13:08
我的收藏
有用
有用
无用
无用

本文主要介绍如何在容器服务(VKE)上创建和使用弹性容器实例(VCI)类型的 DaemonSet(守护进程)的方法。

使用限制

  • Downward API 所使用的 ConfigMap 和 Secret 等资源需要与业务 VCI Pod 处于相同 Namespace 中。
  • 如果 DaemonSet 的 ServiceAccountName 不为默认值 default,而是使用自定义 ServiceAccount,因为该参数不会转化至 Sidecar Container,因此需要确保业务 VCI Pod 所设置的 ServiceAccount 所拥有的权限建议覆盖 Daemonset,否则可能导致业务 VCI Pod 的 Sidecar Container 无法启动。
  • DaemonSet 和 业务 VCI Pod 的 ShareProcessNamespace 参数建议保持一致。
  • ImagePullSecret 中指定的 Secret 的 Namespace 需要与业务 VCI Pod 一致,或者在业务 VCI Pod 所在 Namespace 中创建相应的 Secret。
  • DaemonSet 不允许使用 PodSecurityContext,建议改用 ContainerSecurityContext。
  • PodDNSConfig 和 HostAliases 字段也不支持在 DaemonSet Pod 级别设置,需要改变至 Container 级别。
  • 如果业务 VCI Pod 使用了镜像缓存功能,建议将 DaemonSet 镜像也制作在镜像缓存中,避免业务 VCI Pod 启动时依然在拉取 DaemonSet 镜像导致启动时间超出预期等问题。
  • 其他字段默认使用业务 VCI Pod Spec。

方案介绍

alt
在 VKE 上创建了部署在 VCI 上的 Daemonset 之后,每个虚拟节点(Virtual Node)会启动一个 Sidecar Container “虚拟 Pod”,不存在“实体 Pod”。

使用流程

VKE 上创建和使用 VCI 类型的 DaemonSet 流程如下:

  1. 通过 VKE 创建 VCI 类型的 DaemonSet。
  2. 创建 VCI Pod 时通过 Annotation 指定要关联的 DaemonSet。
  3. 指定的 VCI 类型 DaemonSet 以 Sidecar Container 形式注入到 VCI Pod 中。

前提条件

操作步骤

步骤一:通过 VKE 创建 VCI 类型的 DaemonSet

创建 DaemonSet 时通过 Annotation 方式指定当前 DaemonSet 可以注入至 VCI Pod 中。

Annotation 说明,如下所示:

Annotation KeyAnnotation Value 示例值说明是否必填

vci.vke.volcengine.com/enable-daemonset-injection

"true"

是否开启 VCI 类型的 DaemonSet 以 Sidecar Container 形式注入到业务 VCI Pod 中。取值如下:

  • true:将 VCI 类型 DaemonSet 注入到 VCI Pod 中。
  • false:(默认)不注入 VCI 类型 DaemonSet 到 VCI Pod 中。

本场景必选

完整的 YAML 示例代码如下所示:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-daemonset # Daemonset 名称。
  namespace: default # Daemonset 所属的命名空间。
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        vci.vke.volcengine.com/enable-daemonset-injection: "true"  # 开启 VCI 类型的 Daemonset 注入到 VCI Pod 的能力。
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx # 容器名称。
        image: nginx:1.14.2 # 容器镜像的地址和版本,请配置为您自己的镜像地址。若使用公网镜像,请确保您的集群能够访问公网。
        ports:
        - containerPort: 80 # adjust port for your container
      tolerations: # 调度容忍,添加该 Toleration 才可创建 DaemonSet 对应的 VCI 实例。
      - effect: NoSchedule
        key: vci.vke.volcengine.com/node-type
        operator: Equal
        value: vci

步骤二:创建 VCI Pod 时通过 Annotation 关联 VCI DaemonSet

创建 VCI Pod 时,通过 Annotation 为当前 Pod 关联指定的 VCI DaemonSet。

Annotation 说明,如下所示:

Annotation KeyAnnotation Value 示例值说明是否必填

vci.vke.volcengine.com/injected-daemonset-names

ns1_vci-ds-log-service, ns2_vci-ds-monitor-service

当前 Pod 需要以 Sidecar Container 方式注入的 VCI Daemonset 列表。取值要求如下:

  • 每个 VCI DaemonSet 需要由 Namespace 和 Name 两部分进行唯一标识,格式为:${Namespace}_${DaemonsetName}。标识总长度不超过 62 个字符(不包含“_”符号)。
  • 可填写多个 VCI 类型的 DaemonSet,使用半角逗号(,)分割。

本场景必选

本文以指定 VCI 规格创建 VCI Pod 为例,在创建 VCI Pod 过程中指定关联 VCI DaemonSet。 更多创建 VCI Pod 的方法和详细操作说明,请参见 创建实例

完整的 YAML 示例代码如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: demo-gpu-1  # Pod 名称。
  namespace: default  # Pod 所属命名空间。
  annotations:
    vke.volcengine.com/burst-to-vci: enforce  #强制使用 VCI。
    vci.vke.volcengine.com/preferred-instance-types: vci.u1.2c-4gi #指定 VCI 实例规格。
    vci.vke.volcengine.com/injected-daemonset-names: ns1_vci-ds-log-service, ns2_vci-ds-monitor-service #当前 Pod 需要以 Sidecar Container 方式注入的 VCI Daemonset 列表。
spec:
  containers:
  - image: cr-cn-beijing.volces.com/****/nginx:1.0 # 容器镜像的地址和版本,请配置为您自己的镜像地址。若使用公网镜像,请确保您的集群能够访问公网。
    imagePullPolicy: Always
    name: nginx
    resources:
      requests:  #指定容器的 vCPU、内存、GPU。
        cpu: 37
        nvidia.com/gpu: 2 #指定容器的 GPU 卡数(同原生),可以同时指定 limits 和 requests,但值必须相等。
      limits:
        cpu: 37
        nvidia.com/gpu: 2