写点什么

Kube Scheduler 可观测性最佳实践

作者:观测云
  • 2025-04-07
    上海
  • 本文字数:2411 字

    阅读完需:约 8 分钟

Kube Scheduler 可观测性最佳实践

Kube Scheduler 介绍

Kube Scheduler 是 Kubernetes 集群中的核心组件之一,负责调度决策,即将 Pod 绑定到集群中的节点上。它确保 Pod 能够高效、公平地同时遵守各种调度约束和优化目标被调度到集群中的节点上。通过合理配置和优化 Kube Scheduler,可以提高集群的资源利用率和应用程序的性能。


容器调度本身是一件比较复杂的事,因为要确保以下几个目标:


  • 公平性:在调度 Pod 时需要公平的进行决策,每个节点都有被分配资源的机会,调度器需要对不同节点的使用作出平衡决策。

  • 资源高效利用:最大化群集所有资源的利用率,使有限的 CPU、内存等资源服务尽可能更多的 Pod。

  • 效率问题:能快速的完成对大批量 Pod 的调度工作,在集群规模扩增的情况下,依然保证调度过程的性能。

  • 灵活性:在实际运作中,往往希望 Pod 的调度策略是可控的,从而处理大量复杂的实际问题。因此平台要允许多个调度器并行工作,同时支持自定义调度器。

关键特性和功能

1、调度策略:


Kube Scheduler 根据预定义的调度策略来决定 Pod 应该在哪个节点上运行。这些策略包括资源需求、亲和性与反亲和性规则、数据局部性、工作负载间干扰等。


2、过滤(Filtering):


在过滤阶段,Kube Scheduler 会评估所有节点,根据 Pod 的要求(如资源需求、亲和性规则等)来筛选出合适的节点候选列表。


3、打分(Scoring):


对于过滤后的节点候选列表,Kube Scheduler 会为每个节点打分,根据一系列预定义的策略(如节点的资源剩余量、Pod 间亲和性等)来评估每个节点的适宜性。


4、绑定(Binding):


打分最高的节点将被选为 Pod 运行的位置。Kube Scheduler 然后会绑定 Pod 到该节点,这意味着它会在 Kubernetes API 中更新 Pod 的状态,指明它应该在哪个节点上运行。


5、调度扩展性:


Kube Scheduler 支持扩展性,允许开发者实现自定义的调度器插件。这些插件可以用于实现特定的调度逻辑,如特定的亲和性规则或资源分配策略。


6、多调度器支持:


Kubernetes 支持运行多个调度器实例,每个实例可以配置不同的调度策略。这允许在同一集群中运行不同的调度策略,以适应不同的工作负载需求。


7、领导者选举:


在多调度器配置中,Kube Scheduler 支持领导者选举机制,确保在任何给定时间只有一个调度器实例在进行调度决策。


9、监控和日志:


Kube Scheduler 提供监控端点和日志记录,以便集群管理员可以监控调度器的性能和调试问题。


9、配置:


Kube Scheduler 的行为可以通过一个配置文件来定制,该文件定义了调度器的策略、插件和其他参数。


10、与 Kubernetes API 服务器的交互:


Kube Scheduler 通过与 Kubernetes API 服务器通信来获取集群状态信息,如当前的 Pod 和节点列表,并在调度决策后更新这些信息。

观测云

观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全巡检,智能监控等等。


DataKit 提供 Kube Scheduler 指标的采集,安装好 DataKit 之后,开通 kubernetesprometheus 采集器,挂载 Kube Scheduler 配置的 configMap,即可采集 Kube Scheduler 指标到观测云。

部署 DataKit

登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml,拷贝第 ③ 步中的 token。



编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,把 datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令:


kubectl apply -f datakit.yamlkubectl get pod -n datakit
复制代码

采集器配置

在 datakit.yaml 中配置 ConfigMap 资源来收集 Kube Scheduler 的指标数据。


apiVersion: v1kind: ConfigMapmetadata:  name: datakit-conf  namespace: datakitdata:   kubernetesprometheus.conf: |-     # 以下配置不是一成不变,请根据实际情况进行修改        [[inputs.kubernetesprometheus.instances]]          role       = "pod"          namespaces = ["kube-system"]          selector   = "component=kube_scheduler,tier=control-plane"                scrape   = "true"          scheme   = "https"          port     = "10259"          path     = "/metrics"          interval = "30s"               [inputs.kubernetesprometheus.instances.custom]           measurement        = "kube_scheduler"           job_as_measurement = false           [inputs.kubernetesprometheus.instances.custom.tags]             cluster_name_k8s = "k8s-test"                        node_name        = "__kubernetes_pod_node_name"             instance         = "__kubernetes_mate_instance"               [inputs.kubernetesprometheus.instances.auth]           bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"           [inputs.kubernetesprometheus.instances.auth.tls_config]             insecure_skip_verify = true             ca_certs = []             cert     = ""             cert_key = ""
复制代码


# 重启dk,使cm配置生效kubectl rollout restart ds  datakit -n datakit
复制代码


登录观测云控制台,点击「指标」 -「指标管理」,通过 scheduler 检索指标集,指标采集如下:


关键指标


视图

登录观测云控制台,点击「场景」 -「新建仪表板」,模板库系统视图中,输入 “Scheduler”, 选择“Kube Scheduler”,点击“确定”。


监控器(告警)

  • Scheduler pending pods 数量过多



  • Kube API 请求时延过高



  • Kube API 请求过多


总结

通过观测云监控 Kubernetes 集群中的核心组件之一 Kube Scheduler 的关键指标,可以更加清楚知道目前集群的运行情况,调整优化集群中 pod 的调度效率,及时响应和处理出现的各种问题,提高集群的稳定性。

用户头像

观测云

关注

还未添加个人签名 2021-02-08 加入

云时代的系统可观测平台

评论

发布
暂无评论
Kube Scheduler 可观测性最佳实践_Kubernetes_观测云_InfoQ写作社区