• K8S 安装 metrics-server v0.3.7


    版本:
    K8S:v1.16.9
    metrics-server:v0.3.7

    源码地址:https://github.com/kubernetes-sigs/metrics-server/

    mkdir /data/metrics-server && cd /data/metrics-server
    
    wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
    
    cp components.yaml components.yaml.ori
    
    vi components.yaml 
    # 修改3个地方:
    image: juestnow/metrics-server:v0.3.7             # 改成国内源
    args:
     - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP  # 默认使用node的主机名,但是coredns里面没有物理机主机名的解析,部署的时候添加一个参数
     - --cert-dir=/tmp
     - --secure-port=4443
     - --kubelet-insecure-tls                         # 直接通过InternalIP进行访问,忽略客户端证书。
    

    docker pull juestnow/metrics-server:v0.3.7
    
    kubectl apply -f components.yaml
    
    kubectl get pods -n kube-system
    # 检查是否正常启动
    metrics-server-7d65b797b7-w8d5g        1/1     Running   0          36m
    
    # metrics-server 需要一段时间才会收集数据。使用命令
    kubectl -n kube-system top pod metrics-server-7d65b797b7-w8d5g 
    NAME                              CPU(cores)   MEMORY(bytes)   
    metrics-server-7d65b797b7-w8d5g   1m           13Mi 
    

    获取 K8S pod 中的CPU,内存限制和实时资源使用率

    vi k8s_pod_resource.sh
    
    #!/bin/bash
    PODFILE="/tmp/k8s-pod-tmp.txt"
    LIMITSFILE="/tmp/k8s-pod-limits-tmp.txt"
    
    NAMESPACE=$1
    
    # 判断输入的 namespace 是否符正确
    if [[ -z ${NAMESPACE} ]];then
            echo "请输入一个 K8S namespace; 可参考命令 kubectl get ns"
            exit 1
    fi
    
    K8SNS=$(kubectl get ns|awk 'NR> 1{print $1}')
    
    result=$(echo ${K8SNS}|grep -w ${NAMESPACE})
    if [[ $result = "" ]];then
            echo "你输入的 namespace 不存在; 可参考命令 kubectl get ns"
            exit 1
    fi
    
    
    # 获取指定 namespace 下所有的 pod 实时的指标
    kubectl -n ${NAMESPACE} top pod > ${PODFILE}
    
    
    get_limits()
    {
    
            # 获取CPU限制
            CPU=$(kubectl -n ${NAMESPACE} describe pod $1 |grep -A 2 Limits|grep cpu    |awk '{print $2}')
            if [[ -z ${CPU} ]];then
                    CPU=0
            fi
    
            # 获取内存限制
            MEM=$(kubectl -n ${NAMESPACE} describe pod $1 |grep -A 2 Limits|grep memory |awk '{print $2}')
            if [[ -z ${MEM} ]];then
                    MEM=0
            fi
    
            printf "%7s      %10s
    " ${CPU} ${MEM}
    
    }
    
    
    podlist=$(cat ${PODFILE}|awk 'NR>1 {print $1}')
    
    # 结果输出到 ${LIMITSFILE}
    printf "%s      %s
    " CPU(limits)   MEMORY(limits) > ${LIMITSFILE}
    
    for l in ${podlist}
    do
            #kubectl -n ${NAMESPACE} describe pod ${l}
            get_limits ${l} >> ${LIMITSFILE}
    done
    
    # 合并展示结果
    paste ${PODFILE} ${LIMITSFILE}
    
    
    # 测试 
    bash k8s_pod_resource.sh kube-system
    NAME                                   CPU(cores)   MEMORY(bytes)       CPU(limits)      MEMORY(limits)
    coredns-58cc8c89f4-5hvxg               4m           11Mi                      0           170Mi
    coredns-58cc8c89f4-frnpq               5m           10Mi                      0           170Mi
    etcd-k8s-master01                      23m          54Mi                      0               0
    kube-apiserver-k8s-master01            57m          316Mi                     0               0
    kube-controller-manager-k8s-master01   29m          39Mi                      0               0
    kube-flannel-ds-amd64-z7ndv            2m           11Mi                   100m            50Mi
    kube-proxy-nnb4v                       4m           15Mi                      0               0
    kube-scheduler-k8s-master01            2m           17Mi                      0               0
    metrics-server-7d65b797b7-5b82l        1m           15Mi                      0               0
    

    若你的 K8S 集群有容器注入了 istio 之类的,一个 pod 中有几个 container 则需要使用下面的脚本

    cat k8s_pod_resource.sh 
    
    #!/bin/bash
    PODFILE="/tmp/k8s-pod-tmp.txt"
    LIMITSFILE="/tmp/k8s-pod-limits-tmp.txt"
    
    NAMESPACE=$1
    
    # 判断输入的 namespace 是否符正确
    if [[ -z ${NAMESPACE} ]];then
            echo "请输入一个 K8S namespace; 可参考命令 kubectl get ns"
            exit 1
    fi
    
    K8SNS=$(kubectl get ns|awk 'NR> 1{print $1}')
    
    result=$(echo ${K8SNS}|grep -w ${NAMESPACE})
    if [[ $result = "" ]];then
            echo "你输入的 namespace 不存在; 可参考命令 kubectl get ns"
            exit 1
    fi
    
    
    # 获取指定 namespace 下所有的 pod 实时的指标
    kubectl -n ${NAMESPACE} top pod > ${PODFILE}
    
    
    get_limits()
    {
    
            # 获取CPU限制
            CPU=$(kubectl -n ${NAMESPACE} describe pod $1 |awk '/^Containers/,/Conditions/{if(i>1)print x;x=$0;i++}'|grep -A 2 Limits|grep cpu |awk '{print $2}')
    
            if [[ -z ${CPU} ]];then
                    CPU=0
            elif [[ $(echo ${CPU}|wc -w) != 1 ]];then
                    CPU=$(echo ${CPU}|awk '{print $1}')
            fi
    
            # 获取内存限制
            MEM=$(kubectl -n ${NAMESPACE} describe pod $1 |awk '/^Containers/,/Conditions/{if(i>1)print x;x=$0;i++}'|grep -A 2 Limits|grep memory |awk '{print $2}')
            if [[ -z ${MEM} ]];then
                    MEM=0
            elif [[ $(echo ${MEM}|wc -w) != 1 ]];then
                    MEM=$(echo ${MEM}|awk '{print $1}')
            fi
    
    
            printf "%7s      %10s
    " ${CPU} ${MEM}
    
    }
    
    
    podlist=$(cat ${PODFILE}|awk 'NR>1 {print $1}')
    
    # 结果输出到 ${LIMITSFILE}
    printf "%s      %s
    " CPU(limits)   MEMORY(limits) > ${LIMITSFILE}
    
    for l in ${podlist}
    do
            #kubectl -n ${NAMESPACE} describe pod ${l}
            get_limits ${l} >> ${LIMITSFILE}
    done
    
    # 合并展示结果
    paste ${PODFILE} ${LIMITSFILE}
    
  • 相关阅读:
    bzoj 5092: [Lydsy1711月赛]分割序列
    bzoj1173: [Balkan2007]Point
    bzoj1536: [POI2005]Akc- Special Forces Manoeuvres
    bzoj2178: 圆的面积并
    bzoj1043 下落的圆盘
    bzoj2674 Attack
    bzoj1201: [HNOI2005]数三角形
    bzoj3135: [Baltic2013]pipesd
    bzoj1760 [Baltic2009]Triangulation
    bzoj3136
  • 原文地址:https://www.cnblogs.com/klvchen/p/14048803.html
Copyright © 2020-2023  润新知