kubernetes從入門到精通系列21-新一代監控架構

kubernetes從入門到精通系列目錄:


kubernetes從入門到精通系列21-新一代監控架構


21.1 核心指標流水線

由 kubelet、metrics-server 以及由 apiserver 提供的 api 組成;主要 CPU累計使用率、內存實時使用率、POD 資源佔用率及容器的磁盤佔用率。

  • metrics-server(新一代的資源指標獲取方式)

它是一個 apiserver ,它僅僅用於服務於核心指標服務的,它不是 k8s 的組成部分,僅僅是託管在 k8s 之上 POD。

k8s 的 apiserver 和 metrics-server 的 apiserver 前端應該加一個代理服務器,它就是一個聚合器,把來自多個不同的 apiserver 聚合成一個。它就是 kube-aggregator,經過它聚合後的 api 我麼將通過 /apis/metrics.k8s.io/v1/beta1 來獲取。

21.2監控流水線

用於從系統收集各種指標數據並提供終端用戶、存儲系統以及 HPA,它包含核心指標和非核心指標,非核心指標不能被 k8s 所理解,k8s-prometheus-adapter 就是轉換為 k8s 所理解格式的一個插件

  • prometheus

CNCF下的第二大項目,收集各種維度的指標,

它收集的信息,來決定是否進行 HPA(自動伸縮) 的一個標準

prometheus 既作為監控系統使用,也作為特殊指標的提供者來使用,但是如果想要作為特殊指標提供給 HPA 這樣的機制使用,需要轉換格式,而這個轉換為特殊指標的一個插件叫:k8s-prometheus-adapter。

21.3 安裝 metrics-server

  • 官方倉庫,這裡我使用第一個
<code>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 官方插件示例
/<code>
  • 安裝部署相關的文件:/tree/master/deploy/,修改 metrics-server-deployment.yaml 文件
<code>containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.1
imagePullPolicy: Always
args: # 添加參數
- '--kubelet-preferred-address-types=InternalIP' # 不使用主機名,使用 IP
- '--kubelet-insecure-tls' # 不驗證客戶端證書
volumeMounts:
- name: tmp-dir
mountPath: /tmp
/<code>
<code>$ kubectl apply -f ./
/<code>
  • 查看 POD 和 Service 的啟動情況
<code>$ kubectl get pods -n kube-system
$ kubectl get svc -n kube-system
/<code>
  • 查看 API 中是否存在,metrics.k8s.io/v1beta1
<code>$ kubectl api-versions
/<code>
  • 通過測試接口獲取監控數據,kubectl proxy –port 8080,kubectl top 也可以正常使用了
<code>$ curl http://127.0.0.1:8080/apis/metrics.k8s.io/v1beta1
$ kubectl top nodes
/<code>

21.4 安裝 prometheus

  • 工作原理
<code>-   prometheus 通過 pull metrilcs 指令從每個 Jobs/exporters 拉取數據
- 其他的 short-lived jobs 也可以通過向 pushgateway 主動發送數據,由 prometheus 被動接收
- prometheus 自身實現了一個時間序列數據庫,會將得到的數據存儲到其中
- 在 k8s 需要使用 service discovery 來發現服務取得需要監控的目標
- 可以使用 apiclient、webui、Grafana、來將 prometheus 中的數據展示出來
- 當需要報警的時候還會推送給 alertmanager 這個組件由這個組件來發送報警

/<code>
  • 部署文件
<code>https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus
https://github.com/iKubernetes/k8s-prom
/<code>

21.5 HPA命令行方式

  • 創建 POD 和 service
<code>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
/<code>
  • 創建 HPA 控制器
<code>kubectl autoscale deployment myapp --min=1 --max=8 --cpu-percent=60
/<code>
  • 查看 HPA 控制器,kubectl get hpa
<code>NAME    REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
myapp Deployment/myapp 0%/60% 1 8 1 17s
/<code>
  • 開始壓力測試
<code>ab -c 100 -n 5000000 http://172.16.100.102:32749/index.html
/<code>
  • 測試結果,自動擴容生效
<code>$ 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
/<code>

21.6 HPA清單

  • 清單定義詳見:kubectl explain hpa.spec
<code>maxReplicas                       <integer>         # 自動伸縮的 POD 數量上限
minReplicas <integer> # 自動伸縮的 POD 數量下限
scaleTargetRef <object> # 其他的伸縮指標
apiVersion <string> # 指標 api 版本
kind <string> # 指標類型
name <string> # 可用指標
targetCPUUtilizationPercentage <integer> # 根據目標 平均 CPU 利用率閾值評估自動伸縮
/<integer>/<string>/<string>/<string>/<object>/<integer>/<integer>/<code>
  • 示例清單,它實現了對 myapp 這個 deployment 控制器下的 POD 進行自動擴容
<code>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/<code>


分享到:


相關文章: