前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈 Kubernetes Metrics Server

浅谈 Kubernetes Metrics Server

作者头像
用户5166556
发布2020-06-01 10:39:28
3.8K0
发布2020-06-01 10:39:28
举报
文章被收录于专栏:让技术和时代并行

1、Metrics Servrer 原理介绍

1.1、Metrics Server 概念和功能

  • 概念

Metrics Server 是 Kubernetes 集群核心监控数据的聚合器,Metrics Server 从 Kubelet 收集资源指标,并通过 Merics API 在 Kubernetes APIServer 中提供给缩放资源对象 HPA 使用。也可以通过 Metrics API 提供的 Kubectl top 查看 Pod 资源占用情况,从而实现对资源的自动缩放。

  • 功能

主要是基于 Kubernetes 集群的 CPU、内存的水平自动缩放。可以支持多达 5000 个集群节点,每个节点的资源占用率非常低,Metrics Server 在每个节点上占用 0.5m CPU 和 4M 内存。

  • 设计

Metrics Server 是 Kubernetes 监控组件中的重要一部分,Metrics Server 主要分为 API 和 Server 两大部分。其中 Metrics API 部分主要通过 APIServer 对外暴露 Pod 资源使用情况,比如:HPA、kubectl top、Kubernetes dashboard 等。Metrics Server 是根据 Kubernetes 监控架构进行实施,该组件会定期通过 Summary API 从 Kubelet 所在集群节点获取服务指标,然后将指标汇总、存储到内存中,仅仅存储指标最新状态,一旦重启组件数据将会丢失。现在通过 Metrics Server 采集到了数据,也暴露了 API 那么通过 kube-aggregator 统一把 API Server(/apis/metrics) 数据转发给 Metrics Server,最后通过 metrics api 统一暴露出去。

Metrics server出现后,新的 Kubernetes 监控架构将变成上图的样子 核心流程(黑色部分):这是 Kubernetes正常工作所需要的核心度量,从 Kubelet、cAdvisor 等获取度量数据,再由metrics-server提供给 Dashboard、HPA 控制器等使用。监控流程(蓝色部分):基于核心度量构建的监控流程,比如 Prometheus 可以从 metrics-server 获取核心度量,从其他数据源(如 Node Exporter 等)获取非核心度量,再基于它们构建监控告警系统。

2、Metrics Server 0.3.x 安装

  • url安装,Kubernetes 版本要求1.8+
代码语言:javascript
复制
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
  • 检查 Metrics Server是否正常运行,发现命名空间多出 metrics-server-c85fdf79-nkqj7 这就是 Metrics Server 所在 Pod

3、Merics Server 应用

Metrics Server 抽象了 HorizontalPodAutoscaler 资源对象,通过观察 Pod CPU、内存或者其它自定义指标自动缩放 Controller、Deployment、StatefulSet中的 POd 数量,注意 HorizontalPodAutoscaler 不支持无法缩放的对象,比如 DaemonSet。下面以 Deployment 举例说明 HorizontalPodAutosacler 的使用

  • 创建 Deployment,注意 Deployment 必须定义 Pod 资源使用限制,否则无法实现自动扩缩容。
代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cck-deployment
spec:
  selector:
    matchLabels:
      app: cck
  replicas: 1
  template:
    metadata:
      labels:
        app: cck
    spec:
      containers:
      - name: cck
        image: cck:2
        imagePullPolicy: IfNotPresent
        #command: ["/bin/bash","-c", "java -jar /k8s/cck.jar"]
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 500m
            memory: 2G
          limits:
            cpu: 1000m
            memory: 4G
        env:
         - name: LANG
           value: en_US.utf8
        volumeMounts:
        - mountPath: /etc/localtime
          name: date-conf
        ........
  • 创建 HorizontalPodAutoscaler 对象,默认最小副本数为 1,cpu 或者 内存达到定义的限制开始扩容,最大副本数量为 4
代码语言:javascript
复制
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: cck-deployment
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: cck-deployment
  minReplicas: 1
  maxReplicas: 8
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 70
  - type: Resource
    resource: 
      name: memory
      targetAverageValue: 1.5G
  • 运行 Deployment 和 HorizontalPodAutoscaler yaml 编排文件,如下所示内存超过了目标限定,进行了一次扩容,一份变成了三份。
代码语言:javascript
复制
[root@k8s-master k8s]# kubectl get hpa
NAME             REFERENCE                   TARGETS                       MINPODS   MAXPODS   REPLICAS   AGE
cck-deployment   Deployment/cck-deployment   1564235349333m/1.5Gi, 50%/70%   1         8         3          35h


[root@k8s-master k8s]# kubectl describe hpa cck-deployment
Name:                                                  cck-deployment
Namespace:                                             default
Labels:                                                <none>
Annotations:                                           <none>
CreationTimestamp:                                     Thu, 28 May 2020 22:46:59 +0800
Reference:                                             Deployment/cck-deployment
Metrics:                                               ( current / target )
  resource memory on pods:                             1564128522666m / 1.5Gi
  resource cpu on pods  (as a percentage of request):  48% (241m) / 70%
Min replicas:                                          1
Max replicas:                                          8
Deployment pods:                                       3 current / 3 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:           <none>

在上述执行过程中,可能会出现no metrics known for pod或者 kubectl get hpa 当前资源占用情况提示 unkonwn。出现如下问题是因为网络不通导致,通过如下图设置解决。

如上所示讲述了 HorizontalPodAutoscaler 对 Deployment 资源对象的扩容过程。

4、总结

如上简单介绍了 Kubernetes Metrics Server 安装使用,以及工作原理,初次使用,如有误区,请多包含。或者直接查看一手资料 :https://github.com/kubernetes-sigs/metrics-server

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Metrics Servrer 原理介绍
    • 1.1、Metrics Server 概念和功能
    • 2、Metrics Server 0.3.x 安装
    • 3、Merics Server 应用
    • 4、总结
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档