【腾讯云 Finops Crane 集训营】 如何在Windows上快速搭建一个Kubernetes+Crane 环境及应用

一、前言

  • 个人主页: ζ小菜鸡
  • 大家好我是ζ小菜鸡,让我们一起学习在 Windows 如何快速搭建一个Kubernetes+Crane 环境及应用
  • 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)

二、Crane的今世前生

  Crane 是由腾讯云主导开源的国内第一个基于云原生技术的成本优化项目,遵循 FinOps 标准,已经获得FinOps基金会授权的全球首个认证降本增效开源方案。它为使用 Kubernetes 集群的企业提供了一种简单、可靠且强大的自动化部署工具。

  Crane 的设计初衷是为了帮助企业更好地管理和扩展其 Kubernetes 集群,从而实现更高效的云原生应用管理。

  Crane 它易于使用、高度可定制和扩展。它提供了一组简单易用的命令行工具,使得开发者和管理者都能轻松地将应用程序部署到 Kubernetes 集群中。Crane 还支持多种云平台,并且可以根据具体的业务需求进行定制。

  Crane 已经被腾讯、网易、思必驰、酷家乐、明源云、数数科技等公司部署在生产系统,其主要贡献者来自腾讯、小红书、谷歌、eBay、微软、特斯拉等知名公司。


三、工欲善其事,必先利其器(工具和环境准备)

1.工具准备

curlbrew 都可以,我这里用的是 curl


下载安装包

   下载直通车:https://curl.se/windows
   curl官网下载地址: https://curl.se/download.html

在这里插入图片描述


安装curl

  将下载的 curl-8.0.1_9-win64-mingw.zip 文件解压到安装目录下,如图所示:

在这里插入图片描述


  进入将bin文件找到 curl.execurl-ca-bundle.crt 文件,如图所示:

在这里插入图片描述


  配置环境变量(安装目录即 curl.exe 所在目录)

在这里插入图片描述


验证是否安装成功

  打开cmd,输入curl验证是否成功,如图所示:

在这里插入图片描述


2.环境准备

安装运行环境 kubectl、helm、kind、Docker


kubectl部署

  在 Windows 系统中安装 kubectl 有如下几种方法:

  (1)用 curl 在 Windows 上安装 kubectl。
  (2)在 Windows 上用 Chocolatey、Scoop 或 winget 安装。

  下面主要介绍一下用 curl 在 Windows 上安装 kubectl


  【1】下载

  下载最新补丁版 1.27: kubectl 1.27.1

  如果你已安装了 curl,也可以使用此命令:

curl.exe -LO "https://dl.k8s.io/release/v1.27.1/bin/windows/amd64/kubectl.exe"

  打开cmd,执行上述命令,如图所示:

在这里插入图片描述

   若系统没有安装curl,可以curl安装详细步骤: Windows如何安装使用curl命令


  【2】校验

  验证该可执行文件(可选步骤):

  下载 kubectl 校验和文件:

curl.exe -LO "https://dl.k8s.io/v1.27.1/bin/windows/amd64/kubectl-convert.exe.sha256"

  在命令行环境中,手工对比 CertUtil 命令的输出与校验和文件:

CertUtil -hashfile kubectl.exe SHA256
type kubectl.exe.sha256

  打开cmd,执行上述命令,如图所示:

在这里插入图片描述

  用 PowerShell 自动验证,用运算符 -eq 来直接取得 True 或 False 的结果:

$(Get-FileHash -Algorithm SHA256 .\kubectl.exe).Hash -eq $(Get-Content .\kubectl.exe.sha256)

在这里插入图片描述


  【3】配置环境变量

  将 kubectl 二进制文件夹追加或插入到你的 PATH 环境变量中,如图所示:

在这里插入图片描述


  【4】验证安装是否成功

  测试一下,确保此 kubectl 的版本和期望版本一致:

kubectl version --client

  打开cmd,执行上述命令,如图所示:

在这里插入图片描述

说明: 上面的命令会产生一个警告:
WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. `
你可以忽略这个警告。你只检查你所安装的 kubectl 的版本。

  或者使用下面命令来查看版本的详细信息:

kubectl version --client --output=yaml

  打开cmd,执行上述命令,如图所示:

在这里插入图片描述


helm部署

  【1】使用Chocolatey (Windows)

  (1)安装Chocolatey软件环境:

  Windows 7+
  PowerShell v2+
  .NET Framework 4+

  然后在管理员身份下运行PowerShell,直接在PowerShell中运行下面的代码:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

  在PowerShell运行上述代码,结果如下图所示:

在这里插入图片描述


  (2)查看Chocolatey是否安装成功
  通过 chocochoco -? 查看帮助。 PowerShell中,本人的执行过程如下:

在这里插入图片描述


  (3)使用Chocolatey构建Helm
  Helm社区成员贡献了一个 Helm包在 Chocolatey中构建, 包通常是最新的。

choco install kubernetes-helm

  在PowerShell运行上述代码,结果如下图所示:

在这里插入图片描述


  【2】使用Scoop (Windows)

  (1)安装Scoop

  请参考: 在 Windows 上安装 scoop


  (2)使用Scoop构建Helm

  Helm社区成员贡献了一个针对 Scoop 的 Helm包,该包通常是最新的。

scoop install helm

kind部署

  官方本地环境系统参考对应的文档安装 kind:https://kind.sigs.k8s.io/docs/user/quick-start/#installation

  【1】在 Windows 中 PowerShell安装

  PowerShell中,执行以下代码进行安装:

curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.18.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe

   【2】在 Windows 用 Chocolatey安装(本人采用的此方法)

  PowerShell中,执行以下代码进行安装:

choco install kind

在这里插入图片描述


  【3】验证kind安装是否成功

  通过 kind 查看。 PowerShell中,本人的执行过程如下:

在这里插入图片描述


Docker部署

  【1】准备环境

  管理员的身份启动命令窗口,输入:wsl --install

在这里插入图片描述


  安装完成

在这里插入图片描述

  记得重启一下电脑!!!


  再次管理员打开命令窗口,输入下面的命令:

wsl --install -d Ubuntu

  可能会有点慢 ,长时间没反应就回车一下:

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


  输入用户名和密码
  用户名:zhangjingqi
  密码:123456(输入密码的时候不会显示,自己把握好就行了)
在这里插入图片描述


  设置账号/密码,成功后,如下图所示:

在这里插入图片描述


  【2】Docker安装

  官网地址: https://docs.docker.com/get-docker/

  根据自己系统,选择合适的安装包,我选择的是Windows,如图所示:

在这里插入图片描述


  点击“下载”,下载完成之后双击运行

  下图的意思是添加桌面快捷方式,可以加也可以不加,看个人爱好,然后点击OK

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


  安装完,记得重启一下电脑!!!

  出现下面这个界面表示安装成功了

在这里插入图片描述


四、再接再厉(本地安装 Crane及应用)

1.安装本地的 Kind 集群和 Crane 组件

  以下命令将安装 Crane 以及其依赖 (Prometheus/Grafana).

curl -sf https://raw.githubusercontent.com/gocrane/crane/main/hack/local-env-setup.sh | sh -

  如果上面安装命令报网络错误,可以用本地的安装包执行安装,在命令行中执行以下安装命令:

# 必须在 installation 的上级目录例如:我们预设好的 training 跟目录中执行

# Mac/Linux
bash installation/local-env-setup.sh

# Windows
./installation/local-env-setup.sh

  在 PowerShell 中执行上述命令,如下图所示:

在这里插入图片描述


  确保所有 Pod 都正常运行:

$ export KUBECONFIG=${
    
    HOME}/.kube/config_crane
$ kubectl get pod -n crane-system

NAME                                             READY   STATUS    RESTARTS       AGE
craned-6dcc5c569f-vnfsf                          2/2     Running   0              4m41s
fadvisor-5b685f4cd6-xpxzq                        1/1     Running   0              4m37s
grafana-64656f6d54-6l24j                         1/1     Running   0              4m46s
metric-adapter-967c6d57f-swhfv                   1/1     Running   0              4m41s
prometheus-kube-state-metrics-7f9d78cffc-p8l7c   1/1     Running   0              4m46s
prometheus-server-fb944f4b7-4qqlv                2/2     Running   0              4m46s

提示:Pod 的启动需要一定的时间,等几分钟后输入命令查看后集群状态是否都 Running


2.访问 Crane Dashboard

kubectl -n crane-system port-forward service/craned 9090:9090

# 后续的终端操作请在新窗口操作,每一个新窗口操作前请把配置环境变量加上(不然会出现8080端口被拒绝的提示)
export KUBECONFIG=${
    
    HOME}/.kube/config_crane

  点击 这里 访问 Crane Dashboard

  添加本地集群:

在这里插入图片描述


3.使用智能弹性 EffectiveHPA

  【1】安装Metrics Server

  用以下命令安装 Metrics Server:

kubectl apply -f installation/components.yaml
kubectl get pod -n kube-system

  【2】创建测试应用

kubectl apply -f installation/effective-hpa.yaml

  运行以下命令查看 EffectiveHPA 的当前状态:

kubectl get ehpa

  输出类似于:

NAME         STRATEGY   MINPODS   MAXPODS   SPECIFICPODS   REPLICAS   AGE
php-apache   Auto       1         10                       0          3m39s

  【3】增加负载

# 在单独的终端中运行它
# 如果你是新创建请配置环境变量 
export KUBECONFIG=${
    
    HOME}/.kube/config_crane

# 以便负载生成继续,你可以继续执行其余步骤
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

  现在执行:

# 准备好后按 Ctrl+C 结束观察
# 如果你是新创建请配置环境变量 
export KUBECONFIG=${
    
    HOME}/.kube/config_crane

kubectl get hpa ehpa-php-apache --watch

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

  说明:预测数据需要两天以上的监控数据才能出现。


4.成本展示

  Crane Dashboard 提供了各式各样的图表展示了集群的成本和资源用量。

  【1】集群总览

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

  • 当月总成本:过去一个月集群总成本。从安装Crane时间开始,按小时累加集群成本
  • 预估每月成本:以最近一小时成本估算未来一个月的成本。每小时成本 * 24 * 30
  • 预估CPU总成本:以最近一小时CPU成本估算未来一个月的CPU成本。每小时CPU成本 * 24 * 30
  • 预估Memory总成本:以最近一小时Memory成本估算未来一个月的Memory成本。每小时Memory成本 * 24 * 30

  【2】成本洞察->集群总览

在这里插入图片描述

在这里插入图片描述

  • Workload Spec CPU Slack: Workload 的 CPU 规格 - 推荐的 CPU 规格
  • Workload Total CPU Slack: (Workload 的 CPU 规格 - 推荐的 CPU 规格)* Pod 数量

  更多的成本分析图表可以通过登陆 Grafana 的页面或者分析源码研究。

  登陆 Grafana 的方式可以通过以下命令建立一个 port-mapping:

# 如果你是新创建请配置环境变量 
export KUBECONFIG=${
    
    HOME}/.kube/config_crane

kubectl -n crane-system port-forward service/grafana 8082:8082

访问本地 Grafana(账号密码:admin/admin): http://127.0.0.1:8082/grafana/login


5.如何计算成本

  成本计算功能是由组件 Fadvisor 实现,在安装 Crane 时会一起安装,一起提供了成本展示和成本分析功能:

  • Server:收集集群 Metric 数据并计算成本
  • Exporter:将成本 Metric 暴露出来

在这里插入图片描述
原理:

  Fadvisor 成本模型提供了一个方法来估计和分析每个容器,pod 或其他资源在 Kubernetes 中的资源价格。

  请注意,成本模型只是预估成本,而不是替代云订单,因为实际的计费数据取决于更多原因,比如各类计费逻辑。以下是计算理论:

  • 最简单的成本模型是以相同的价格估算所有节点或 pod 的资源价格。例如,在计算成本时,您可以假设所有容器的 CPU 和 RAM
    单位价格相同,2小时核心3/小时 Gib。

  • 高级成本模型是通过成本分摊来估计资源价格。 这一理论的基础是不同实例类型和计费类型的每个云机器实例的价格不同,不过 CPU 和 RAM 的价格比率是相对固定的,可以通过这个价格比率来计算资源成本。

成本分摊模型下的具体的计算公式如下:

  • 集群整体成本:cvm 成本之和。
  • CPU/mem 价格比率相对固定。
  • cvm 的成本 = CPU 成本 * CPU 数量 + mem 成本 * mem 数量
  • CPU 申请成本:整体成本 * (CPU 占 cvm 成本的比例)得到整体CPU 成本,再按申请的 CPU 总览占整体 CPU 总量的比例计算出 CPU申请的成本。
  • namespace 下的 CPU 申请成本: CPU 申请成本按 namespace 聚合。

五、更上一层楼(配置优化)

  在 dashboard 中开箱后就可以看到相关的成本数据,是因为在添加集群的时候我们安装了推荐的规则。

  推荐框架会自动分析集群的各种资源的运行情况并给出优化建议。Crane 的推荐模块会定期检测发现集群资源配置的问题,并给出优化建议。智能推荐提供了多种 Recommender 来实现面向不同资源的优化推荐。

  在成本分析>推荐规则页面可以看到我们安装的两个推荐规则。

在这里插入图片描述

  这些推荐规则实际上在将 K8s 集群接入Dashboard时安装上的 RecommendationRule CRD 对象:

$ kubectl get RecommendationRule
NAME             RUNINTERVAL   AGE
idlenodes-rule   24h           16m
workloads-rule   24h           16m

  workloads-rule 这个推荐规则的资源对象如下所示:

apiVersion: analysis.crane.io/v1alpha1
kind: RecommendationRule
metadata:
  name: workloads-rule
  labels:
    analysis.crane.io/recommendation-rule-preinstall: "true"
spec:
  resourceSelectors:
    - kind: Deployment
      apiVersion: apps/v1
    - kind: StatefulSet
      apiVersion: apps/v1
  namespaceSelector:
    any: true
  runInterval: 24h
  recommenders:
    - name: Replicas
    - name: Resource

  RecommendationRule 是一个集群维度的对象,该推荐规则会对所有命名空间中的 Deployments 和 StatefulSets 做资源推荐和副本数推荐。相关规范属性如下所示:

  • 每隔 24 小时运行一次分析推荐,runInterval 格式为时间间隔,比如: 1h,1m,设置为空表示只运行一次。

  • 待分析的资源通过配置 resourceSelectors 数组设置,每个 resourceSelector 通过 kind、apiVersion、name 选择 K8s 中的资源,当不指定 name 时表示在 namespaceSelector 基础上的所有资源。

  • namespaceSelector 定义了待分析资源的命名空间,any: true 表示选择所有命名空间。

  • recommenders 定义了待分析的资源需要通过哪些 Recommender 进行分析。目前支持两种 Recommender:

    • 资源推荐(Resource): 通过 VPA 算法分析应用的真实用量推荐更合适的资源配置。
    • 副本数推荐(Replicas): 通过 HPA 算法分析应用的真实用量推荐更合适的副本数量。

1.资源推荐

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

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

2.副本数推荐

  Kubernetes 用户在创建应用资源时常常是基于经验值来设置副本数。通过副本数推荐的算法分析应用的真实用量推荐更合适的副本配置,同样可以参考并采纳它提升集群的资源利用率。其实现的基本算法是基于工作负载历史 CPU 负载,找到过去七天内每小时负载最低的 CPU 用量,计算按 50%(可配置)利用率和工作负载 CPU Request 应配置的副本数。


3.推荐配置

  当我们部署 crane 的时候会在同一个命名空间中创建一个名为 recommendation-configurationConfigMap 对象,包含一个 yaml 格式的 RecommendationConfiguration,该配置订阅了 recommender 的配置,如下所示:

$ kubectl get cm recommendation-configuration -n crane-system -oyaml
apiVersion: v1
data:
  config.yaml: |-
    apiVersion: analysis.crane.io/v1alpha1
    kind: RecommendationConfiguration
    recommenders:
      - name: Replicas  # 副本数推荐
        acceptedResources:
          - kind: Deployment
            apiVersion: apps/v1
          - kind: StatefulSet
            apiVersion: apps/v1
      - name: Resource  # 资源推荐
        acceptedResources:
          - kind: Deployment
            apiVersion: apps/v1
          - kind: StatefulSet
            apiVersion: apps/v1
kind: ConfigMap
metadata:
  name: recommendation-configuration
  namespace: crane-system

  需要注意的是资源类型和 recommenders 需要可以匹配,比如 Resource 推荐默认只支持 Deployments 和 StatefulSets。

  同样的也可以再查看一次闲置节点推荐规则的资源对象,如下所示:

$ kubectl get recommendationrule idlenodes-rule -oyaml
apiVersion: analysis.crane.io/v1alpha1
kind: RecommendationRule
metadata:
  labels:
    analysis.crane.io/recommendation-rule-preinstall: "true"
  name: idlenodes-rule
spec:
  namespaceSelector:
    any: true
  recommenders:
  - name: IdleNode
  resourceSelectors:
  - apiVersion: v1
    kind: Node
  runInterval: 24h

  创建 RecommendationRule 配置后,RecommendationRule 控制器会根据配置定期运行推荐任务,给出优化建议生成 Recommendation 对象,然后我们可以根据优化建议 Recommendation 调整资源配置。

  比如我们这里集群中已经生成了多个优化建议 Recommendation 对象。

kubectl get recommendations -A
NAME                            TYPE       TARGETKIND    TARGETNAMESPACE   TARGETNAME       STRATEGY   PERIODSECONDS   ADOPTIONTYPE          AGE
workloads-rule-resource-8whzs   Resource   StatefulSet   default           nacos            Once                       StatusAndAnnotation   34m
workloads-rule-resource-hx4cp   Resource   StatefulSet   default           redis-replicas   Once                       StatusAndAnnotation   34m

  可以随便查看任意一个优化建议对象。

$ kubectl get recommend workloads-rule-resource-g7nwp -n crane-system -oyaml
apiVersion: analysis.crane.io/v1alpha1
kind: Recommendation
metadata:
  name: workloads-rule-resource-g7nwp
  namespace: crane-system
spec:
  adoptionType: StatusAndAnnotation
  completionStrategy:
    completionStrategyType: Once
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: fadvisor
    namespace: crane-system
  type: Resource
status:
  action: Patch
  conditions:
  - lastTransitionTime: "2022-10-20T07:43:49Z"
    message: Recommendation is ready
    reason: RecommendationReady
    status: "True"
    type: Ready
  currentInfo: '{"spec":{"template":{"spec":{"containers":[{"name":"fadvisor","resources":{"requests":{"cpu":"0","memory":"0"}}}]}}}}'
  lastUpdateTime: "2022-10-20T07:43:49Z"
  recommendedInfo: '{"spec":{"template":{"spec":{"containers":[{"name":"fadvisor","resources":{"requests":{"cpu":"114m","memory":"120586239"}}}]}}}}'
  recommendedValue: |
    resourceRequest:
      containers:
      - containerName: fadvisor
        target:
          cpu: 114m
          memory: "120586239"
  targetRef: {
    
    }

  在 dashboard 的资源推荐页面也能查看到优化建议列表。

在这里插入图片描述
  通过查看监控查看详细的监控数据。

在这里插入图片描述

  在页面中可以看到当前资源(容器/CPU/Memory)与推荐的资源数据,点击采纳建议即可获取优化的执行命令。

在这里插入图片描述

  执行命令即可完成优化,其实就是修改资源对象的 resources 资源数据。

patchData=`kubectl get recommend workloads-rule-resource-g7nwp -n crane-system -o jsonpath='{.status.recommendedInfo}'`;kubectl patch Deployment fadvisor -n crane-system --patch "${patchData}"

  对于闲置节点推荐,由于节点的下线在不同平台上的步骤不同,用户可以根据自身需求进行节点的下线或者缩容。

  应用在监控系统(比如 Prometheus)中的历史数据越久,推荐结果就越准确,建议生产上超过两周时间。对新建应用的预测往往不准。


六、挥手告别(环境清理)

  动手实验完成后,可以将本地的集群清理删除:

kind delete cluster --name=crane

七、总结

1.Crane如何做到利用率提升

  Crane如何做到利用率提升3倍稳定性还不受损?
  下图展示了某个生产系统的CPU资源现状,从图中可以看出,计算节点闲置资源浪费主要来自以下几个方面:
在这里插入图片描述
  Crane提供了Request推荐、副本数推荐、HPA推荐以及EPA等业务优化能力,能辅助业务自动化决策进行资源配置优化。然而在较大的组织中,业务改需要所有业务组件负责人的支持和配合,周期长、见效慢。如何在不改造业务的前提下,迅速提升集群资源利用率,在提升部署密度的同时保证延迟敏感和高优业务的稳定性和服务质量不受干扰,Crane混部能力给出了答案。

  Crane提供了高优敏感业务与低优批处理业务的混部能力,能将集群利用率提升3倍!

在这里插入图片描述


2.混部的核心挑战

  所谓混部,就是将不同优先级的工作负载混合部署到相同集群中。一般来说,支撑在线服务的延迟敏感型(Latency Sensitive)业务优先级较高,支撑离线计算的高吞吐型(Batch)业务优先级通常较低。
在这里插入图片描述
  看起来将这些不同类型的业务部署在相同集群,复用计算资源,就可以有效提升资源利用率,那么为什么混部只有在顶尖科技公司才有大规模应用呢?理想很美好,现实很骨感,如果只是简单的将不同业务类型部署到一起,而不进行任何层面的资源隔离,那么在线业务服务质量必然会被影响,这也是为什么混部难以落地的核心原因。


3.Crane的混部方案

  Crane为混部场景提供了一套开箱即用的解决方案,借助Kubernetes CRD,该方案可灵活适配于多优先级的在线混部场景以及在离线混部场景,混部方案的能力概览如下:

  • 节点负载画像与弹性资源回收
    Crane实时采集节点利用率数据,并基于多种预测算法计算出未来的闲置资源,为节点构建画像,并将其以扩展资源形式更新成节点可调度资源。弹性资源的多少随高优业务真实用量变化,高优业务用量上升,弹性资源减少。
  • 弹性资源再分配
    低优业务使用弹性资源,调度器确保低优业务首次调度时有足够弹性资源可用,防止节点过载。
  • 基于自定义水位线的干扰检测和主动回避能力
    • NodeQoS API允许集群运维定义节点水位,包括总CPU水位,或者弹性资源分配率、弹性资源水位等,并定义当真实用量达到水位时的回避动作。
    • PodQoS API 定义不同类型工作负载的资源隔离策略,如CPU调度优先级,磁盘IO等,同时定义该类型业务允许的回避动作。
    • AvoidanceAction定义调度禁止、压制、驱逐等动作参数,当节点水位被触发,只有允许某个动作的业务Pod才可以执行该操作。
  • 基于内核隔离的增强QoS能力
    Crane的开源方案中,可以通过动态调节CGroup压制干扰源资源上限。同时,为支撑大规模生产系统的的隔离需求,Crane基于腾讯RUE内核,通过多级CPU调度优先级,以及绝对抢占等特性,保证高优业务不受低优业务的影响。
  • 支持模拟调度的优雅驱逐等增强的重调度能力
    当压制不足以抑制干扰时,就需要从节点中驱逐低优Pod以确保高优业务的服务质量。Crane支持模拟调度的优雅驱逐重调度能力能够借助集群全局视角和预调度能力降低重调度对应用的影响。

  混部在离线作业调度时应优先选择满足弹性资源用量中真实负载较低的节点进行部署,避免节点负载不均;同时,需保障高优和延迟敏感业务的资源诉求,如调度到资源宽裕的节点,满足NUMA拓扑的绑核需求等。Crane通过真实负载调度和CPU拓扑感知调度满足了如上需求,具体可参考Crane-Scheduler和CPU拓扑感知调度。


4.总结

  作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率。然而要达到理论上的节点负载目标是很的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源。Crane提供了Request推荐、副本数推荐、HPA推荐以及EPA等业务优化能力,能辅助业务自动化决策进行资源配置优化。同时Crane提供了高优敏感业务与低优批处理业务的混部能力,能将集群利用率提升3倍!Crane涵盖了RUE的大部分功能,涉及CPU,内存,IO,网络等多个维度,通过PodQOS和NodeQOS为应用提供批量化的RUE隔离能力,使得用户无需关注复杂的CGroup配置便能轻松实现内核层面的资源隔离和保障。综上所述未来其使用场景、范围必然会扩大。


  关于腾讯云 Finops Crane 集训营:

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

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

  活动介绍送门:https://marketing.csdn.net/p/038ae30af2357473fc5431b63e4e1a78

  开源项目: https://github.com/gocrane/crane

  【腾讯云 Finops Crane 集训营】 如何在Windows上快速搭建一个Kubernetes+Crane 环境及应用到此就结束了,感谢大家阅读,如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)


猜你喜欢

转载自blog.csdn.net/weixin_45191386/article/details/130672057