Kubernetes----HPA控制器实现动态弹性扩缩容

网友投稿 260 2022-09-10

Kubernetes----HPA控制器实现动态弹性扩缩容

一、HPA控制器简介

HPA(Horizontal Pod Autoscaler)控制器可以获取pod利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现pod的数量的调整,其实HPA与之前的Deployment一样,也属于一种Kubernetes对象,它通过追踪分析目标pod的负载变化情况,类确定是否需要针对性地调整目标pod的副本数

二、HPA控制器环境准备

2.1 安装metric-server

(1)参照 Git----安装(CentOS)​ 首先安装git工具 (2)下载metric-server

git

(3)配置yaml文件

cd metrics-server/deploy/1.8+/vi

然后按照下图的位置编辑文件,内容如下:

hostNetwork: trueimage: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIP,Hostname,InternalNDS,ExternalDNS,ExternalIP

(4)使用如下命令部署

[root@master 1.8+]# kubectl apply -f ./clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader createdWarning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBindingclusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator createdWarning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBindingrolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader createdWarning: apiregistration.k8s.io/v1beta1 APIService is deprecated in v1.19+, unavailable in v1.22+; use apiregistration.k8s.io/v1 APIServiceapiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io createdserviceaccount/metrics-server createddeployment.apps/metrics-server createdservice/metrics-server createdclusterrole.rbac.authorization.k8s.io/system:metrics-server createdclusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created[root@master 1.8+]#

查询如下,有metrics-server-669dfc56ff-v6drv 即表示已经部署成功了

[root@master 1.8+]# kubectl get pod -n kube-systemNAME READY STATUS RESTARTS AGEcoredns-558bd4d5db-7vbmq 1/1 Running 0 12dcoredns-558bd4d5db-sps22 1/1 Running 0 12detcd-master 1/1 Running 0 12dkube-apiserver-master 1/1 Running 0 12dkube-controller-manager-master 1/1 Running 0 12dkube-flannel-ds-cd9qk 1/1 Running 0 12dkube-flannel-ds-gg4jq 1/1 Running 0 12dkube-flannel-ds-n76xj 1/1 Running 0 12dkube-proxy-g4j5g 1/1 Running 0 12dkube-proxy-h27ms 1/1 Running 0 12dkube-proxy-tqzjl 1/1 Running 0 12dkube-scheduler-master 1/1 Running 0 12dmetrics-server-669dfc56ff-v6drv 1/1 Running 0 56s[root@master 1.8+]#

(5)此时通过如下命令,可以查询到节点的资源使用情况

[root@master 1.8+]# kubectl top nodeW0327 11:53:58.289701 9379 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flagNAME CPU(cores) CPU% MEMORY(bytes) MEMORY%master 71m 0% 1268Mi 3%node1 24m 0% 687Mi 2%node2 23m 0% 721Mi 2%[root@master 1.8+]#

(6)通过如下命令,可以查看到pod的资源使用情况

[root@master 1.8+]# kubectl top pod -n kube-systemW0327 11:55:35.833234 10195 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flagNAME CPU(cores) MEMORY(bytes)coredns-558bd4d5db-7vbmq 1m 13Micoredns-558bd4d5db-sps22 1m 13Mietcd-master 9m 26Mikube-apiserver-master 22m 297Mikube-controller-manager-master 6m 53Mikube-flannel-ds-cd9qk 2m 15Mikube-flannel-ds-gg4jq 2m 15Mikube-flannel-ds-n76xj 1m 16Mikube-proxy-g4j5g 1m 19Mikube-proxy-h27ms 1m 19Mikube-proxy-tqzjl 1m 19Mikube-scheduler-master 2m 21Mimetrics-server-669dfc56ff-v6drv 1m 15Mi[root@master 1.8+]#

2.2 创建deployment和service

编辑service_deployment.yaml文件,内容如下:

apiVersion: v1kind: Namespacemetadata: name: dev---apiVersion: apps/v1kind: Deploymentmetadata: name: deploy-nginx namespace: devspec: replicas: 1 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - name: nginx image: nginx:1.17.1 ports: - containerPort: 80 protocol: TCP---apiVersion: v1kind: Servicemetadata: name: service-nginx namespace: devspec: ports: - port: 80 protocol: TCP targetPort: 80 nodePort: 30030 selector: run: nginx type:

使用如下命令创建

[root@master pod_controller]# kubectl apply -f service_deployment.yamlnamespace/dev createddeployment.apps/deploy-nginx createdservice/service-nginx created[root@master pod_controller]#

查看创建的资源如下:

[root@master pod_controller]# kubectl get deployment,pod,service -n devNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/deploy-nginx 3/3 3 3 5m6sNAME READY STATUS RESTARTS AGEpod/deploy-nginx-66ffc897cf-jhc9w 1/1 Running 0 5m6sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/service-nginx NodePort 10.106.128.172 80:30030/TCP 5m6s[root@master pod_controller]#

2.3 部署HPA

编辑pc_hpa.yaml文件,内容如下:注意这里把cpu使用率设置为1%是为了测试用。在实际部署中需要根据具体情况去定

apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata: name: pc-hpa namespace: devspec: minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: deploy-nginx

然后使用如下命令创建

[root@master pod_controller]# kubectl apply -f pc_hpa.yamlhorizontalpodautoscaler.autoscaling/pc-hpa created[root@master pod_controller]#

查看hpa如下

[root@master pod_controller]# kubectl get hpa -n devNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEpc-hpa Deployment/deploy-nginx /1% 1 10 1 5m18s[root@master pod_controller]#

2.4 压力测试观测HPA控制器

开三个窗口分别对pod,deployment,hpa进行监视分别使用如下命令

kubectl get pod -n dev -wkubectl get deploy -n dev -wkubectl get hpa -n dev -w

编写测试脚本 test.sh,用于发送get请求

#! /bin/bashfor((i=1;i<1000000;i++));docurl ~]# kubectl get deploy -n dev -wNAME READY UP-TO-DATE AVAILABLE AGEdeploy-nginx 1/1 1 1 82mdeploy-nginx 1/3 1 1 84mdeploy-nginx 1/3 1 1 84mdeploy-nginx 1/3 1 1 84mdeploy-nginx 1/3 3 1 84mdeploy-nginx 2/3 3 2 84mdeploy-nginx 3/3 3 3

如下为HPA的观测结果

[root@master ~]# kubectl get hpa -n dev -wNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEpc-hpa Deployment/deploy-nginx 0%/1% 1 10 1 63mpc-hpa Deployment/deploy-nginx 3%/1% 1 10 1 64mpc-hpa Deployment/deploy-nginx 3%/1% 1 10 3 64mpc-hpa Deployment/deploy-nginx 1%/1% 1 10 3 65mpc-hpa Deployment/deploy-nginx 1%/1% 1 10 3

可以看到,HPA确实可以做到动态扩缩容

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:“五一”假期楼市成交不及预期:营销力度加大,楼市有所降温!
下一篇:Kubernetes----Deployment控制器实现版本金丝雀发布
相关文章

 发表评论

暂时没有评论,来抢沙发吧~