CCE Resource Recommender 用户文档
组件介绍
-
Kubernetes 提升业务编排和资源利用率
- Kubernetes 可以有效的提升业务编排能力和资源利用率,但如果没有额外的能力支撑,提升的能力十分有限。
- Kubernetes 集群的资源利用率不高的主要原因是根据 Kubernetes 的资源调度逻辑,在创建 Kubernetes 工作负载时,通常需要为工作负载配置合适的资源 Request,表示对资源的占用和限制,其中对利用率影响最大的是 Request。
- 为防止自己的工作负载所用的资源被别的工作负载所占用,或者是为了应对高峰流量时的资源消耗诉求,用户习惯于为 Request 设置较大的数值。
- Request 和实际使用资源之间的差值,是不能被其它工作负载所使用的,因此造成了浪费。
- Request 数值设置不合理,造成了 Kubernetes 集群资源利用率低。
- 百度智能云 CCE 支持在集群中安装 CCE Resource Recommender 组件。CCE Resource Recommender 组件 可以为 Kubernetes 的 Workload 推荐容器级别资源的 Request 数值,减少资源浪费
部署在集群内的资源对象
安装 CCE Resource Recommender 组件 , 将在集群内部署以下 Kubernetes 对象:
Kubernetes 对象名称 | 类型 | 所属 Namespaces |
---|---|---|
analytics.analysis.baidubce.com | CustomResourceDefinition | - |
recommendations.analysis.baidubce.com | CustomResourceDefinition | - |
analysis-default | Analytics | kube-system |
recommendation-configuration | ConfigMap | kube-system |
recommenderd | ClusterRole | - |
recommenderd | ClusterRoleBinding | - |
recommenderd | Service | kube-system |
recommenderd | ClusterRoleBinding | kube-system |
recommenderd | ServiceAccount | kube-system |
recommenderd | Deployment | kube-system |
功能说明
支持为 Deployment、StatefulSet、DaemonSet 中的每一个 Container 智能推荐合适的资源 Request。 支持维持 Request 比例:推荐的 Request 会维持初始 Workload 中 Container 设置的 Reqeust 之间的比例。
CCE Resource Recommender 推荐原理
组件在 kube-system 命名空间下创建 Analytics CR 对象,覆盖所有集群中的所有 Kubernetes 原生工作负载(Deployment、DaemonSet、StatefulSet),会分析工作负载最长 14 天的监控数据数据,12 小时更新一次推荐值。 然后根据 Analytics 生成集群内每个工作负载的 Recommendation CR 对象,用于存储推荐的数据。 Recommendation CR 如果产生了推荐数据,就会把推荐数据写入到对应工作负载的 Annotation 里。
注意事项
环境要求
- Kubernetes 版本:1.18+
- 接入 Prometheus 监控服务(CProm 或 自建 Prometheus 数据源)
被控资源要求
- 支持 Deployment、StatefulSet、DaemonSet。
- 不支持 Job、CronJob,不支持不是由 Workload 管理的 Pod。
推荐计算
- 推荐最小值:单个容器推荐的 CPU 最小值是 0.125 核,即 125m;内存的最小值是 125Mi。
- 该组件会自动分析工作负载历史的监控数据,推荐合适的 Request 数值。
- 安装该组件非立即生效,为准确计算推荐值,需要分析该 Workload 的历史资源使用数据。
- 不同的 Workload 的计算时间长度可能不一致,集群中不同的 Workload 之间互相可能会有影响。
- 安装该组件后,对至少运行一天的 Workload 产生推荐数据。
- 对于安装组件后新建的 Workload,一般情况下,也需要一天的时间才会产生 Workload 的推荐数据。
- 建议工作负载稳定运行一段时间之后,再使用推荐值更新 Workload。
使用说明
安装组件
百度智能云官方 helm 模版安装,后续会上线组件中心
安装流程
1、开启 CProm
- 登录CCE管理控制台,选择“监控日志 > Prometheus监控”,点击“接入实例”。
- 等待接入实例成功, 单击"跳转到Prometheus监控服务"。
- 在监控实例页面复制 实例id 和 Remote Read 地址,且单击生成Token并复制。这些信息将用于下一步安装。
2、 安装 CCE Resource Recommender
参数 | 描述 | 默认值 | 是否必填 |
---|---|---|---|
recommenderd.containerArgs.prometheus-address | recommenderd 的 Prometheus 地址 | 空(Cprom的地址后面需加 /prometheus ) | 是 |
recommenderd.containerArgs.prometheus-auth-instanceId | recommenderd 的 CProm 实例ID | 空 | 是 |
recommenderd.containerArgs.prometheus-auth-bearertoken | recommenderd 的 CProm Token信息 | 空 | 是 |
analysisDefault.enable | 是否开启全局资源推荐默认配置 | ||
默认配置会 | true | 否 |
- 添加参数示例
# Default values for cce-resource-recommender.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
recommenderd:
image:
repository: registry.baidubce.com/cce-plugin-pro/cce-resource-recommender
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: "v1.0.0"
replicaCount: 2
containerArgs:
feature-gates: Analysis=true
v: 2
prometheus-address: https://cprom.gz.baidubce.com/test/select/prometheus
prometheus-auth-instanceId: cprom-pjuun6b516c71
prometheus-auth-bearertoken: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lc3BhY2UiOiJjcHJvbS1wanV1bjZiNTE2YzcxIiwic2VjcmV0TmFtZSI6ImVjYTk3ZTE0OGNiNzRlOTY4M2Q3YjcyNDA4MjlkMWZmIiwiZXhwIjoxNzgzODUwMTkyLCJpc3MiOiJjcHJvbSJ9.U5VkXlKbSJvOqPHWW_gGOhaEJA-hDdvsOyIHgYijacA
podAnnotations: { }
resources: { }
nodeSelector: { }
tolerations: [ ]
affinity: { }
analysisDefault:
enable: true
3、 验证安装是否成功
使用如下命令检查安装的 Deployment 是否正常:
kubectl get deploy recommenderd -n kube-system
结果类似如下:
NAME READY UP-TO-DATE AVAILABLE AGE
recommenderd 2/2 2 2 37s
卸载 CCE Resource Recommender
helm --kubeconfig {$kubeconfig} uninstall cce-resource-recommender -n kube-system
后台获取推荐数值
工作负载
CCE Resource Recommender 组件会将推荐值保存至对应工作负载的YAML文件中,您可以通过标准的 Kuberentes API 获取每个工作负载的推荐值,然后集成到业务的发布系统中。如下所示查看工作负载下每个容器的 Request 推荐量:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
analysis.baidubce.com/resource-recommendation: |
containers:
# 若一个 Pod 里有多个容器,每个容器都有 CPU 和 Memory 的 Request 的推荐值
- containerName: nginx
target:
cpu: 125m
memory: 125Mi #若这里缺少单位,显示的是字符串"58243235",省略的单位是byte
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2024-06-11T03:15:57Z"
generation: 1
labels:
app: nginx
name: deployment-example
namespace: default
resourceVersion: "1118119"
uid: 8b6d54d9-c683-4e76-a95e-658e14a954b1
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: hub.baidubce.com/cce/nginx-alpine-go:latest
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 5
name: nginx
ports:
- containerPort: 80
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
Recommendation CR
CCE Resource Recommender 组件会根据分析结果会生成集群内每个工作负载的 Recommendation CR 对象,用于存储推荐数据,同时也会将推荐值保存到工作负载的 YAML 中
apiVersion: analysis.baidubce.com/v1alpha1
kind: Recommendation
metadata:
annotations:
analysis.baidubce.com/run-number: "1"
creationTimestamp: "2024-06-11T04:54:27Z"
generateName: analysis-default-resource-
generation: 2
labels:
analysis.baidubce.com/analytics-uid: 83cccfd5-b3c5-45aa-a92a-d9dd607dc75f
analysis.baidubce.com/recommendation-rule-name: analysis-default
analysis.baidubce.com/recommendation-rule-recommender: Resource
analysis.baidubce.com/recommendation-rule-uid: bce27929-64d6-4b5f-89e4-001cbed5ed64
analysis.baidubce.com/recommendation-target-kind: StatefulSet
analysis.baidubce.com/recommendation-target-name: agent-q7vl19h81
analysis.baidubce.com/recommendation-target-version: v1
app.kubernetes.io/component: vmagent
app.kubernetes.io/instance: agent-q7vl19h81
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: monitor-agent
app.kubernetes.io/version: 0.2.0
helm.sh/chart: monitor-agent-0.3.6
name: analysis-default-resource-2gzjt
namespace: default
ownerReferences:
- apiVersion: analysis.baidubce.com/v1alpha1
blockOwnerDeletion: false
controller: false
kind: RecommendationRule
name: analysis-default
uid: bce27929-64d6-4b5f-89e4-001cbed5ed64
resourceVersion: "1118082"
uid: 4793159d-83b5-45db-8c34-c3443a7c45cd
spec:
adoptionType: StatusAndAnnotation
completionStrategy:
completionStrategyType: Once
targetRef:
apiVersion: apps/v1
kind: StatefulSet
name: agent-q7vl19h81
namespace: cprom-system
type: Resource
status:
action: Patch
conditions:
- lastTransitionTime: "2024-06-11T04:54:28Z"
message: Recommendation is ready
reason: RecommendationReady
status: "True"
type: Ready
currentInfo: '{"spec":{"template":{"spec":{"containers":[{"name":"sidecar","resources":{"requests":{"cpu":"100m","memory":"100Mi"}}},{"name":"vmagent","resources":{"requests":{"cpu":"100m","memory":"100Mi"}}}]}}}}'
lastUpdateTime: "2024-06-11T04:54:28Z"
recommendedInfo: '{"spec":{"template":{"spec":{"containers":[{"name":"sidecar","resources":{"requests":{"cpu":"125m","memory":"125Mi"}}},{"name":"vmagent","resources":{"requests":{"cpu":"125m","memory":"125Mi"}}}]}}}}'
recommendedValue: |
resourceRequest:
containers:
- containerName: sidecar
target:
cpu: 125m
memory: 125Mi
- containerName: vmagent
target:
cpu: 125m
memory: 125Mi
targetRef: {}
在该示例中:
- 推荐的 TargetRef 指向 cprom-system 的 StatefulSet:agent-q7vl19h81
- 推荐类型为资源推荐
- adoptionType 是 StatusAndAnnotation,表示将推荐结果展示在 recommendation.status 和 Deployment 的 Annotation
- recommendedInfo 显示了推荐的资源配置,currentInfo 显示了当前的资源配置,格式是 Json ,可以通过 Kubectl Patch 将推荐结果更新到 TargetRef