Kube Scheduler 可观测性最佳实践

    banner.png

    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.yaml
    kubectl get pod -n datakit
    

    采集器配置

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

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: datakit-conf
      namespace: datakit
    data:
       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_scheduler_cache_size 调度器缓存中节点、Pod和AssumedPod(假定要调度的Pod)的数量 Gauge
    scheduler_pending_pods Pending Pod的数量。队列种类如下:unschedulable:不可调度的Pod数量。backoff:backoffQ的Pod数量,即因为某种原因暂时不能被调度的Pod数量。active:activeQ的Pod数量,即准备就绪并等待被调度的Pod数量。 Gauge
    rest_client_request_duration_seconds_bucket 从方法(Verb)和URL维度分析HTTP请求时延。 Histogram
    rest_client_requests_total 从状态值(Status Code)、方法(Method)和主机(Host)维度分析HTTP请求数。 Counter

    视图

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

    监控器(告警)

    • Scheduler pending pods 数量过多

    • Kube API 请求时延过高

    • Kube API 请求过多

    总结

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

    联系我们

    加入社区

    微信扫码
    加入官方交流群

    立即体验

    在线开通,按量计费,真正的云服务!

    立即开始

    选择观测云版本

    代码托管平台