當系統資源太高的時候,咱們能夠使用命令來實現 Pod 的擴縮容功能,可是這個過程是手動操做的。在實際項目中,咱們須要作到是的是一個自動化感知並自動擴容的操做。Kubernetes 也爲提供了這樣的一個資源對象:Horizontal Pod Autoscaling(Pod 水平自動伸縮),簡稱HPA;基於CPU、內存、自定義數據(此章不實現,基於監控數據實現)進行Deployment或RC所管理的POD資源進行擴容與收縮。
HPA實現的有兩個版本:git
Metrics Server 做爲標準的 Kubernetes API 把監控數據暴露出來的服務,好比獲取某一Pod的監控數據;不管是 heapster仍是 metric-server,都只是數據的中轉和聚合,二者都是調用的 kubelet 的 api 接口獲取的數據,而 kubelet 代碼中實際採集指標的是 cadvisor 模塊;cadvisor獲取指標時實際調用的是 runc/libcontainer庫,而libcontainer是對 cgroup文件 的封裝,即 cadvsior也只是個轉發者,它的數據來自於cgroup文件。
cgroup文件中的值是監控數據的最終來源,如
mem usage的值,
對於docker容器來說,來源於/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes
對於pod來說,/sys/fs/cgroup/memory/kubepods/besteffort/pod[podId]/memory.usage_in_bytesgithub
一、下載地址docker
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
二、修改相關的內容api
84 containers: 85 - name: metrics-server 86 image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 #修改鏡像 87 imagePullPolicy: IfNotPresent 88 args: 89 - --cert-dir=/tmp 90 - --secure-port=4443 91 - --kubelet-insecure-tls #增長內容 92 - --kubelet-preferred-address-types=InternalIP #增長內容
三、安裝app
$ kubectl create -f components.yaml
四、驗證安裝結果curl
五、curl展現獲取某個pod的CPU與內存使用數據ide
一、基於CPU的動態擴縮容google
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: hpa-myblog-cpu namespace: kang #必須與該deployment相同的命名空間 spec: maxReplicas: 3 #最大3個pod minReplicas: 1 #最小1個pod scaleTargetRef: apiVersion: apps/v1 kind: Deployment #hpa接管的資源類型,能夠是RC等等等 name: app #必須與kind資源的名稱匹配 targetCPUUtilizationPercentage: 10 #超過10%時進行擴容
二、建立與查看url
三、模擬壓測spa
一、yaml文件
apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: hpa-demo-mem namespace: kang spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app minReplicas: 1 maxReplicas: 3 metrics: - type: Resource resource: name: memory targetAverageUtilization: 30
二、建立與查看