Kubernetes HPA管理
一、HPA介紹
??HPA的全稱為(Horizontal Pod Autoscaling),通俗的理解下HPA就是對(duì)deployment進(jìn)行擴(kuò)縮容的一個(gè)管理機(jī)制,他會(huì)監(jiān)測(cè)pod的cpu和memory的使用情況,當(dāng)cpu或memory達(dá)到一個(gè)值,為了能夠使服務(wù)正常運(yùn)行,他會(huì)進(jìn)行擴(kuò)容增加pod,來分擔(dān)壓力,當(dāng)pod的使用比較空閑穩(wěn)定的時(shí)候,他會(huì)自動(dòng)的進(jìn)行縮容,但縮容的速度遠(yuǎn)遠(yuǎn)慢于擴(kuò)容的速度,防止pod再一次達(dá)到閾值。
這是hpa擴(kuò)容的原理圖,其中有個(gè)metrics Server的API,HPA控制器通過Metrics Server的API(Heapster的API或聚合API)獲取這些數(shù)據(jù),基于用戶定義的擴(kuò)縮容規(guī)則進(jìn)行計(jì)算,得到目標(biāo)Pod副本數(shù)量。
?
二、介紹HPA三個(gè)版本
我們?cè)谑褂胊piVersion創(chuàng)建資源的時(shí)候,有些版本分為很多種,就像hpa,他就有三個(gè)版本
第一個(gè)版本:autosacling/v1 這是最簡(jiǎn)單的一個(gè)版本,所涵蓋的內(nèi)容比較少,但是使用簡(jiǎn)單,如果做一些簡(jiǎn)單的擴(kuò)縮容可以使用此版本
第二個(gè)版本:autoscaling/v2beta1 這是在v1的基礎(chǔ)上演變的 多了一個(gè)metric模塊
第三個(gè)版本: autoscaling/v2beta2 這個(gè)版本就比較詳細(xì)了,內(nèi)容也比較豐富,主要新增了擴(kuò)縮容靈敏度的控制,下文的例子就是使用的這個(gè)版本
我們?nèi)绻胫酪粋€(gè)apiversion有多少版本的時(shí)候 可以使用:? kubectl api-versions |grep 版本名稱
kubectl?api-resources 還可以查看所有資源
同時(shí)kubectl explain? hpa --api-version=autoscaling/v2beta2
還可以指定查看某一個(gè)版本下的具體信息
三、HPA實(shí)例
我們首先創(chuàng)建一個(gè)deploy 然后再創(chuàng)建hpa指定這個(gè)deploy進(jìn)程擴(kuò)縮容管理
apiVersion: apps/v1
kind: Deployment
metadata:
? creationTimestamp: null
? labels:
? ? app: web
? name: web
spec:
? replicas: 1
? selector:
? ? matchLabels:
? ? ? app: web
? strategy: {}
? template:
? ? metadata:
? ? ? creationTimestamp: null
? ? ? labels:
? ? ? ? app: web
? ? spec:
? ? ? containers:
? ? ? - image: nginx:latest
? ? ? ? name: nginx
? ? ? ? imagePullPolicy: IfNotPresent
? ? ? ? ports:
? ? ? ? - containerPort: 80
? ? ? ? resources:
? ? ? ? ? limits:
? ? ? ? ? ? cpu: "10m"
? ? ? ? ? ? memory: 20Mi
? ? ? ? ? requests:
? ? ? ? ? ? cpu: "10m"
? ? ? ? ? ? memory: 20Mi
status: {}
# 注意 在創(chuàng)建deploy的時(shí)候一定要限制pod的資源配額 資源配額在前幾章也說過
下面創(chuàng)建HPA
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
? name: web-hpa
spec:
? minReplicas: 1 #最少副本
? maxReplicas: 1000 #最多副本
? scaleTargetRef: #指定目標(biāo)
? ? apiVersion: apps/v1
? ? kind: Deployment
? ? name: web
? metrics: #對(duì)哪個(gè)資源進(jìn)行監(jiān)控
? - type: Resource
? ? resource:
? ? ? name: cpu
? ? ? target:
? ? ? ? type: Utilization
? ? ? ? averageUtilization: 80
? behavior: #這里是重點(diǎn)? 設(shè)置擴(kuò)縮容的靈敏度
? ? scaleUp:
? ? ? stabilizationWindowSeconds: 5 # 在五秒之內(nèi)進(jìn)程擴(kuò)容
? ? ? policies:
? ? ? - type: Percent? #按照百分比進(jìn)行擴(kuò)容
? ? ? ? value: 900? #90%
? ? ? ? periodSeconds: 5 %每五秒擴(kuò)容一次
對(duì)于behavior下的polices模塊我們還可以這樣寫
policies:
- type: pods
? value: 1
每次只新增一個(gè)pod
polices:
- type: pods
? value: 0
禁止HPA擴(kuò)容 (這條我認(rèn)為沒有什么意義,我們使用hpa就是為了進(jìn)行擴(kuò)縮容)
結(jié)語:
以上就是HPA簡(jiǎn)單的介紹和操作流程
總結(jié)
以上是生活随笔為你收集整理的Kubernetes HPA管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机网络的发展及其现状分析,计算机网络
- 下一篇: 品优购商城——手机详情页(作业)