腾讯云容器服务 TKE 调度 - QoSAgent
文档简介:
QoS Agent 是腾讯云基于服务质量增强的扩展组件。提供丰富的能力,在提升集群资源利用率的同时,提供稳定性质量保障。
注意:
QoS 相关的能力仅支持在 原生节点 上使用,若您的节点不是原生节点,或工作负载不在原生节点上,相关能力无法生效。
QoS Agent 是腾讯云基于服务质量增强的扩展组件。提供丰富的能力,在提升集群资源利用率的同时,提供稳定性质量保障。
注意:
QoS 相关的能力仅支持在 原生节点 上使用,若您的节点不是原生节点,或工作负载不在原生节点上,相关能力无法生效。
部署在集群内的 Kubernetes 对象
Kubernetes 对象名称
|
类型
|
默认占用资源
|
所属 Namespaces
|
avoidanceactions.ensurance.crane.io
|
CustomResourceDefinition
|
-
|
-
|
nodeqoss.ensurance.crane.io
|
CustomResourceDefinition
|
-
|
-
|
podqoss.ensurance.crane.io
|
CustomResourceDefinition
|
-
|
-
|
timeseriespredictions.prediction.crane.io
|
CustomResourceDefinition
|
-
|
-
|
kube-system
|
Namespace
|
-
|
-
|
all-be-pods
|
PodQOS
|
-
|
kube-system
|
qos-agent
|
ClusterRole
|
-
|
-
|
qos-agent
|
ClusterRoleBinding
|
-
|
-
|
crane-agent
|
Service
|
-
|
kube-system
|
qos-agent
|
ServiceAccount
|
-
|
kube-system
|
qos-agent
|
Daemonset
|
-
|
kube-system
|
功能说明
功能
|
说明
|
CPU 使用优先级
|
CPU 使用优先级的功能可以通过对工作负载设置优先级,保证高优先级业务在发生资源竞争时的资源供给量,并压制低优先级业务。详情见 CPU 使用优先级。
|
CPU Burst
|
CPU Burst 可以临时给延迟敏感型应用提供超过 Limit 数量的资源,保证其稳定性。详情见 CPU Burst。
|
CPU 超线程隔离
|
避免高优先级容器线程的 L2 Cache 受到运行在同一个 CPU 物理核上的低优先级线程的影响。详情见 CPU 超线程隔离。
|
内存 QoS 增强
|
全方位提升内存表现,以及灵活限制容器对内存的使用。详情见 内存 QoS 增强。
|
网络 QoS 增强
|
全方位提升网络表现,以及灵活限制容器对网络的使用。详情见 网络 QoS 增强。
|
磁盘 IO QoS 增强
|
全方位提升磁盘表现,以及灵活限制容器对磁盘的使用。详情见 磁盘 IO QoS 增强。
|
QoS Agent 权限
说明:
权限场景章节中仅列举了组件核心功能涉及到的相关权限,完整权限列表请参考权限定义章节。
权限说明
该组件权限是当前功能实现的最小权限依赖。
权限场景
功能
|
涉及对象
|
涉及操作权限
|
读取 podqos、nodeqos、时间序列等配置。
|
podqoss / nodeqoss / avoidanceactions
|
get/list/watch/update
|
查看当前节点的 pod 信息。
|
pod
|
get/list/watch
|
根据 Podqos 开启隔离能力 / 修改 node resource 以增加离线资源。
|
pod status
|
update/patch
|
给 node 添加污点。
|
node
|
get/list/watch/update
|
根据隔离开启情况、资源干扰情况发送 event。
|
event
|
所有权限
|
权限定义
rules:- apiGroups:- ""resources:- podsverbs:- get- list- watch- apiGroups:- ""resources:- pods/statusverbs:- update- patch- apiGroups:- ""resources:- nodesverbs:- get- list- watch- update- apiGroups:- ""resources:- nodes/status- nodes/finalizersverbs:- update- patch- apiGroups:- ""resources:- pods/evictionverbs:- create- apiGroups:- ""resources:- configmapsverbs:- get- list- watch- apiGroups:- ""resources:- eventsverbs:- "*"- apiGroups:- "ensurance.crane.io"resources:- podqoss- nodeqoss- avoidanceactionsverbs:- get- list- watch- update- apiGroups:- "prediction.crane.io"resources:- timeseriespredictions- timeseriespredictions/finalizersverbs:- get- list- watch- create- update- patch- apiGroups:- "topology.crane.io"resources:- "noderesourcetopologies"verbs:- get- list- watch- create- update- patch
部署方式
1. 登录 容器服务控制台,在左侧导航栏中选择集群。
2. 在集群列表中,单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,在组件管理页面单击新建。
4. 在新建组件管理页面中勾选 QoS Agent。
5. 单击完成即可安装组件。
注意:
在部署完成之后,因为集群的 cgroup 驱动可能不同,需要您手动选择对应的驱动。操作方式如下:
1. 在集群里的扩展组件里,找到部署成功的 QoS Agent,单击右侧的更新配置。
2. 在修改 QoS Agent 的组件配置页面,选择 cgroupDrive 选项右侧的下拉框,选择与自己集群匹配的 cgroupDrive。
3. 单击完成。
常见问题
如何确认自己集群的 cgroupDrive?
集群的 cgroupDrive 只可能是 cgroupfs 或 systemd。确认方式如下:
首先查看集群的运行时,可以在集群的“基本信息”页里的“运行时组件”判断当前集群是 docker 还是 containerd。
如果运行时是 docker 的话,在集群的任意节点上执行 docker info 查看 Cgroup Driver 的字段内容。
如果运行时是 containerd,在集群的任意节点的 /etc/containerd/config.toml 文件里,如果字段:SystemdCgroup = true,代表是 systemd,否则是 cgroup。
如何选择作用的业务或者节点?
支持通过 label 或者 scope 选择某种资源对象。
注意:
当同时存在下面两种 selector 的时候,会取“与”,也即满足所有条件。
labelSelector
labelSelector 通过关联资源对象的 label 对资源对象进行筛选,常用的使用方式是,业务侧在指定的工作负载上打上特定的标签,并将该标签提供给运维侧,运维在创建 PodQOS 时通过 labelSelector 字段关联该标签,即可赋予不同的业务不同的 QoS 能力。
scopeSelector
scopeSelector 由多个 MatchExpressions 组成,这些 MatchExpressions 之间是“与”的关系,MatchExpressions 中有三个字段,分别是 ScopeName,Operator 和 ScopeName 对应的 Values;
其中 ScopeName 包括 QOSClass,Priority,Namespace 三种;
QOSClass 是指希望关联具有特定的 QOSClass 的 Workload,Values 可以填:Guaranteed,Burstable,BestEffort 中的一种或多种;
Priority 是指希望关联具有特定的 Priority 的 workload,Values 可以填特定的 priority 数值,如["1000", "2000-3000"],支持 priority 范围;
Namespace 是指希望关联特定的 Namespace 的 Workload,Values 可以填一个或多个。
Operator 包含两种,分别是 In 和 NotIn,不填默认为 In。
如下述示例,表示将满足 app-type=offline 的 BestEffortPod,CPU 优先级设置为7:
apiVersion: ensurance.crane.io/v1alpha1kind: PodQOSmetadata:name: offline-taskspec:allowedActions:- evictionresourceQOS:cpuQOS:cpuPriority: 7scopeSelector:matchExpressions:- operator: InscopeName: QOSClassvalues:- BestEffortlabelSelector:matchLabels:app-type: offline