k8s资源监控
Metrics-Server是集群核心監控數據的聚合器,用來替換之前的heapster。
容器相關的 Metrics 主要來自于 kubelet 內置的 cAdvisor 服務,有了Metrics-Server之后,用戶就可以通過標準的 Kubernetes API 來訪問到這些監控數據。
- Metrics API 只可以查詢當前的度量數據,并不保存歷史數據。
- Metrics API URI 為 /apis/metrics.k8s.io/,在 k8s.io/metrics 維護。
- 必須部署 metrics-server 才能使用該 API,metrics-server 通過調用 Kubelet Summary API 獲取數據。
Metrics Server 并不是 kube-apiserver 的一部分,而是通過 Aggregator 這種插件機制,在獨立部署的情況下同 kube-apiserver 一起統一對外服務的。
kube-aggregator 其實就是一個根據 URL 選擇具體的 API 后端的代理服務器。
- 將metrics-server部署配置所需的鏡像從官網上拉取下來,再上傳至自己的倉庫
從官網上可以下載到最新的部署yaml文件,由于我所拉取的鏡像是0.4.0版本的,所以我們下載yaml文件之后需要進行修改,保證鏡像與yaml文件中對應
[root@server2 ~]# mkdir metric-server/ [root@server2 ~]# cd metric-server/ [root@server2 metric-server]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml [root@server2 metric-server]# vim components.yaml 修改:v0.4.0, 和我所用的鏡像版本對應 [root@server2 metric-server]# kubectl apply -f components.yaml
應用完之后會出現報錯,我們對應解決報錯即可。
我們需要查看日志,查看錯誤,解決錯誤
- 錯誤1:dial tcp: lookup server2 on 10.96.0.10:53: no such host
這是因為沒有內網的DNS服務器,所以metrics-server無法解析節點名字。可以直接修改coredns的configmap,講各個節點的主機名加入到hosts中,這樣所有Pod都可以從CoreDNS中解析各個節點的名字。
$ kubectl edit configmap coredns -n kube-system
apiVersion: v1
data:
Corefile: |
…
ready
hosts {
172.25.0.11 server1
172.25.0.12 server2
172.25.0.13 server3
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa { - 報錯2:x509: certificate signed by unknown authority
Metric Server 支持一個參數 --kubelet-insecure-tls,可以跳過這一檢查,然而官方也明確說了,這種方式不推薦生產使用。
啟用TLS Bootstrap 證書簽發
在配置文件最后一行加上```bash
[root@server2 metric-server]# vim /var/lib/kubelet/config.yaml
…
serverTLSBootstrap: true
[root@server2 metric-server]# systemctl restart kubelet
可以查詢出現cpu和memory狀態就說明ok了
- 錯誤3 也有可能會遇到以下錯誤,按照下面提示解決
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
如果metrics-server正常啟動,沒有錯誤,應該就是網絡問題。修改metrics-server的Pod 網絡模式:
hostNetwork: true
注意兩個鏡像名稱
將上面的token輸入網址就可以進入
HPA
官網:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
HPA伸縮過程:
收集HPA控制下所有Pod最近的cpu使用情況(CPU utilization)
對比在擴容條件里記錄的cpu限額(CPUUtilization)
調整實例數(必須要滿足不超過最大/最小實例數)
每隔30s做一次自動擴容的判斷
CPU utilization的計算方法是用cpu usage(最近一分鐘的平均值,通過metrics可以直接獲取到)除以cpu request(這里cpu request就是我們在創建容器時制定的cpu使用核心數)得到一個平均值,這個平均值可以理解為:平均每個Pod CPU核心的使用占比。
HPA進行伸縮算法:
計算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)ceil()表示取大于或等于某數的最近一個整數每次擴容后冷卻3分鐘才能再次進行擴容,而縮容則要等5分鐘后。
當前Pod Cpu使用率與目標使用率接近時,不會觸發擴容或縮容:
觸發條件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
Hpa會根據Pod的CPU使用率動態調節Pod的數量。
HELM
Helm是Kubernetes 應用的包管理工具,主要用來管理 Charts,類似Linux系統的yum。
Helm Chart 是用來封裝 Kubernetes 原生應用程序的一系列 YAML 文件。可以在你部署應用的時候自定義應用程序的一些 Metadata,以便于應用程序的分發。
對于應用發布者而言,可以通過 Helm 打包應用、管理應用依賴關系、管理應用版本并發布應用到軟件倉庫。
對于使用者而言,使用 Helm 后不用需要編寫復雜的應用部署文件,可以以簡單的方式在 Kubernetes 上查找、安裝、升級、回滾、卸載應用程序。
Helm V3 與 V2 最大的區別在于去掉了tiller:
Helm當前最新版本 v3.1.0 官網:https://helm.sh/docs/intro/
Helm安裝:
[root@server2 ~]# mkdir helm [root@server2 ~]# cd helm/ get helm-v3.4.1-linux-amd64.tar.gz [root@server2 helm]# tar zxf helm-v3.4.1-linux-amd64.tar.gz [root@server2 helm]# cd linux-amd64/ [root@server2 linux-amd64]# cp helm /usr/local/bin/ [root@server2 linux-amd64]# helm env[root@server2 ~]# helm repo add dandydev https://dandydeveloper.github.io/charts [root@server2 helm]# helm pull dandydev/redis-ha [root@server2 helm]# tar axf redis-ha-4.12.9.tgz [root@server2 helm]# cd redis-ha/ [root@server2 redis-ha]# vim values.yaml 本地倉庫里需要的鏡像 [root@server1 harbor]# docker pull redis:6.0.7-alpine [root@server1 harbor]# docker tag redis:6.0.7-alpine reg.westos.org/library/redis:6.0.7-alpine [root@server1 harbor]# docker push reg.westos.org/library/redis:6.0.7-alpine 將存儲位置指向默認分配 [root@server2 redis-ha]# kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' [root@server2 redis-ha]# helm install redis-ha . [root@server2 redis-ha]# kubectl get pod -w會慢慢運行起來,等待全部運行起來即可
這里我們看到master是0
當我們把0的pod刪除之后,再次登陸一個查看master會調度到哪一個
這時我們看到現在1已經成為了master
手動創建
[root@server2 ~]# cd helm/ [root@server2 helm]# helm create mychart [root@server2 helm]# tree mychart/ [root@server2 helm]# cd mychart/ [root@server2 mychart]# vim Chart.yaml [root@server2 mychart]# vim values.yaml檢測是否有錯誤
[root@server2 mychart]# cd .. [root@server2 helm]# helm lint mychart/
將應用打包
更新
[root@server2 helm]# helm upgrade demo mychart-0.1.0.tgz --set replicaCount=2
上傳
get helm-push_0.9.0_linux_amd64.tar.gz [root@server2 helm]# helm env //獲取插件目錄
安裝helm-push插件:
查看上傳的mychart應用:
訪問 svc分配的ip地址,查看是否負載均衡
修改版本信息
打包:
上傳
在真機訪問的時候需要做好本地解析
回滾:
回滾成功:
部署metrics-server
[root@server1 harbor]# docker pull bitnami/metrics-server:0.4.2-debian-10-r0 [root@server1 harbor]# docker tag bitnami/metrics-server:0.4.2-debian-10-r0 reg.westos.org/bitnami/metrics-server:0.4.2-debian-10-r0 [root@server1 harbor]# docker push reg.westos.org/bitnami/metrics-server:0.4.2-debian-10-r0 [root@server2 ~]# cd metric-server/ [root@server2 metric-server]# kubectl delete -f components.yaml [root@server2 ~]# cd helm/metrics-server/ [root@server2 metrics-server]# kubectl create namespace metrics-server [root@server2 metrics-server]# vim values.yaml [root@server2 metrics-server]# helm install metrics-server . -n metrics-server
讓它重載以下
部署kubeapps應用
為Helm提供web UI界面管理:
[root@server2 helm]# helm repo add stable http://mirror.azure.cn/kubernetes/charts/ [root@server2 helm]# helm pull bitnami/kubeapps [root@server2 helm]# tar zxf kubeapps-5.2.2.tgz [root@server2 helm]# cd kubeapps/
訪問:http://kubeapps.westos.org 注意:注意做好本地解析
獲取token
將token輸入登陸即可
創建 mychart pod
也可以做更新回滾刪除
總結
- 上一篇: Django入门(二) 理解Django
- 下一篇: win10怎么共享打印机_共享打印机添加