kubernetes中metrics-server与HPA
一、 K8S監(jiān)控組件metrics-server
安裝步驟
1.添加開源社的倉庫 [root@k8s-master ~]# helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts/#搜索metrics-server [root@k8s-master ~]# helm search repo metrics-server2.下載metrics-server包 helm pull kaiyuanshe/metrics-server3.解壓 tar -xf metrics-server-2.11.4.tgz4.修改values.yaml文件 cd metrics-servervim values.yaml# 替換成下面的鏡像源和版本號 image:repository: registry.cn-hangzhou.aliyuncs.com/linxiaowen/metrics-servertag: v0.4.1args: [] # 刪掉括號,換行寫入下方內(nèi)容,經(jīng)測試,下面縮不縮進都沒關(guān)系,如果端口沖突則在下方修改。- --cert-dir=/tmp- --secure-port=6443- --metric-resolution=30s- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,externalDNS- --requestheader-username-headers=X-Remote-User- --requestheader-group-headers=X-Remote-Group- --requestheader-extra-headers-prefix=X-Remote-Extra-# 如果出現(xiàn)端口被占用了,改端口的話,需要改兩個文件三處地方一起改端口(注:必須同時修改以下端口) [root@k8s-m-01 metrics-server]# grep -R '8443' ./ ./templates/metrics-server-deployment.yaml: - --secure-port=6443 ./templates/metrics-server-deployment.yaml: - containerPort: 6443 ./values.yaml: - --secure-port=64435.創(chuàng)建用戶 [root@k8s-master metrics-server]# kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous6.安裝metrics-server [root@k8s-master metrics-server]# helm install metrics-server ./7.查看metrics-server的pod服務(wù)跑起來沒有 [root@k8s-master metrics-server]# kubectl get pod metrics-server-675ccccb46-84pbm 1/1 Running 0 19m7.服務(wù)起來后測試命令 [root@k8s-m-01 metrics-server]# kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master 110m 5% 948Mi 32% k8s-node1 41m 2% 1013Mi 35% k8s-node2 60m 3% 1228Mi 42% [root@k8s-m-01 metrics-server]# kubectl top pod NAME CPU(cores) MEMORY(bytes) nfs-nfs-client-provisioner-8557b8c764-lc4nx 3m 6Mi二、HPA自動伸縮
在生產(chǎn)環(huán)境中,總會有一些意想不到的事情發(fā)生,比如公司網(wǎng)站流量突然升高,此時之前創(chuàng)建的Pod已不足以撐住所有的訪問,而運維人員也不可能24小時守著業(yè)務(wù)服務(wù),這時就可以通過配置HPA,實現(xiàn)負載過高的情況下自動擴容Pod副本數(shù)以分攤高并發(fā)的流量,當流量恢復(fù)正常后,HPA會自動縮減Pod的數(shù)量。HPA是根據(jù)CPU的使用率、內(nèi)存使用率自動擴展Pod數(shù)量的,所以要使用HPA就必須定義Requests參數(shù)。
HPA全稱是Horizontal Pod Autoscaler,翻譯成中文是POD水平自動伸縮HPA可以基于CPU利用率對replication controller、deployment和replicaset中的pod數(shù)量進行自動擴縮容(除了CPU利用率也可以基于其他應(yīng)程序提供的度量指標custom metrics進行自動擴縮容)。pod自動縮放不適用于無法縮放的對象,比如DaemonSets。HPA由Kubernetes API資源和控制器實現(xiàn)。資源決定了控制器的行為。控制器會周期性的獲取平均CPU利用率,并與目標值相比較后來調(diào)整replication controller或deployment中的副本數(shù)量。
# 編寫pod資源清單 kind: Deployment apiVersion: apps/v1 metadata:name: hpa spec:selector:matchLabels:app: hpatemplate:metadata:labels:app: hpaspec:containers:- name: hpaimage: alvinos/django:v1resources:requests: # 最少使用多少資源cpu: 100m # cpu最少給100mmemory: 100Mi # 內(nèi)存最少給100Milimits: # 最多使用多少資源cpu: 200m # cpu最多給200m,最多不能超過memory: 200Mi # 內(nèi)存最多給200Mi,最多不能超過 --- # 配置HPA資源清單 kind: HorizontalPodAutoscaler apiVersion: autoscaling/v2beta1 metadata:name: hpanamespace: default spec:# HPA的最小pod數(shù)量和最大pod數(shù)量maxReplicas: 10minReplicas: 2# HPA的伸縮對象描述,HPA會動態(tài)修改該對象的pod數(shù)量scaleTargetRef:kind: Deploymentname: hpaapiVersion: apps/v1# 監(jiān)控的指標數(shù)組,支持多種類型的指標共存metrics:- type: Resource# 核心指標,包含cpu和內(nèi)存兩種(被彈性伸縮的pod對象中容器的requests和limits中定義的指標。)resource:name: cpu# CPU 閾值# 計算公式:所有目標pod的metric的使用率(百分比)的平均值,# 例如limit.cpu=1000m,實際使用500m,則utilization=50%# 例如(副本數(shù))deployment.replica=3, limit.cpu=1000m,則pod1實際使用cpu=500m, pod2=300m, pod=600m## 則averageUtilization=(500/1000+300/1000+600/1000)/3 = (500 + 300 + 600)/(3*1000))=0.4666666666666667# 例如limit設(shè)置200m 40 41 42 計算的結(jié)果是:(40+41+42)/600=0.205targetAverageUtilization: 40 # 注:表示cpu使用率超過40%,cpu超過40就立即擴容,cpu最多擴容10個,最小2個。200*0.4=80(80以下都是它的安全范圍)--- # 編寫service資源清單 kind: Service apiVersion: v1 metadata:name: hpa spec:ports:- port: 80targetPort: 80selector:app: hpa單位解釋
requests:代表容器啟動請求的資源限制,分配的資源必須要達到此要求
limits:代表最多可以請求多少資源
單位m:CPU的計量單位叫毫核(m)。一個節(jié)點的CPU核心數(shù)量乘以1000,得到的就是節(jié)點總的CPU總數(shù)量。如,一個節(jié)點有兩個核,那么該節(jié)點的CPU總量為2000m。
下面拿雙核舉例:
resources:requests:cpu: 50m #等同于0.05memory: 512Milimits:cpu: 100m #等同于0.1memory: 1Gi含義:該容器啟動時請求50/2000的核心(2.5%)并且允許最多使用100/2000核心(5%)
0.05個核除總核數(shù)量2就是2.5%了,0.1個核除總核數(shù)就2是5%了
cpu單位m的含義:該容器啟動時請求100/2000的核心(5%)并且允許最多使用200/2000核心(10%)
0.1個核除總核數(shù)量2就是5%了,0.2個核除總核數(shù)2就是10%了
應(yīng)用
2、# 應(yīng)用資源 [root@k8s-master ~]# kubectl apply -f hpa.yaml deployment.apps/hpa created# 查看hpa監(jiān)控cpu的使用率 [root@k8s-master ~]#kubectl get horizontalpodautoscalers.autoscaling NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa Deployment/hpa 24%/40% 2 10 2 53s3、# 查看主機資源使用率 [root@k8s-master ~]# kubectl top pods NAME CPU(cores) MEMORY(bytes) hpa-5cb8bcdc4f-xvkkf 11m 54Mi # 查看pod運行詳情 [root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE hpa-5cb8bcdc4f-xvkkf 1/1 Running 0 7m4s# 查看svc運行詳情 [root@k8s-master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hpa ClusterIP 10.1.159.102 <none> 80/TCP 6m50s# 給集群上每個節(jié)點輸入下面的命令,進行壓力測試 [root@k8s-master ~]# while true; do curl 10.1.159.102/index; echo ''; done# 再次查看本pod的CPU運行狀態(tài)(cpu流量會增大,如下所示) [root@k8s-master ~]# kubectl top pods NAME CPU(cores) MEMORY(bytes) hpa-5cb8bcdc4f-xvkkf 163m 56Mi # 再次查看pod的數(shù)量會增加(這就實現(xiàn)了用HPA監(jiān)控cpu使用率,隨著cpu的使用率的增大會自動擴容pod容器) [root@k8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE hpa-7f5d745bf9-45fkj 1/1 Running 0 4m39s hpa-7f5d745bf9-5qb4d 1/1 Running 0 4m55s hpa-7f5d745bf9-5vnfl 1/1 Running 0 4m40s hpa-7f5d745bf9-fh66r 1/1 Running 0 4m55s hpa-7f5d745bf9-fnlx4 1/1 Running 0 15m hpa-7f5d745bf9-g7r5c 1/1 Running 0 4m55s hpa-7f5d745bf9-qdrc7 1/1 Running 0 4m39s hpa-7f5d745bf9-s2sbx 1/1 Running 0 4m39s hpa-7f5d745bf9-sz9zz 1/1 Running 0 6m56s hpa-7f5d745bf9-zw778 1/1 Running 0 16m可以看到自動伸縮到十個。
總結(jié)
以上是生活随笔為你收集整理的kubernetes中metrics-server与HPA的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python四则运算程序_四则运算(Py
- 下一篇: Arduino实验三十五 声音传感器