共计 1871 个字符,预计需要花费 5 分钟才能阅读完成。
从 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 获取数据
开启聚合层(Aggregation Layer)
关于聚合层的一些知识
聚合层运行在 apiserver 进程内部,允许用户为集群安装额外的 Kubernetes 风格的 API,扩展 core API 的功能。聚合层需要启动 apiserver 的时候开启方可使用。
在用户注册扩展资源之前,聚合层什么也不做。用户要注册 API,必需向系统中添加一个 APIService 对象,用来声明 API 的 URL 路径以及处理请求的后端 APIService。此后,聚合层会将发往那个路径的所有请求 (e.g. /apis/myextension.mycompany.io/v1/…) 都转发给注册的 APIService。
一般情况下,APIService 对象以 extension-apiserver 运行在集群中的一个 pod 中,如果需要主动管理添加的资源,extension-apiserver 还需要与一个或多个 controlller 进行关联,apiserver-builder 为双方提供了一个框架。
Service Catalog 是 Kubernetes 的一种 API 扩展实现,方便 Kubernetes 集群内部应用访问集群外部、由第三方管理、提供的服务,如由云供应商提供的数据库服务。Service Catalog 的安装会为它所提供的服务提供 extension-apiserver 和 controller 两个扩展组件。
开启聚合层
修改 apiserver 配置文件,加入如下启动参数来启用 aggregation layer:
–requestheader-client-ca-file=/etc/kubernetes/ssl/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
部署 metrics-server
git clone https://github.com/kubernetes-incubator/metrics-server
cd metrics-server
kubectl create -f deploy/1.8+/
稍后就可以看到 metrics-server 运行起来:
kubectl -n kube-system get pods -l k8s-app=metrics-server
备注:
假如 gcr.io 的镜像访问不到可以将 metrics-server-deployment.yaml 中的镜像替换为:daocloud.io/liukuan73/metrics-server-amd64:v0.2.1
Metrics API
可以通过 kubectl proxy 来访问 Metrics API:
- http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes
- http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/nodes/
- http://127.0.0.1:8001/apis/metrics.k8s.io/v1beta1/pods
- http://127.0.0.1:8001/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/
: