一、
原先版本是用heapster来收集资源指标才能看,但是现在heapster要废弃了。
从k8s v1.8开始后,引入了新的功能,即把资源指标引入api;
在使用heapster时,获取资源指标是由heapster自已获取的,heapster有自已的获取路径,没有通过apiserver,后来k8s引入了资源指标API(Metrics API),于是资源指标的数据就从k8s的api中的直接获取,不必再通过其它途径。
metrics-server: 它也是一种API Server,提供了核心的Metrics API,就像k8s组件kube-apiserver提供了很多API群组一样,但它不是k8s组成部分,而是托管运行在k8s之上的Pod。
为了让用户无缝的使用metrics-server当中的API,还需要把这类自定义的API,通过聚合器聚合到核心API组里,然后可以把此API当作是核心API的一部分,通过kubectl api-versions可直接查看。
metrics-server收集指标数据的方式是从各节点上kubelet提供的Summary API 即10250端口收集数据,收集Node和Pod核心资源指标数据,主要是内存和cpu方面的使用情况,并将收集的信息存储在内存中,所以当通过kubectl top不能查看资源数据的历史情况,其它资源指标数据则通过prometheus采集了。
k8s中很多组件是依赖于资源指标API的功能 ,比如kubectl top 、hpa,如果没有一个资源指标API接口,这些组件是没法运行的;
资源指标:metrics-server
自定义指标: prometheus, k8s-prometheus-adapter
新一代架构:
核心指标流水线:由kubelet、metrics-server以及由API server提供的api组成;cpu累计利用率、内存实时利用率、pod的资源占用率及容器的磁盘占用率;
监控流水线:用于从系统收集各种指标数据并提供终端用户、存储系统以及HPA,他们包含核心指标以及许多非核心指标。非核心指标不能被k8s所解析;
metrics-server是一个api server,收集cpu利用率、内存利用率等。
二、metrics
(1)卸载上一节heapster创建的资源;
[root@master metrics]# pwd
/root/manifests/metrics
[root@master metrics]# kubectl delete-f ./deployment.apps"monitoring-grafana"deleted
service"monitoring-grafana"deleted
clusterrolebinding.rbac.authorization.k8s.io"heapster"deleted
serviceaccount"heapster"deleted
deployment.apps"heapster"deleted
service"heapster"deleted
deployment.apps"monitoring-influxdb"deleted
service"monitoring-influxdb"deleted
pod"pod-demo" deleted
metrics-server在GitHub上有单独的项目,在kubernetes的addons里面也有关于metrics-server插件的项目yaml文件;
我们这里使用kubernetes里面的yaml:
将以下几个文件下载出来:
[root@master metrics-server]# pwd
/root/manifests/metrics/metrics-server
[root@master metrics-server]# lsauth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml
需要修改一些内容:
目前metrics-server的镜像版本已经升级到metrics-server-amd64:v0.3.1了,此前的版本为v0.2.1,两者的启动的参数还是有所不同的。
[root@master metrics-server]# vim resource-reader.yaml
...
...
rules:-apiGroups:- ""resources:-pods-nodes-namespaces- nodes/stats #添加此行
verbs:-get-list-watch-apiGroups:- "extensions"resources:-deployments
...
...
[root@master metrics-server]# vim metrics-server-deployment.yaml
...
...
containers:- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.1#修改镜像(可以从阿里云上拉取,然后重新打标)
command:- /metrics-server- --metric-resolution=30s- --kubelet-insecure-tls ##添加此行- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #添加此行
# These are neededfor GKE, which doesn't support secure communication yet.
# Remove these lines for non-GKE clusters, and when GKE supports token-based auth.
#- --kubelet-port=10255#- --deprecated-kubelet-completely-insecure=trueports:- containerPort: 443name: https
protocol: TCP- name: metrics-server-nanny
image: k8s.gcr.io/addon-resizer:1.8.4#修改镜像(可以从阿里云上拉取,然后重新打标)
resources:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 5m
memory: 50Mi
...
...
# 修改containers,metrics-server-nanny 启动参数,修改好的如下:
volumeMounts:- name: metrics-server-config-volume
mountPath:/etc/config
command:- /pod_nanny- --config-dir=/etc/config- --cpu=80m- --extra-cpu=0.5m
- --memory=80Mi- --extra-memory=8Mi- --threshold=5
- --deployment=metrics-server-v0.3.1
- --container=metrics-server- --poll-period=300000
- --estimator=exponential
# Specifies the smallest cluster (definedinnumber of nodes)
# resources will be scaled to.
#- --minClusterSize={ { metrics_server_min_cluster_size }}
...
...
#创建
[root@master metrics-server]# kubectl apply -f ./clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
serviceaccount/metrics-server created
configmap/metrics-server-config created
deployment.apps/metrics-server-v0.3.1created
service/metrics-server created
#查看,pod已经起来了
[root@master metrics-server]# kubectl get pods -n kube-system |grep metrics-server
metrics-server-v0.3.1-7d8bf87b66-8v2w9 2/2 Running 0 9m37s
[root@master ~]# kubectl api-versions |grepmetrics
metrics.k8s.io/v1beta1
[root@master~]# kubectl top nodes
Error f