linux cpu占用率如何看
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
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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~