文档简介:
Annotation 使用方法
工作负载里添加 Pod 注解
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxspec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxannotations:eks.tke.cloud.tencent.com/retain-ip: 'true' # 工作负载里添加 Pod 注解是在 .spec.template.metadata.annotations 字段spec:containers:- name: nginximage: nginx
全局配置
apiVersion: v1kind: ConfigMapmetadata:name: eks-confignamespace: kube-systemdata:pod.annotations: |eks.tke.cloud.tencent.com/resolv-conf: |nameserver 183.60.83.19eks.tke.cloud.tencent.com/host-sysctls: '[{"name": "net.core.rmem_max","value": "26214400"}]'
资源与规格
指定 CPU 与内存
eks.tke.cloud.tencent.com/cpu: '8'eks.tke.cloud.tencent.com/mem: '16Gi' # 内存一定要以 Gi 为单位,以 G 为单位则会报参数错误
指定系统盘大小及类型
eks.tke.cloud.tencent.com/root-cbs-size: '50' # 指定系统盘大小,超过20GiB额外按高性能云盘计费,最大1000GiBeks.tke.cloud.tencent.com/root-cbs-type: 'CLOUD_SSD' # 指定系统盘类型为SSD,不额外指定时默认为高性能磁盘,
超过20GiB额外按照SSD磁盘按量计费的刊例价进行计费。
规格自动升配
eks.tke.cloud.tencent.com/spec-auto-upgrade: 'true' # 遇到资源不足时,开启自动升配,只按 CPU 规格向上升配一次
指定 GPU
eks.tke.cloud.tencent.com/gpu-type: 'T4,V100' # 指定 GPU 型号,支持优先级顺序写法,若使用1/4卡的 T4 vGPU 则指定 GPU 型号为1/4*T4。
指定 CPU 类型
eks.tke.cloud.tencent.com/cpu-type: 'amd,intel' # 表示优先创建 amd 资源 Pod,如果所选地域可用区 amd 资源不足,则会创建 intel 资源 Pod
开启竞价模式
eks.tke.cloud.tencent.com/spot-pod: 'true'
IP 保留与 EIP
StatefulSet 固定 IP
eks.tke.cloud.tencent.com/retain-ip: 'true' # 置为 true 启用固定 IP。eks.tke.cloud.tencent.com/retain-ip-hours: '48' # 保留 IP 的最大时长(小时),Pod 销毁之后超过这个时长没有创建回来,IP 将被释放。
绑定 EIP
eks.tke.cloud.tencent.com/eip-attributes: '{"InternetMaxBandwidthOut":50, "InternetChargeType
":"TRAFFIC_POSTPAID_BY_HOUR"}' # 值可以为空串,表示启用 EIP 并使用默认配置;也可以用创建 EIP 接口的
json 参数,详细参数列表参考 https://cloud.tencent.com/document/api/215/16699#2
.-.E8.BE.93.E5.85.A5.E5.8F.82.E6.95.B0,本例中的参数表示 EIP 是按量付费,且带宽上限为 50M。
StatefulSet 固定 EIP
eks.tke.cloud.tencent.com/eip-attributes: '{}' # 启用 EIP 并使用默认配置。eks.tke.cloud.tencent.com/eip-claim-delete-policy: 'Never' # Pod 删除后,EIP 是否自动回收,
默认回收。使用 "Never" 不回收,即下次同名 Pod 创建出来仍然会绑定此 EIP,实现固定 EIP。
StatefulSet 使用已有 EIP
eks.tke.cloud.tencent.com/eip-id-list: 'eip-xx1,eip-xx2' # 这里指定已有的 EIP 实例列表,
确保 StatefulSet 的 Pod 副本数小于等于这里的 EIP 实例数。
镜像与仓库
忽略证书校验
eks.tke.cloud.tencent.com/registry-insecure-skip-verify: 'harbor.example.com' # 也可以写多个,逗号隔开
使用 HTTP 协议
eks.tke.cloud.tencent.com/registry-http-endpoint: 'harbor.example.com' # 也可以写多个,逗号隔开
镜像复用
eks.tke.cloud.tencent.com/cbs-reuse-key: 'image-name'
镜像缓存
eks.tke.cloud.tencent.com/use-image-cache: 'auto'
eks.tke.cloud.tencent.com/image-cache-disk-type: 'CLOUD_SSD' # 指定镜像缓存创建出来的盘类型,
可取值如下:CLOUD_BASIC为普通云硬盘,CLOUD_PREMIUM为高性能云硬盘(默认),CLOUD_SSD为SSD云硬盘,
CLOUD_HSSD为增强型SSD云硬盘,CLOUD_TSSD为极速型SSD云硬盘
eks.tke.cloud.tencent.com/image-cache-disk-size: '50' # 指定镜像缓存创建出来的盘的大小,
默认是镜像缓存创建时设置的大小,可以调大,不能调小,最大支持1000GiB
eks.tke.cloud.tencent.com/use-image-cache: 'imc-xxx'
镜像缓存创建出来的数据盘,在 Pod 删除后会立即销毁。如果需额外保留镜像缓存创建的数据盘,
可以通过注解指定保留时间。开启数据盘保留后,再次创建 Pod 的时候会直接复用保留中的盘,可节省数据再重新从快照回滚至新云硬盘的时间:
eks.tke.cloud.tencent.com/image-cache-disk-retain-minute: '10' # 设定镜像缓存创建的数据盘,在销毁 Pod 后保留 10 分钟
绑定安全组
eks.tke.cloud.tencent.com/security-group-id: 'sg-id1,sg-id2' # 填本地域存在的安全组 id,
多个用逗号隔开,网络策略按安全组顺序生效,安全组默认最多只能绑定 2000 个 Pod,如需更多请提工单提升配额。
绑定角色
超级节点上默认会为 Pod 关联 TKE_QCSLinkedRoleInEKSLog 角色,授予 Pod 里日志采集组件上报日志的权限。
用户也可通过注解为 Pod 关联其他 CAM 角色,方便从 Pod 内获取操作云上资源的权限。
eks.tke.cloud.tencent.com/role-name: 'TKE_QCSLinkedRoleInEKSLog'
设置宿主机内核参数
eks.tke.cloud.tencent.com/host-sysctls: '[{"name": "net.core.rmem_max","value": "26214400"},
{"name": "net.core.wmem_max","value": "26214400"},{"name": "net.core.rmem_default","value":
"26214400"},{"name": "net.core.wmem_default","value": "26214400"}]'
加载内核模块
eks.tke.cloud.tencent.com/host-modprobe: 'toa'
自动重建自愈
超级节点所在集群虚拟机内的 agent 会上报心跳给控制面,如果上报超时(默认 5min),
一般说明 Pod 内进程已经无法正常工作了,故障原因通常是高负载,这时集群默认会自动迁移虚拟机
(对当前虚拟机关机并自动创建新虚拟机,让 Pod 迁移到新虚拟机里去运行),从而实现自愈。
eks.tke.cloud.tencent.com/recreate-node-lost-pod: "false"
eks.tke.cloud.tencent.com/heartbeat-lost-period: 1m
磁盘清理
清理容器镜像
failed to garbage collect required amount of images. Wanted to free 7980402688 bytes, but freed 0 bytes
eks.tke.cloud.tencent.com/image-gc-high-threshold: '80' # 表示磁盘使用空间达 80% 触发清理容器镜像eks.tke.cloud.tencent.com/image-gc-low-threshold: '75' # 触发清理容器镜像后,默认释放 5%
(high-threshold - low-threshold) 的磁盘空间,便停止清理
eks.tke.cloud.tencent.com/image-gc-period: '3m' # 磁盘空间检查的间隔,默认 3 分钟
清理已退出的容器
如果业务原地升级过,或者容器异常退出过,已退出的容器仍会保留,直到磁盘空间达到 85% 时才会清理已退出的容器。
清理阈值可以使用如下 Annotation 调整:
eks.tke.cloud.tencent.com/container-gc-threshold: "85"
如果已退出的容器不想被自动清理(例如需要退出的信息进一步排障),可以通过如下 Annotation 关闭容器的自动清理,
但副作用是磁盘空间无法自动释放:
eks.tke.cloud.tencent.com/must-keep-last-container: "true"
重启磁盘用量高的 Pod
eks.tke.cloud.tencent.com/pod-eviction-threshold: "85" # 此功能只在设置后开启,默认不开启
监控指标
9100 端口问题
curl -g "http://<pod-ip>:9100/metrics"
curl -g "http://<pod-ip>:9100/metrics?collect[]=ipvs"
listen() to 0.0.0.0:9100, backlog 511 failed (1: Operation not permitted)
eks.tke.cloud.tencent.com/metrics-port: "9110"
监控数据上报频率
eks.tke.cloud.tencent.com/cri-stats-interval: '30s'
自定义监控指标路径
eks.tke.cloud.tencent.com/custom-metrics-url: '/metrics'
设置 Pod 网卡名称
internal.eks.tke.cloud.tencent.com/pod-eth-idx: '1' # 设置网卡名为 eth1
自定义 DNS
eks.tke.cloud.tencent.com/resolv-conf: |nameserver 4.4.4.4nameserver 8.8.8.8
日志采集到 kafka
internal.eks.tke.cloud.tencent.com/tail-buffer-max-size: '2M' # 默认支持最大 2M 的单行日志
eks.tke.cloud.tencent.com/log-key-as-message: 'true'
eks.tke.cloud.tencent.com/filebeat-metadata-format: 'true'
延迟销毁
超级节点上运行的 Job 任务结束后,底层资源就会被销毁;相应的,运行时产生的临时输出,也会被销毁,
此时执行 kubectl logs <pod> 会提示 can not found connection to pod。如果需要保留底层资源定位问题,可以设置延迟销毁底层资源:
eks.tke.cloud.tencent.com/reserve-sandbox-duration: '1m' # 开启延迟 1 分钟销毁的功能,Failed 状态的
Pod 最后一个容器退出后,额外保留底层资源 1 分钟
eks.tke.cloud.tencent.com/reserve-succeeded-sandbox: 'false' # 延迟销毁默认只对 Failed 状态的 Pod 生效,
变更此字段可将延迟销毁也应用于 Succeeded 状态的 Pod
eks.tke.cloud.tencent.com/reserve-task-shorter-than: '5s' # 如果只关心运行时间较短的 Job,可以配置此参数,
只有 Pod 内有任何一个容器的运行时间低于指定值,才会触发延迟销毁。默认不开启。
Service 规则同步
关闭 Service 规则同步
eks.tke.cloud.tencent.com/cluster-ip-switch: 'disable'
等待 Service 规则同步
eks.tke.cloud.tencent.com/duration-to-wait-service-rules: '30s' # 启动 Pod 前先等待 service 规则同步完成,此处设置最多等待的时间为 30s
设置 IPVS 参数
eks.tke.cloud.tencent.com/ipvs-scheduler: 'sh' # 调度算法,sh 是 source hash,按源地址 hash 进行转发,
更利于分布式全局的负载均衡。默认为 rr (轮询 round robin)
eks.tke.cloud.tencent.com/ipvs-sh-port: "true" # 按端口进行 source hash,仅在 ipvs-scheduler 为 sh 有效。eks.tke.cloud.tencent.com/ipvs-sync-period: '30s' # 规则刷新的最大间隔,默认 30s 刷新一次。eks.tke.cloud.tencent.com/ipvs-min-sync-period: '2s' # 规则刷新的最小间隔,默认 service 一有变更就刷新。调整此参数可避免刷新过于频繁。
设置集群内访问 CLB 的 VIP 时流量不走 IPVS: 适用于希望集群内访问不走 ipvs 而走 clb,通过给 service
上配置该 annotation 后,不会再生成对应的 ipvs 规则:
service.cloud.tencent.com/discard-loadbalancer-ip: 'true' # 该 annotation 配置在 service 上,无需重建 Pod 即可即时生效
自定义 Pod 底层的子机时区
eks.tke.cloud.tencent.com/host-timezone: 'Asia/Shanghai' # 该 annotation 用于设置 Pod 时区为东8区
超级节点 Pod 支持云标签
eks.tke.cloud.tencent.com/resource-tag: '{"key0":"val0","key1":"val1"}' # 该 annotation 用于设置 Pod 云标签为 key0=val0,key1=val1
超级节点 Pod 支持获取 eks-id
eks.tke.cloud.tencent.com/eks-id: "true" # 该 annotation 用于设置 pod yaml 中是否展示 eks-id