集羣部署好後,若是咱們想知道集羣中每一個節點及節點上的pod資源使用狀況,命令行下能夠直接使用kubectl top node/pod來查看資源使用狀況,默認此命令不能正常使用,須要咱們部署對應api資源纔可使用此命令。從 Kubernetes 1.8 開始,資源使用指標(如容器 CPU 和內存使用率)經過 Metrics API 在 Kubernetes 中獲取, metrics-server 替代了heapster。Metrics Server 實現了Resource Metrics API,Metrics Server 是集羣範圍資源使用數據的聚合器。 Metrics Server 從每一個節點上的 Kubelet 公開的 Summary API 中採集指標信息。heapster從1.13版本開始被廢棄,官方推薦使用Metrics Server+Prometheus方案進行集羣監控。html
一、下載資源清單配置文件(6個)node
項目地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-servergit
配置文件有兩種獲取方式:二、https://github.com/kubernetes/kubernetes/tree/release-1.14/cluster/addons/metrics-server(推薦使用此方式)
[root@k8s-master01 ~]# mkdir /opt/metrics ### 選擇對應分支,下載指定配置文件 ###或者直接git clone https://github.com/kubernetes/kubernetes.git,metrics-server 插件位於 kubernetes 的 cluster/addons/metrics-server/ 目錄下 [root@k8s-master01 metrics]# for file in auth-delegator.yaml auth-reader.yaml metrics-apiservice.yaml metrics-server-deployment.yaml metrics-server-service.yaml resource-reader.yaml;do wget https://raw.githubusercontent.com/kubernetes/kubernetes/v1.14.1/cluster/addons/metrics-server/$file;done
因爲某些緣由,有些鏡像在國內沒法下載,因此咱們須要修改配置文件中鏡像下載地址,要注意紅色字體爲鏡像運行的參數
##鏡像地址啓動參數修改 [root@k8s-master01 metrics]# vim metrics-server-deployment.yaml ###mertics-server 修改啓動參數鏡像地址 ...... containers: - name: metrics-server image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.1 command: - /metrics-server - --metric-resolution=30s - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP ...... ###metrics-server-nanny 修改鏡像地址及啓動參數 ...... - name: metrics-server-nanny image: registry.cn-hangzhou.aliyuncs.com/google_containers/addon-resizer:1.8.4 ..... command: - /pod_nanny - --config-dir=/etc/config - --cpu=100m - --extra-cpu=0.5m - --memory=100Mi - --extra-memory=50Mi - --threshold=5 - --deployment=metrics-server-v0.3.1 - --container=metrics-server - --poll-period=300000 - --estimator=exponential ...... ## 在新的版本中,受權文內沒有 node/stats 的權限,須要手動去添加 [root@k8s-master01 metrics]# vim resource-reader.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:metrics-server rules: - apiGroups: - "" resources: - pods - nodes - nodes/stats ## 添加此參數 - namespaces
mertics-server鏡像參數解釋:github
特別注意:web
若是不加參數,有可能會報如下錯誤:shell
unable to fully collect metrics: [unable to fully scrape metrics from source kubelet_summary:k8s-node02: unable to fetch metrics from Kubelet k8s-node02 (10.10.0.23): request failed - "401 Unauthorized", response: "Unauthorized", unable to fully scrape metrics from source kubelet_summary:k8s-node01: unable to fetch metrics from Kubelet k8s-node01 (10.10.0.17): request failed - "401 Unauthorized", response: "Unauthorized"]json
三、kube-apiserver配置文件修改vim
二進制部署安裝,須要手動修改apiserver添加開啓聚合服務的參數,固然若是你已經添加,那麼請跳過這一步
## 編輯kube-apiserver.conf 添加以下參數,從下面參數中能夠看出,須要生產新的證書,所以咱們還須要爲metrics生產證書 --requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem --requestheader-allowed-names="" --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --proxy-client-cert-file=/etc/kubernetes/ssl/metrics-proxy.pem --proxy-client-key-file=/etc/kubernetes/ssl/metrics-proxy-key.pem
參數說明:api
注:若是 --requestheader-allowed-names 不爲空,則--proxy-client-cert-file 證書的 CN 必須位於 allowed-names 中,默認爲 aggregator;app
I0109 05:55:43.708300 1 serving.go:273] Generated self-signed cert (apiserver.local.config/certificates/apiserver.crt, apiserver.local.config/certificates/apiserver.key) Error: cluster doesn't provide requestheader-client-ca-file
四、爲metrics server生成證書
上面能夠看到,kube-apiserver開啓聚合層,也須要使用證書,爲了便於區分,咱們這裏爲mertics 單獨生產證書
關於證書的建立也可參考以前部署其它組件時建立證書時候的步驟
## 建立kube-proxy證書請求 [root@k8s-master01 ~]# vim /opt/k8s/certs/metrics-proxy-csr.json { "CN": "metrics-proxy", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "ShangHai", "L": "ShangHai", "O": "metrics-proxy", "OU": "System" } ] } ## 生成kube-proxy證書與私鑰 [root@k8s-master01 ~]# cd /opt/k8s/certs/ [root@k8s-master01 certs]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \ -ca-key=/etc/kubernetes/ssl/ca-key.pem \ -config=/opt/k8s/certs/ca-config.json \ -profile=kubernetes metrics-proxy-csr.json | cfssljson -bare metrics-proxy ## 證書分發 [root@k8s-master01 certs]# ansible k8s-master -m copy -a 'src=/opt/k8s/certs/metrics-proxy-key.pem dest=/etc/kubernetes/ssl/' [root@k8s-master01 certs]# ansible k8s-master -m copy -a 'src=/opt/k8s/certs/metrics-proxy.pem dest=/etc/kubernetes/ssl/' ## 重啓kube-apiserver服務 [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl restart kube-apiserver'
五、kubelet參數修改
主要檢查如下兩個參數,不然沒法正常獲取節點主機或者pod的資源使用狀況
[root@k8s-master01 metrics]# kubectl apply -f . ##查看mertics-server運行狀況 [root@k8s-master01 metrics]# kubectl get pods -n kube-system |grep metrics-server metrics-server-v0.3.1-57654875b4-6nflh 2/2 Running 0 13m ## 驗證查看是否能夠正常獲取資源使用詳情
[root@k8s-master01 metrics]# kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master01 245m 24% 648Mi 74% k8s-master02 166m 16% 630Mi 72% k8s-master03 137m 13% 645Mi 73% k8s-node01 96m 4% 461Mi 15% k8s-node02 360m 18% 1075Mi 37%
特別注意:
我是二進制部署,因此剛開始並無在master節點部署kubelet、kube-proxy組件,因此致使一直安裝失敗:
執行命令kubectl get apiservices v1beta1.metrics.k8s.io -o yaml 看到報錯信息:"metrics-server error "Client.Timeout exceeded while awaiting headers"",這是由於mertics沒法與 apiserver服務通訊致使,所以須要在master節點安裝部署kubelet、kube-proxy組件(能夠選擇給master節點打污點,來決定是否讓master參與pod調度上來),具體結合前面文章K8S踩坑篇-master節點做爲node節點加入集羣。