Kubernetes手記(21)- 新一代監(jiān)控架構(gòu)
二十一 新一代監(jiān)控架構(gòu)

21.1 核心指標(biāo)流水線
由 kubelet、metrics-server 以及由 apiserver 提供的 api 組成;主要 CPU累計使用率、內(nèi)存實時使用率、POD 資源占用率及容器的磁盤占用率。
它是一個 apiserver ,它僅僅用于服務(wù)于核心指標(biāo)服務(wù)的,它不是 k8s 的組成部分,僅僅是托管在 k8s 之上 POD。
k8s 的 apiserver 和 metrics-server 的 apiserver 前端應(yīng)該加一個代理服務(wù)器,它就是一個聚合器,把來自多個不同的 apiserver 聚合成一個。它就是 kube-aggregator,經(jīng)過它聚合后的 api 我么將通過 /apis/metrics.k8s.io/v1/beta1 來獲取。
21.2監(jiān)控流水線
用于從系統(tǒng)收集各種指標(biāo)數(shù)據(jù)并提供終端用戶、存儲系統(tǒng)以及 HPA,它包含核心指標(biāo)和非核心指標(biāo),非核心指標(biāo)不能被 k8s 所理解,k8s-prometheus-adapter 就是轉(zhuǎn)換為 k8s 所理解格式的一個插件
prometheus
CNCF下的第二大項目,收集各種維度的指標(biāo),
它收集的信息,來決定是否進(jìn)行 HPA(自動伸縮) 的一個標(biāo)準(zhǔn)
prometheus 既作為監(jiān)控系統(tǒng)使用,也作為特殊指標(biāo)的提供者來使用,但是如果想要作為特殊指標(biāo)提供給 HPA 這樣的機(jī)制使用,需要轉(zhuǎn)換格式,而這個轉(zhuǎn)換為特殊指標(biāo)的一個插件叫:k8s-prometheus-adapter。
21.3 安裝 metrics-server
官方倉庫,這里我使用第一個
https://github.com/kubernetes-incubator/metrics-server/tree/master/deploy/1.8%2B # 插件官方地址 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/metrics-server # k8s 官方插件示例
安裝部署相關(guān)的文件:/tree/master/deploy/,修改 metrics-server-deployment.yaml 文件
containers: - name: metrics-server image: k8s.gcr.io/metrics-server-amd64:v0.3.1 imagePullPolicy: Always args: # 添加參數(shù) - '--kubelet-preferred-address-types=InternalIP' # 不使用主機(jī)名,使用 IP - '--kubelet-insecure-tls' # 不驗證客戶端證書 volumeMounts: - name: tmp-dir mountPath: /tmp
$ kubectl apply -f ./
查看 POD 和 Service 的啟動情況
$ kubectl get pods -n kube-system $ kubectl get svc -n kube-system
查看 API 中是否存在,metrics.k8s.io/v1beta1
$ kubectl api-versions
通過測試接口獲取監(jiān)控數(shù)據(jù),kubectl proxy --port 8080,kubectl top 也可以正常使用了
$ curl http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1 $ kubectl top nodes
21.4 安裝 prometheus
工作原理
- prometheus 通過 pull metrilcs 指令從每個 Jobs/exporters 拉取數(shù)據(jù) - 其他的 short-lived jobs 也可以通過向 pushgateway 主動發(fā)送數(shù)據(jù),由 prometheus 被動接收 - prometheus 自身實現(xiàn)了一個時間序列數(shù)據(jù)庫,會將得到的數(shù)據(jù)存儲到其中 - 在 k8s 需要使用 service discovery 來發(fā)現(xiàn)服務(wù)取得需要監(jiān)控的目標(biāo) - 可以使用 apiclient、webui、Grafana、來將 prometheus 中的數(shù)據(jù)展示出來 - 當(dāng)需要報警的時候還會推送給 alertmanager 這個組件由這個組件來發(fā)送報警
部署文件
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus https://github.com/iKubernetes/k8s-prom
21.5 HPA命令行方式
創(chuàng)建 POD 和 service
kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=1 --requests='cpu=50m',memory='256Mi' --limits='cpu=50m,memory=256Mi' --labels='app=myapp' --expose --port=80
創(chuàng)建 HPA 控制器
kubectl autoscale deployment myapp --min=1 --max=8 --cpu-percent=60
查看 HPA 控制器,kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE myapp Deployment/myapp 0%/60% 1 8 1 17s
開始壓力測試
ab -c 100 -n 5000000 http://172.16.100.102:32749/index.html
測試結(jié)果,自動擴(kuò)容生效
$ kubectl get hpa -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE myapp Deployment/myapp 0%/60% 1 8 1 7m35s myapp Deployment/myapp 34%/60% 1 8 1 9m58s myapp Deployment/myapp 102%/60% 1 8 1 11m myapp Deployment/myapp 102%/60% 1 8 2 11m myapp Deployment/myapp 96%/60% 1 8 2 12m myapp Deployment/myapp 96%/60% 1 8 4 12m myapp Deployment/myapp 31%/60% 1 8 4 13m myapp Deployment/myapp 26%/60% 1 8 4 14m myapp Deployment/myapp 0%/60% 1 8 4 15m myapp Deployment/myapp 0%/60% 1 8 4 17m myapp Deployment/myapp 0%/60% 1 8 3 18m $ kubectl get pods NAME READY STATUS RESTARTS AGE myapp-64bf6764c5-45qwj 0/1 Terminating 0 7m1s myapp-64bf6764c5-72crv 1/1 Running 0 20m myapp-64bf6764c5-gmz6c 1/1 Running 0 8m1s
21.6 HPA清單
清單定義詳見:kubectl explain hpa.spec
maxReplicas
示例清單,它實現(xiàn)了對 myapp 這個 deployment 控制器下的 POD 進(jìn)行自動擴(kuò)容
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: myapp-hpa-v2 spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 55 - type: Resource resource: name: memory targetAverageValue: 50Mi
其他
自己將手記發(fā)在:https://github.com/redhatxl/awesome-kubernetes-notes
歡迎一鍵三連
Kubernetes
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。