Kubernetes部署Prometheus+Grafana以及HPA實驗測試

前言

我們現在想要達到的效果是以可視化數據來展示 Kubernetes 集羣的資源,並且能夠實現 HPA(Pod 水平自動擴縮)功能,至於什麼是 HPA 可以看我之前的文章, 《K8s-Pod 水平自動擴縮實踐(簡稱HPA)》其實這篇文章已經很好的實現 HPA 功能,但是沒有可視化監控數據。

由於 Prometheus 已經集成了 Metrics-Server,所以需要把之前單獨部署的 Metrics-Server 給移除即可。

image-20210723140241545

下載相關配置文件

GitHub下載地址:https://github.com/prometheus-operator/kube-prometheus

這裏需要注意的是根據你部署的 Kubernetes 版本來選擇對應的版本號。

image-20210723140555767

Kubernetes v1.14.0 之前的版本要選擇 release-0.1 版本來部署。

image-20210723140627725

修改配置文件,使用 NodePort 方式訪問

grafana-service.yaml 配置文件

[root@k8s-master01 manifests]# pwd
/root/kube-prometheus-release-0.1/manifests
[root@k8s-master01 manifests]# cat grafana-service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  # 新添加
  type: NodePort
  ports:
  - name: http
    port: 3000
    targetPort: http
    # 新添加
    nodePort: 30100
  selector:
    app: grafana

prometheus-service.yaml 配置文件

[root@k8s-master01 manifests]# cat prometheus-service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  # 新添加
  type: NodePort
  ports:
  - name: web
    port: 9090
    targetPort: web
    # 新添加
    nodePort: 30200
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: ClientIP

alertmanager-service.yaml 配置文件

[root@k8s-master01 manifests]# cat alertmanager-service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    alertmanager: main
  name: alertmanager-main
  namespace: monitoring
spec:
  # 新添加
  type: NodePort
  ports:
  - name: web
    port: 9093
    targetPort: web
    # 新添加
    nodePort: 30300
  selector:
    alertmanager: main
    app: alertmanager
  sessionAffinity: ClientIP

開始構建

[root@k8s-master01 manifests]# pwd
/root/kube-prometheus-release-0.1/manifests
[root@k8s-master01 manifests]# kubectl apply -f .
namespace/monitoring created
....

如果出現如下錯誤,重新再執行一遍即可。

image-20210723143345658

創建完成之後查看 Pod 狀態,全部都在 monitoring 名稱空間裏,這裏需要等待一段時間下載鏡像,後面會有個別鏡像下載失敗,因爲鏡像倉庫在國外,需要我們手動下載。

image-20210723143857635

等待了蠻久的一段時間後,發現只有一個 Pod 鏡像下載失敗,需要我們手動去對應的 Node 下載這個鏡像,鏡像名稱可以通過 describe 來查看。

image-20210723144826893

查看 kube-state-metrics 需要的鏡像

[root@k8s-master01 ~]# kubectl describe pod kube-state-metrics-69c95c6466-4jxqr -n monitoring
...
  Normal   BackOff    11m (x2 over 12m)    kubelet, k8s-node02  Back-off pulling image "k8s.gcr.io/addon-resizer:1.8.4"
  Warning  Failed     11m (x3 over 12m)    kubelet, k8s-node02  Failed to pull image "k8s.gcr.io/addon-resizer:1.8.4": rpc error: code = Unknown desc = Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Normal   Pulling    10m (x4 over 13m)    kubelet, k8s-node02  pulling image "k8s.gcr.io/addon-resizer:1.8.4"
  Warning  Failed     5m39s (x6 over 12m)  kubelet, k8s-node02  Error: ErrImagePull
  Warning  Failed     46s (x45 over 12m)   kubelet, k8s-node02  Error: ImagePullBackOff

每個節點都下載一下,防止重構後它被分配到另外節點,手動下載還是失敗,需要先下載國內的鏡像源,再通過 docker tag 來實現。

[root@k8s-node02 ~]# docker pull registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4
[root@k8s-node02 ~]# docker tag registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4 k8s.gcr.io/addon-resizer:1.8.4

此時再次查看就已經全部 Running

image-20210723145521172

可以通過命令來查看 Node 和 Pod 相關資源

[root@k8s-master01 ~]# kubectl top node
NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
k8s-master01   168m         8%     1422Mi          76%       
k8s-node01     108m         5%     1120Mi          60%       
k8s-node02     85m          4%     985Mi           52%       
[root@k8s-master01 ~]# kubectl top pod -n kube-system
NAME                                   CPU(cores)   MEMORY(bytes)   
coredns-78d4cf999f-25wzl               2m           16Mi            
coredns-78d4cf999f-dc8xs               1m           16Mi            
etcd-k8s-master01                      13m          99Mi

訪問 Dashboard 儀表盤界面

image-20210723150023848

訪問各組件 Web 界面

image-20210723150439031

訪問 Prometheus

http://MasterIP:30200

image-20210723150642602

訪問 Grafana 進行配置

http://MasterIP:30100,初始用戶/密碼都是 admin

image-20210723150730593

添加 Prometheus 數據源

image-20210723150958193

添加數據看板

image-20210723151057913

就可以查看到對應的數據了

image-20210723151145672

HPA 功能測試

首先創建 Pod,直接使用阿里源的 hpa-example 鏡像,谷歌的拉取不了

[root@k8s-master01 ~]# kubectl run php-apache --image=registry.cn-beijing.aliyuncs.com/google_registry/hpa-example --requests=cpu=200m --expose --port=80

這個鏡像比較大,稍微等一會

image-20210723152029689

創建對應 HPA

[root@k8s-master01 ~]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

image-20210723152148552

開始增加負載進行測試

[root@k8s-master01 ~]# kubectl run -i --tty load-generator --image=busybox /bin/sh/ 
/# while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

image-20210723152425671

此時 Pod 負載持續增加,已經自動擴容到七個 Pod 來應對

image-20210723152700519

查看 Pod 現在的個數,已經升至九個了

image-20210723152755928

開始減壓,測試是否自動收縮

image-20210723152852015

需要等待較長的時間,已經收縮爲最小 Pod 數量

image-20210723153444974

到此就完成整套的 K8s 監控系統,全部以實操爲主,其他具體的配置、概念、理論可以查閱對應組件的官網,由於時間原因這裏就不做贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章