QoS Agent 是腾讯云基于服务质量增强的扩展组件。提供丰富的能力,在提升集群资源利用率的同时,提供稳定性质量保障。
注意:
部署在集群内的 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 Burst | |
CPU 超线程隔离 | |
内存 QoS 增强 | |
网络 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