【腾讯云 Finops Crane 集训营】基于 Kubernetes 实现云资源分析与成本优化平台

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

基于 Kubernetes 实现云资源分析与成本优化平台


前言

为推进云原生用户在确保业务稳定性的基础上做到真正的极致降本腾讯云推出了国内第一个基于云原生技术的成本优化开源项目 CraneCloud Resource Analytics and Economics。Crane 遵循 FinOps 标准旨在为云原生用户提供云成本优化一站式解决方案。

一、基本介绍

Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保护客户应用运行质量的前提下实现极致的降本。

1.主要功能

在这里插入图片描述

1成本可视化和优化评估

  • 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统比如 Prometheus。
  • 多维度的成本洞察优化评估。通过 Cloud Provider 支持多云计费。

2推荐框架

  • 提供了一个可扩展的推荐框架以支持多种云资源的分析内置了多种推荐器资源推荐副本推荐HPA 推荐闲置资源推荐。

3基于预测的水平弹性器

  • EffectiveHorizontalPodAutoscaler 支持预测驱动的弹性
  • 基于社区的 HPA 做底层的弹性控制支持更丰富的弹性触发策略预测观测周期让弹性更加高效并保障了服务的质量。

4负载感知的调度器

  • 动态调度器根据实际的节点利用率构建了一个简单但高效的模型并过滤掉那些负载高的节点来平衡集群。

5拓扑感知的调度器

  • Crane SchedulerCrane Agent 配合工作支持更为精细化的资源拓扑感知调度和多种绑核策略使得资源得到更合理高效的利用。

6基于 QOS 的混部

  • QOS 相关能力保证了运行在 Kubernetes 上的 Pod 的稳定性。
  • 具有多维指标条件下的干扰检测和主动回避能力支持精确操作和自定义指标接入
  • 具有预测算法增强的弹性资源超卖能力复用和限制集群内的空闲资源
  • 具备增强的旁路 cpuset 管理能力在绑核的同时提升资源利用效率。

2.整体架构

Crane 的整体架构如下
在这里插入图片描述


Craned 是 Crane 的最核心组件它管理了 CRDs 的生命周期以及 API。 Craned 通过 Deployment 方式部署且由两个容器组成

  • Craned运行了 Operators 用来管理 CRDs向 Dashboard 提供了 WebAPIPredictors 提供了 TimeSeries API
  • Dashboard基于 TDesign’s Starter 脚手架研发的前端项目提供了易于上手的产品功能。

Fadvisor 提供一组 Exporter 计算集群云资源的计费和账单数据并存储到你的监控系统 比如 Prometheus。

  • Fadvisor 通过 Cloud Provider 支持了多云计费的 API。

Metric Adapter 实现了一个 Custom Metric Apiserver

  • Metric Adapter 读取 CRDs 信息并提供基于 Custom/External Metric API 的 HPA Metric 的数据。

  • Crane Agent 通过 DaemonSet 部署在集群的节点上。

二、基于 Kubernetes 实现云资源分析与成本优化平台

1.准备工作


1安装 Helm

[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master01 ~]# tar zxf helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin
[root@k8s-master01 ~]# helm version
version.BuildInfo{Version:"v3.7.2", GitCommit:"663a896f4a815053445eec4153677ddc24a0a361", GitTreeState:"clean", GoVersion:"go1.16.10"}

2.安装 Prometheus/Grafana 软件包

1安装 Prometheus

[root@k8s-master01 ~]# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
[root@k8s-master01 ~]# helm install prometheus -n crane-system --version 19.6.1 \
--set pushgateway.enabled=false \
--set alertmanager.enabled=false \
--set server.persistentVolume.enabled=false \
-f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/prometheus/override_values.yaml \
--create-namespace  prometheus-community/prometheus

2安装 Grafana

[root@k8s-master01 ~]# helm repo add grafana https://grafana.github.io/helm-charts
[root@k8s-master01 ~]# helm install grafana --version 6.11.0 \
-f https://raw.githubusercontent.com/gocrane/helm-charts/main/integration/grafana/override_values.yaml \
-n crane-system \
--create-namespace grafana/grafana

3.安装 Crane 软件包

1安装 Crane 和 Fadvisor

[root@k8s-master01 ~]# helm repo add crane https://gocrane.github.io/helm-charts
[root@k8s-master01 ~]# helm install crane -n crane-system --create-namespace crane/crane
[root@k8s-master01 ~]# helm install fadvisor -n crane-system --create-namespace crane/fadvisor

2验证安装是否成功

[root@k8s-master01 ~]# kubectl get pod,deploy -n crane-system

在这里插入图片描述
3修改 Craned 服务的 ConfigMap 配置调整反向代理的地址

[root@k8s-master01 ~]# kubectl get service craned -n crane-system -o yaml > 1.yaml
[root@k8s-master01 ~]# sed -i 's/type: ClusterIP/type: NodePort/g' 1.yaml 
[root@k8s-master01 ~]# sed -i '/targetPort: 9090/a\    nodePort: 30080' 1.yaml
[root@k8s-master01 ~]# kubectl apply -f 1.yaml
[root@k8s-master01 ~]# kubectl edit cm nginx-conf -n crane-system
:%s/craned.crane-system:8082/127.0.0.1:8082/g

[root@k8s-master01 ~]# kubectl get pod -n crane-system | awk '/^craned/{print $1}' | xargs kubectl delete pod -n crane-system
  • 因为 Dashboard 和 Craned 服务都在同一个 Pod 里而 Dashboard 容器是通过 Service 加端口的方式代理到 Craned 服务上的
  • 但是 Pod 并不能直接通过 Service 加 端口的方式访问到本身所以我们这里通过 127.0.0.1Lo的方式进行代理。

在这里插入图片描述

4. 使用智能弹性 EffectiveHPA

Kubernetes HPA 支持了丰富的弹性扩展能力Kubernetes 平台开发者部署服务实现自定义 Metric 的服务Kubernetes 用户配置多项内置的资源指标或者自定义 Metric 指标实现自定义水平弹性。


EffectiveHorizontalPodAutoscaler简称 EHPA是 Crane 提供的弹性伸缩产品它基于社区 HPA 做底层的弹性控制支持更丰富的弹性触发策略预测观测周期让弹性更加高效并保障了服务的质量。

  • 提前扩容保证服务质量 通过算法预测未来的流量洪峰提前扩容避免扩容不及时导致的雪崩和服务稳定性故障。
  • 减少无效缩容 通过预测未来可减少不必要的缩容稳定工作负载的资源使用率消除突刺误判。
  • 支持 Cron 配置 支持 Cron-based 弹性配置应对大促等异常流量洪峰。
  • 兼容社区 使用社区 HPA 作为弹性控制的执行层能力完全兼容社区。

1安装 Metrics Server

[root@k8s-master01 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
[root@k8s-master01 ~]# sed -i '/- args:/a\        - --metric-resolution=15s' components.yaml
[root@k8s-master01 ~]# sed -i 's@image:.*@image: docker.io/gocrane/metrics-server:v0.6.3@g' components.yaml
[root@k8s-master01 ~]# kubectl apply -f components.yaml

2创建测试应用

[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/php-apache.yaml
[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/analytics/nginx-deployment.yaml

3创建 EffectiveHPA

[root@k8s-master01 ~]# kubectl apply -f https://raw.githubusercontent.com/gocrane/crane/main/examples/autoscaling/effective-hpa.yaml

在这里插入图片描述
4增加负载查看应用是否能够正常扩容

[root@k8s-master01 ~]# kubectl run -i --tty load-generator --rm --image=busybox:1.28.4 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

在这里插入图片描述
在这里插入图片描述

  • 可以看到随着请求增多CPU 利用率会不断提升通过 EffectiveHPA 会自动扩容实例。

4.配置集群

访问http://192.168.1.1:30080

在这里插入图片描述

三、功能验证

1.成本展示

Crane Dashboard 提供了各式各样的图表展示了集群的成本和资源用量。
在这里插入图片描述
在这里插入图片描述

2.资源推荐


Kubernetes 用户在创建应用资源时常常是基于经验值来设置 requestlimit通过资源推荐的算法分析应用的真实用量推荐更合适的资源配置你可以参考并采纳它提升集群的资源利用率。该推荐算法模型采用了 VPA 的滑动窗口Moving Window算法进行推荐

  • 通过监控数据获取 Workload 过去一周可配置的 CPU 和内存的历史用量。
  • 算法考虑数据的时效性较新的数据采样点会拥有更高的权重。
  • CPU 推荐值基于用户设置的目标百分位值计算内存推荐值基于历史数据的最大值。

1使用资源推荐
在这里插入图片描述
在这里插入图片描述

3.副本数推荐

Kubernetes 用户在创建应用资源时常常是基于经验值来设置副本数。通过副本数推荐的算法分析应用的真实用量推荐更合适的副本配置同样可以参考并采纳它提升集群的资源利用率。

其实现的基本算法是基于工作负载历史 CPU 负载找到过去七天内每小时负载最低的 CPU 用量计算按 50%可配置利用率和工作负载 CPU Request 应配置的副本数。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、总结

整体操作体验下来安装相对比较简单通过使用 Helm 工具实现便捷安装。安装完成后便可以通过提供的 Dashboard 面板来进行访问。界面简单明了易上手同时在功能层面上实现了实时监控成本、应用资源使用量、资源推荐、智能弹性等功能。

  • 实时监控成本Crane 提供每小时、每天、每周和每月的费用概览并且可以按集群、命名空间和工作负载分解成本。
  • 资源监控通过调用 Prometheus 和 Grafana 实现资源监控以及可视化 UI。
  • 资源推荐使用 VPA 算法模型先分析出应用的真实用量再通过计算得出应用的最佳资源配置。
  • 智能弹性基于社区 HPA 做底层的弹性控制支持更加丰富的弹性触发策略让弹性更加高效并保证服务的质量。

因此我们可以通过 Crane 服务提供的成本计算、资源使用率以及上述功能来观察是否需要对云服务器进行资源扩容或减配。避免出现资源不足或资源浪费的情况达到真正意义上的降本增效。


关于腾讯云 Finops Crane 集训营

Finops Crane集训营主要面向广大开发者旨在提升开发者在容器部署、K8s 层面的动手实践能力同时吸纳 Crane 开源项目贡献者鼓励开发者提交 issuebug 反馈等并搭载线上直播、动手实验组队、有奖征文等系列技术活动。既能让开发者通过活动对 Finops Crane 开源项目有深入了解同时也能帮助广大开发者在云原生技能上有实质性收获。

为奖励开发者我们特别设立了积分获取任务和对应的积分兑换礼品。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s