k8s资源监控
Metrics-Server是集群核心監(jiān)控?cái)?shù)據(jù)的聚合器,用來替換之前的heapster。
容器相關(guān)的 Metrics 主要來自于 kubelet 內(nèi)置的 cAdvisor 服務(wù),有了Metrics-Server之后,用戶就可以通過標(biāo)準(zhǔn)的 Kubernetes API 來訪問到這些監(jiān)控?cái)?shù)據(jù)。
- Metrics API 只可以查詢當(dāng)前的度量數(shù)據(jù),并不保存歷史數(shù)據(jù)。
- Metrics API URI 為 /apis/metrics.k8s.io/,在 k8s.io/metrics 維護(hù)。
- 必須部署 metrics-server 才能使用該 API,metrics-server 通過調(diào)用 Kubelet Summary API 獲取數(shù)據(jù)。
Metrics Server 并不是 kube-apiserver 的一部分,而是通過 Aggregator 這種插件機(jī)制,在獨(dú)立部署的情況下同 kube-apiserver 一起統(tǒng)一對(duì)外服務(wù)的。
kube-aggregator 其實(shí)就是一個(gè)根據(jù) URL 選擇具體的 API 后端的代理服務(wù)器。
- 將metrics-server部署配置所需的鏡像從官網(wǎng)上拉取下來,再上傳至自己的倉庫
從官網(wǎng)上可以下載到最新的部署yaml文件,由于我所拉取的鏡像是0.4.0版本的,所以我們下載yaml文件之后需要進(jìn)行修改,保證鏡像與yaml文件中對(duì)應(yīng)
[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, 和我所用的鏡像版本對(duì)應(yīng) [root@server2 metric-server]# kubectl apply -f components.yaml
應(yīng)用完之后會(huì)出現(xiàn)報(bào)錯(cuò),我們對(duì)應(yīng)解決報(bào)錯(cuò)即可。
我們需要查看日志,查看錯(cuò)誤,解決錯(cuò)誤
- 錯(cuò)誤1:dial tcp: lookup server2 on 10.96.0.10:53: no such host
這是因?yàn)闆]有內(nèi)網(wǎng)的DNS服務(wù)器,所以metrics-server無法解析節(jié)點(diǎn)名字。可以直接修改coredns的configmap,講各個(gè)節(jié)點(diǎn)的主機(jī)名加入到hosts中,這樣所有Pod都可以從CoreDNS中解析各個(gè)節(jié)點(diǎn)的名字。
$ 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 { - 報(bào)錯(cuò)2:x509: certificate signed by unknown authority
Metric Server 支持一個(gè)參數(shù) --kubelet-insecure-tls,可以跳過這一檢查,然而官方也明確說了,這種方式不推薦生產(chǎn)使用。
啟用TLS Bootstrap 證書簽發(fā)
在配置文件最后一行加上```bash
[root@server2 metric-server]# vim /var/lib/kubelet/config.yaml
…
serverTLSBootstrap: true
[root@server2 metric-server]# systemctl restart kubelet
可以查詢出現(xiàn)cpu和memory狀態(tài)就說明ok了
- 錯(cuò)誤3 也有可能會(huì)遇到以下錯(cuò)誤,按照下面提示解決
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
如果metrics-server正常啟動(dòng),沒有錯(cuò)誤,應(yīng)該就是網(wǎng)絡(luò)問題。修改metrics-server的Pod 網(wǎng)絡(luò)模式:
hostNetwork: true
注意兩個(gè)鏡像名稱
將上面的token輸入網(wǎng)址就可以進(jìn)入
HPA
官網(wǎng):https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
HPA伸縮過程:
收集HPA控制下所有Pod最近的cpu使用情況(CPU utilization)
對(duì)比在擴(kuò)容條件里記錄的cpu限額(CPUUtilization)
調(diào)整實(shí)例數(shù)(必須要滿足不超過最大/最小實(shí)例數(shù))
每隔30s做一次自動(dòng)擴(kuò)容的判斷
CPU utilization的計(jì)算方法是用cpu usage(最近一分鐘的平均值,通過metrics可以直接獲取到)除以cpu request(這里cpu request就是我們?cè)趧?chuàng)建容器時(shí)制定的cpu使用核心數(shù))得到一個(gè)平均值,這個(gè)平均值可以理解為:平均每個(gè)Pod CPU核心的使用占比。
HPA進(jìn)行伸縮算法:
計(jì)算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)ceil()表示取大于或等于某數(shù)的最近一個(gè)整數(shù)每次擴(kuò)容后冷卻3分鐘才能再次進(jìn)行擴(kuò)容,而縮容則要等5分鐘后。
當(dāng)前Pod Cpu使用率與目標(biāo)使用率接近時(shí),不會(huì)觸發(fā)擴(kuò)容或縮容:
觸發(fā)條件:avg(CurrentPodsConsumption) / Target >1.1 或 <0.9
Hpa會(huì)根據(jù)Pod的CPU使用率動(dòng)態(tài)調(diào)節(jié)Pod的數(shù)量。
HELM
Helm是Kubernetes 應(yīng)用的包管理工具,主要用來管理 Charts,類似Linux系統(tǒng)的yum。
Helm Chart 是用來封裝 Kubernetes 原生應(yīng)用程序的一系列 YAML 文件。可以在你部署應(yīng)用的時(shí)候自定義應(yīng)用程序的一些 Metadata,以便于應(yīng)用程序的分發(fā)。
對(duì)于應(yīng)用發(fā)布者而言,可以通過 Helm 打包應(yīng)用、管理應(yīng)用依賴關(guān)系、管理應(yīng)用版本并發(fā)布應(yīng)用到軟件倉庫。
對(duì)于使用者而言,使用 Helm 后不用需要編寫復(fù)雜的應(yīng)用部署文件,可以以簡(jiǎn)單的方式在 Kubernetes 上查找、安裝、升級(jí)、回滾、卸載應(yīng)用程序。
Helm V3 與 V2 最大的區(qū)別在于去掉了tiller:
Helm當(dāng)前最新版本 v3.1.0 官網(wǎng):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 將存儲(chǔ)位置指向默認(rèn)分配 [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會(huì)慢慢運(yùn)行起來,等待全部運(yùn)行起來即可
這里我們看到master是0
當(dāng)我們把0的pod刪除之后,再次登陸一個(gè)查看master會(huì)調(diào)度到哪一個(gè)
這時(shí)我們看到現(xiàn)在1已經(jīng)成為了master
手動(dòng)創(chuàng)建
[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檢測(cè)是否有錯(cuò)誤
[root@server2 mychart]# cd .. [root@server2 helm]# helm lint mychart/
將應(yīng)用打包
更新
[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應(yīng)用:
訪問 svc分配的ip地址,查看是否負(fù)載均衡
修改版本信息
打包:
上傳
在真機(jī)訪問的時(shí)候需要做好本地解析
回滾:
回滾成功:
部署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應(yīng)用
為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輸入登陸即可
創(chuàng)建 mychart pod
也可以做更新回滾刪除
總結(jié)
- 上一篇: Django入门(二) 理解Django
- 下一篇: moosefs分布式文件系统