用户指南

最佳实践

API 文档

Annotation 说明

最近更新时间:2021-06-16 17:31:13

工作负载 template annotation 说明

您可以通过在 yaml 中定义 template annotation 的方式,实现为 Pod 绑定安全组、分配资源等能力。配置方法见下表:

注意:

  • 如果不指定安全组,则 Pod 会默认绑定同地域的 default 安全组。请确保 default 安全组的网络策略不影响该 Pod 正常工作。
  • 如需分配 GPU 资源,则必须填写 eks.tke.cloud.tencent.com/gpu-type
  • 下表中除 eks.tke.cloud.tencent.com/gpu-type 外,其余4个资源分配相关的 annotation 均为非必填,如填写则请确保正确性。
  • 如需分配 CPU 资源,则必须同时填写 cpumem 2个 annotation,且数值必须符合 资源规格 中的 CPU 规格。另外,可以通过 cpu-type 指定分配 intel 或 amd CPU,其中 amd 具备更高的性价比,详情请参考 产品定价
  • 如需分配 GPU 资源,则必须同时填写 cpumemgpu-typegpu-count 4个 annotation,且数值必须符合 资源规格 中的 GPU 规格。
Annotation Key Annotation Value 及描述 是否必填
eks.tke.cloud.tencent.com/security-group-id 工作负载默认绑定的安全组,请填写 安全组 ID
  • 可填写多个,以,分割。例如 sg-id1,sg-id2
  • 网络策略按安全组顺序生效。
  • 请注意单个安全组默认只能关联 2000 个计算实例,如云服务器 CVM 或 弹性容器 Pod,详细请参考安全组限制
否。如不填写,则默认关联工作负载绑定同地域的 default 安全组。
如填写,请确保同地域已存在该安全组 ID。
eks.tke.cloud.tencent.com/cpu Pod 所需的 CPU 核数,请参考 资源规格 填写。默认单位为核,无需再次注明。 否。如填写,请确保为支持的规格,且需完整填写 cpumem 两个参数。
eks.tke.cloud.tencent.com/mem Pod 所需的内存数量,请参考 资源规格 填写,需注明单位。例如,512Mi、0.5Gi、1Gi。 否。如填写,请确保为支持的规格,且需完整填写 cpumem 两个参数。
eks.tke.cloud.tencent.com/cpu-type Pod 所需的 CPU 资源型号,目前支持型号如下:
  • intel
  • amd
  • 支持优先级顺序写法,如 “amd,intel” 表示优先创建 amd 资源 Pod,如果所选地域可用区 amd 资源不足,则会创建 intel 资源 Pod。
各型号支持的具体配置请参考 资源规格
否。如果不填写则默认不强制指定 CPU 类型,会根据 指定资源规格方法 尽量匹配最合适的规格,若匹配到的规格 Intel 和 amd 均支持,则优先选择 Intel。
eks.tke.cloud.tencent.com/gpu-type Pod 所需的 GPU 资源型号,目前支持型号如下:
  • V100
  • 1/4*T4
  • 1/2*T4
  • T4
  • 支持优先级顺序写法,如 “T4,V100” 表示优先创建 T4 资源 Pod,如果所选地域可用区 T4 资源不足,则会创建 V100 资源 Pod。
各型号支持的具体配置请参考 资源规格
如需 GPU,则此项为必填项。填写时,请确保为支持的 GPU 型号,否则会报错。
eks.tke.cloud.tencent.com/gpu-count Pod 所需的 GPU 数量,请参考 资源规格 填写,默认单位为卡,无需再次注明。 否。如填写,请确保为支持的规格。
eks.tke.cloud.tencent.com/retain-ip Pod 固定 IP,value 填写 "true" 开启此特性,开启特性的 Pod ,当 Pod 被销毁后,默认会保留这个 Pod 的 IP 24小时。24小时内 Pod 重建,仍可使用该 IP。24小时以后,该 IP 有可能被其他 Pod 抢占。
eks.tke.cloud.tencent.com/retain-ip-hours 修改 Pod 固定 IP 的默认时长,value 填写数值,单位是小时。默认是24小时,最大可支持保留一年。
eks.tke.cloud.tencent.com/role-name 为 Pod 关联 CAM 角色,value 填写 CAM 角色名称,Pod 可获取该 CAM 角色包含的权限策略,方便 Pod 内的程序进行如购买资源、读写存储等云资源操作。 否。如填写,请确保填写的 CAM 角色名存在。
eks.tke.cloud.tencent.com/monitor-port 为 Pod 设置监控数据暴露端口,以便被 Prometheus 等组件采集。 否。不填写默认为 9100。
eks.tke.cloud.tencent.com/custom-metrics-url 为 Pod 设置自定义监控指标拉取地址,通过该地址暴露的监控数据会自动被监控组件读取并上报。 否。如填写,请确保暴露的数据协议可被监控系统识别,如 Prometheus 协议、云监控数据协议。

示例

以下为 Pod 绑定安全组的 GPU 规格完整示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  generation: 1
  labels:
    k8s-app: nginx
    qcloud-app: nginx
  name: nginx
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: nginx
      qcloud-app: nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      annotations:
        eks.tke.cloud.tencent.com/cpu: "2"
        eks.tke.cloud.tencent.com/gpu-count: "1"
        eks.tke.cloud.tencent.com/gpu-type: 1/4*V100
        eks.tke.cloud.tencent.com/mem: 10Gi
        eks.tke.cloud.tencent.com/security-group-id: "sg-dxxxxxx5,sg-zxxxxxxu"
        eks.tke.cloud.tencent.com/role-name: "cam-role-name"
        eks.tke.cloud.tencent.com/monitor-port: "9123"
        eks.tke.cloud.tencent.com/custom-metrics-url: "http://localhost:8080/metrics"
      creationTimestamp: null
      labels:
        k8s-app: nginx
        qcloud-app: nginx
    spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: Always
        name: nginx
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
            nvidia.com/gpu: "1"
          requests:
            cpu: "1"
            memory: 2Gi
            nvidia.com/gpu: "1"
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30

虚拟节点 annotation 说明

弹性容器服务 EKS 支持虚拟节点特性,您可通过在 yaml 中定义 annotation 的方式,实现自定义 DNS 等能力,具体如下:

Annotation Key Annotation Value 及描述 是否必填
eks.tke.cloud.tencent.com/resolv-conf 容器解析域名时查询 DNS 服务器的 IP 地址列表。例如 nameserver 8.8.8.8
可通过 kubectl edit node eklet-subnet-xxxx 添加该 annotation。
修改后调度到该虚拟节点的 Pod 默认全部采用该 DNS 配置。
否。

示例

以下为虚拟节点自定义 DNS 配置的示例:

apiVersion: v1
kind: Node
metadata:
  annotations:
    eks.tke.cloud.tencent.com/resolv-conf:|
      nameserver 4.4.4.4
      nameserver 8.8.8.8

服务 annotation 说明

弹性容器服务支持使用已有负载均衡器创建公网/内网访问的 Service。如果您具备空闲的应用型负载均衡,需要提供给即将创建的 Service 使用,或需要在集群内使用相同的负载均衡时,您可以通过添加 annotations 的方法指定。

Annotation Key Annotation Value 及描述 是否必填
service.kubernetes.io/tke-existed-lbid Service 使用已有 负载均衡CLB 创建,value 填写希望使用的 CLB 实例 ID。 否。如填写,请确保填写的 CLB 实例 ID 存在。
service.kubernetes.io/qcloud-share-existed-lb 默认多个 Service 不可共用同一个 CLB 实例,如果希望 Service 复用其他 Service 占用的 CLB,请添加此 annotation 并将 value 填写为 "true" 否。不填写默认不可复用。

此外,弹性集群也支持和 TKE 普通集群一致的扩展协议,详情可参见 Service 扩展协议

注意:

  • 请确保您的弹性容器服务业务不与云服务器业务共用一个负载均衡。
  • 使用已有负载均衡时:
    • 只能使用通过负载均衡控制台创建的负载均衡器,不支持复用由容器服务自动创建的负载均衡器。
    • 复用负载均衡的 Service 端口不能冲突。
    • 不支持跨集群 Service 复用负载均衡。

示例

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.kubernetes.io/tke-existed-lbid: lb-pxxxxxxq
    service.kubernetes.io/qcloud-share-existed-lb: true
  name: servicename
  namespace: default
spec:
  externalTrafficPolicy: Cluster
  ports:
  - name: tcp-80-80
    nodePort: 31728
    port: 80
    protocol: TCP
    targetPort: 80
  sessionAffinity: None
  type: LoadBalancer
目录