DevOps課程-Prometheus 8
因為我課程沒上時都會移除整座Cluster,這篇順便整理建置的指令
#建立Cluster:
eksctl create cluster#取得目前現有哪些Cluster及其名稱:
eksctl get cluster#對應課程結束移除(課上完才跑):
eksctl delete cluster --name {cluster名稱}#這邊建置直接使用default的namespace建立要觀察的微服務系統:
kubectl apply -f config-best-practices.yaml#安裝指令整理,增加Repo位置(如果本機沒做過的話):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts#更新Repo內容(如果本機沒做過的話):
helm repo update#建立Prometheus專用的namespace:
kubectl create namespace monitoring#安裝Prometheus Chart,並給予名稱為monitoring,並安裝到monitoring ns裡面:
helm install {名稱,這邊一樣給monitoring} {Repo名稱}/{chart名稱,叫kube-prometheus-stack} -n {指定的namespace}#整理上述對應的指令即如下(大概10分鐘),有時候久了會清cache,要重做上面update:
helm install monitoring prometheus-community/kube-prometheus-stack -n monitoring#將Prometheus Web UI服務可以透過本機連通,把本機對應PORT往前推到遠端服務:
kubectl port-forward {元件名稱} {執行kubectl指令本機PORT}:{這個元件PORT} -n monitoring &#上面Prometheus Web UI使用PORT是9090,所以組出來的指令類似:
kubectl port-forward service/monitoring-kube-prometheus-prometheus 9090:9090 -n monitoring &#上述執行後即可訪問本機127.0.0.1:9090 會自動導到遠端Prometheus Web#同理Grafana的Web UI:
kubectl port-forward service/monitoring-grafana 8080:80 -n monitoring &#上述執行後,可以瀏覽127.0.0.1:8080,預設帳密是admin/prom-operator
#透過kubectl工具建立寫好的Alert Rule(檔案內已經有寫指定的namespace了):
kubectl apply -f alert-rules.yaml#確認現有Alert Rule方式:
kubectl get PrometheusRule -n monitoring#查看建立Alert Rule的過程,指定到Container:
kubectl logs prometheus-monitoring-kube-prometheus-prometheus-0 -n monitoring -c config-reloader#另一個主要Container的log也有建立Alert Rule的log可以看:
kubectl logs prometheus-monitoring-kube-prometheus-prometheus-0 -n monitoring -c prometheus
接下來目標是:
首先先來到Grafana的UI,看到以下的Dashboard:
前面Grafana UI有用簡單的方式造成小小流量
不過那不足以觸發自建的Alert(CPU使用量>50%)
下面會直接地佈署一個會造成CPU使用量飆升的
在dockerhub內查找 →cpustress:
這個image已經很久沒有變了:
底下文件也很簡略,並且文件說明是docker run的方式
#這時候拿到的執行方式是:
bash docker run -it --name cpustress --rm containerstack/cpustress --cpu 4 --timeout 30s --metrics-brief
這邊我們就用pod形式執行地佈署上述image
所以要先改造成kubectl的執行方式
原本:
逐一改造成kubectl可執行的pod:
#得到的指令:
kubectl run cpu-test --image=docker.io/containerstack/cpustress -- --cpu 4 --timeout 30s --metrics-brief
然後當下還沒看到spike,但是數值的確變高了:
後來沒多久它就不行了
仔細看文件知道後面option是用掉多少core,持續30秒
#我改用以下方式跑,從30秒改成跑2分鐘:
kubectl run cpu-test --image=docker.io/containerstack/cpustress -- --cpu 4 --timeout 120s --metrics-brief
馬上看到明顯的變化:
新建的CPU>50% Alert條件也進入到Pending狀態(因為有設2分鐘的限制)
過一陣子
接著移除該pod後:
大概過一兩分鐘再去Prometheus Web上面看,就變回綠色了