美文网首页
k8s top命令

k8s top命令

作者: 何约什 | 来源:发表于2020-01-02 20:39 被阅读0次

    K8S top命令的作用

    我们通常可以基于top命令来查看节点上的资源使用情况,可以带两个参数nodes和pods通过这个命令,分别用于查看节点和pods的资源使用情况,这对于我们快速查看k8s集群以及pod的资源利用率,从而提醒业务或者系统管理人员及时的对集群扩容,调整Pod的资源请求。

    下面是这个命令显示的一个常规的输出:

    yuxianbing@61d84e9891:~$ kubectl top node
    NAME                                  CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%   
    node1                                  96m          0%                   5796Mi              19%       
    node2                                  91m          0%                   2950Mi               9%        
    ......
    

    但是这个命令新旧版本的实现上有差异,主要分水岭是从1.9.X版本开始。

    1.9.X版本的top命令的实现

    kubectl top命令依赖于heapster组件,我们用下面的内容创建heapster.yaml文件:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: heapster
      namespace: kube-system
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1beta1
    metadata:
      name: heapster
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:heapster
    subjects:
    - kind: ServiceAccount
      name: heapster
      namespace: kube-system
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: heapster
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: heapster
        spec:
          serviceAccountName: heapster
          containers:
          - name: heapster
            image: k8s.gcr.io/heapster-amd64:v1.5.3
            imagePullPolicy: IfNotPresent
            command:
            - /heapster
            - --source=kubernetes:https://kubernetes.default
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        task: monitoring
        # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
        # If you are NOT using this as an addon, you should comment out this line.
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: Heapster
      name: heapster
      namespace: kube-system
    spec:
      ports:
      - port: 80
        targetPort: 8082
      selector:
        k8s-app: heapster
    

    并运行kubectl apply -f heapster.yaml部署好heapster,就能通过旧版本的kubectl来执行top命令获取到资源利用率。

    该版本的实现原理是,从heapster组件中读取收集的监控数据,由于heapster已经是淘汰的版本,这里不做深入的分析了。

    最新版本的top命令的实现

    新版本已经用metrics server替代了heapster,下面是K8S的监控架构图:

    monitoring_architecture.png

    监控架构中包含了指标收集流以及监控流两个部分,这里我们主要讨论的是指标收集部分。
    在这里我们有两个指标源:

    • kubelet:提供节点/POD/容器使用信息,它封装了cAdvisor来提供这些核心系统指标;
    • resource estimator:可以在K8S中运行为Daemonset,并从Kubelet中获取裸的资源使用情况数据,经过处理后,变成资源的预估信息,用于高级调度使用。

    Metrics Server负责从指标源中抓取数据,它不负责指标数据的持久化,只保留最近的数据(注意:kubectl top命令只用到了kubelet相关的核心指标),与此同时,Metrics Server会通过Aggregated API Servers模式把自己的API暴漏给API Server。

    所以从客户端使用视角来看,访问Metrics Server就想访问API Server 一样,而kubectl就是这样的一种客户端,下面是Metrics Server暴漏的API信息:

    root # kubectl api-versions  | grep metrics
    metrics.k8s.io/v1beta1
    

    我们可以通过下面的API来访问Metrics API:
    http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1/nodes
    http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1/nodes/
    http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1/pods
    http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1/namespace//pods/
    也可以直接通过 kubectl 命令来访问这些 API,比如:

    kubectl get –raw apis/metrics.k8s.io/v1beta1/nodes
    kubectl get –raw apis/metrics.k8s.io/v1beta1/pods
    kubectl get –raw apis/metrics.k8s.io/v1beta1/nodes/
    kubectl get –raw apis/metrics.k8s.io/v1beta1/namespace//pods/

    部署Metrics Server需要注意的点

    kubelet启动的时候,需要加上下面的参数:
    --authentication-token-webhook --authorization-mode=Webhook

    相关文章

      网友评论

          本文标题:k8s top命令

          本文链接:https://www.haomeiwen.com/subject/acmooctx.html