从 v1.8 开始,资源使用情况的度量(如容器的 CPU 和内存使用)可以通过 Metrics API 获取。注意
  • Metrics API 只可以查询当前的度量数据,并不保存历史数据
  • Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护
必须部署 metrics-server 才能使用该 API,metrics-server 通过调用 Kubelet Summary API 获取数据
在部署 metrics-server 之前,需要在 kube-apiserver 中开启 API Aggregation,即增加以下配置
--requestheader-client-ca-file=/etc/ssl/kubernetes/ca.pem \
--requestheader-allowed-names=aggregator \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file=/etc/ssl/kubernetes/metrics-server.pem \
--proxy-client-key-file=/etc/ssl/kubernetes/metrics-server-key.pem \
--enable-aggregator-routing=true \
参数说明:
--requestheader-XXX、--proxy-client-XXX 是 kube-apiserver 的 aggregator layer 相关的配置参数,metrics-server & HPA 需要使用;
--requestheader-client-ca-file:用于签名 --proxy-client-cert-file 和 --proxy-client-key-file 指定的证书;在启用了 metric aggregator 时使用;
如果 --requestheader-allowed-names 不为空,则--proxy-client-cert-file 证书的 CN 必须位于 allowed-names 中,默认为 aggregator;
如果 kube-apiserver 机器没有运行 kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数;
关于 --requestheader-XXX 相关参数,参考:
https://github.com/kubernetes-incubator/apiserver-builder/blob/master/docs/concepts/auth.md
https://docs.bitnami.com/kubernetes/how-to/configure-autoscaling-custom-metrics/
注意:requestheader-client-ca-file 指定的 CA 证书,必须具有 client auth and server auth;

创建 metrics-server 证书签名请求

vim metrics-server-csr.json
{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
注意: CN 名称为 aggregator,需要与 kube-apiserver 的 --requestheader-allowed-names 参数配置一致
cfssl gencert \
-ca=/etc/ssl/kubernetes/ca.pem \
-ca-key=/etc/ssl/kubernetes/ca-key.pem \
-config=/etc/ssl/kubernetes/ca-config.json \
-profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server
将生成的证书和私钥文件拷贝到 kube-apiserver 节点

然后重启kube-apiserver服务

kubectl get apiservice v1beta1.metrics.k8s.io -o yaml 

小问题总结

这里需要提到的还有一点就是kubelet的服务关闭只读端口,还有如果是二进制的高可用的master,需要有flanneld 的组件,要不在kube-apiserver 访问(metrics-serve)POD 的时候,会提示访问超时,因为默认没有路由规则让你访问的

具体验证方式,就是在 ApiServer 节点直接 ping metric-server pod 的 IP,看能否通信我这里是失败了,因为集群是 HA 模式,master 没有安装flanneld 的插件

如下报错: 

23668 available_controller.go:353] v1beta1.metrics.k8s.io failed with: Get https://172.17.19.4:443: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

安装过程这里不表述了,参考我前面的文章 

https://www.cnblogs.com/centos-python/articles/10901024.html

最终会生成一个api

kubectl api-versions |egrep metrics.k8s.io/v1beta1 

yum install jq -y 

直接通过 kubectl 命令来访问这些 API

kubectl get --raw "/apis/metrics.k8s.io/v1beta1" | jq . 

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq . 

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq . 

kubectl top nodes 

kubectl top pods

转载于:https://www.cnblogs.com/centos-python/articles/11067696.html

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐