kubernetes云平台管理实战:HPA水平自动伸缩(十一)

一、自动伸缩

1、启动

[root@k8s-master ~]# kubectl autoscale deployment nginx-deployment --max=8 --min=2 --cpu-percent=80
deployment "nginx-deployment" autoscaled

2、查看创建

[root@k8s-master ~]# kubectl get all
NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/nginx-deployment   2         2         2            2           13h

NAME                   REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa/nginx-deployment   Deployment/nginx-deployment   80%       0%        2         8         17s

NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   10.254.0.1      <none>        443/TCP        2d
svc/nginx        10.254.145.15   <nodes>       80:32000/TCP   1d

NAME                             DESIRED   CURRENT   READY     AGE
rs/nginx-deployment-2950479891   0         0         0         13h
rs/nginx-deployment-3113009173   2         2         2         13h

NAME                                   READY     STATUS    RESTARTS   AGE
po/nginx-deployment-3113009173-h5plc   1/1       Running   0          17s
po/nginx-deployment-3113009173-vckhg   1/1       Running   1          13h

3、修改副本数为1

[root@k8s-master ~]# kubectl edit deployment nginx-deployment
修改为1
replicas: 1
deployment "nginx-deployment" edited
[root@k8s-master ~]# kubectl get all
NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/nginx-deployment   1         1         1            1           13h

NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   10.254.0.1      <none>        443/TCP        2d
svc/nginx        10.254.145.15   <nodes>       80:32000/TCP   1d

NAME                             DESIRED   CURRENT   READY     AGE
rs/nginx-deployment-2950479891   0         0         0         13h
rs/nginx-deployment-3113009173   1         1         1         13h

NAME                                   READY     STATUS    RESTARTS   AGE
po/nginx-deployment-3113009173-vckhg   1/1       Running   1          13h

二、hpa伸缩

1、编辑horizontalpodautoscaler 文件

[root@k8s-master ~]# kubectl get horizontalpodautoscaler
NAME               REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
nginx-deployment   Deployment/nginx-deployment   80%       0%        2         8         1m

# Please edit the object below. Lines beginning with a ‘#‘ will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  creationTimestamp: 2019-01-22T01:00:02Z
  name: nginx-deployment
  namespace: default
  resourceVersion: "41194"
  selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/nginx-deployment
  uid: 0c897472-1de1-11e9-9773-000c292bd9e1
spec:
  maxReplicas: 8
  minReplicas: 2
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: nginx-deployment
  targetCPUUtilizationPercentage: 80
status:
  currentCPUUtilizationPercentage: 0
  currentReplicas: 2
  desiredReplicas: 2
  lastScaleTime: 2019-01-22T01:00:02Z

2、修改副本为1

[root@k8s-master ~]# kubectl edit deployment nginx-deployment
  replicas: 1
deployment "nginx-deployment" edited
[root@k8s-master ~]# kubectl get all
NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/nginx-deployment   2         2         2            2           13h

NAME                   REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa/nginx-deployment   Deployment/nginx-deployment   80%       0%        2         8         6m

NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   10.254.0.1      <none>        443/TCP        2d
svc/nginx        10.254.145.15   <nodes>       80:32000/TCP   1d

NAME                             DESIRED   CURRENT   READY     AGE
rs/nginx-deployment-2950479891   0         0         0         13h
rs/nginx-deployment-3113009173   2         2         2         13h

NAME                                   READY     STATUS    RESTARTS   AGE
po/nginx-deployment-3113009173-9hlq1   1/1       Running   0          2s
po/nginx-deployment-3113009173-vckhg   1/1       Running   1          13h

明明修改为1,怎么还有2个?是因为hpa如下配置

spec:
  maxReplicas: 8
  minReplicas: 2

3、修改副本数为5

[root@k8s-master ~]# kubectl edit hpa nginx-deployment
修改:
spec:
  maxReplicas: 8
  minReplicas: 5
horizontalpodautoscaler "nginx-deployment" edited
[root@k8s-master ~]# kubectl get all
NAME                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/nginx-deployment   5         5         5            2           13h

NAME                   REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
hpa/nginx-deployment   Deployment/nginx-deployment   80%       0%        5         8         8m

NAME             CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
svc/kubernetes   10.254.0.1      <none>        443/TCP        2d
svc/nginx        10.254.145.15   <nodes>       80:32000/TCP   1d

NAME                             DESIRED   CURRENT   READY     AGE
rs/nginx-deployment-2950479891   0         0         0         13h
rs/nginx-deployment-3113009173   5         5         2         13h

NAME                                   READY     STATUS              RESTARTS   AGE
po/nginx-deployment-3113009173-97l9c   0/1       ContainerCreating   0          2s
po/nginx-deployment-3113009173-9hlq1   1/1       Running             0          2m
po/nginx-deployment-3113009173-qq4h8   0/1       ContainerCreating   0          2s
po/nginx-deployment-3113009173-sfp8z   0/1       ContainerCreating   0          2s
po/nginx-deployment-3113009173-vckhg   1/1       Running             1          13h

看到自动伸缩的过程了吧!

三、HAP-deployment-rs-rc-pod调用原理

1、什么是hpa

Horizontal Pod Autoscaling可以根据CPU使用率或应用自定义metrics自动扩展Pod数量(支持replication controller、deployment和replica set)。

  • 控制管理器每隔30s(可以通过–horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
  • 支持三种metrics类型
    • 预定义metrics(比如Pod的CPU)以利用率的方式计算
    • 自定义的Pod metrics,以原始值(raw value)的方式计算
    • 自定义的object metrics
  • 支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics

客户端;

通过kubectl创建一个horizontalPodAutoscaler对象,并存储到etcd中

服务端:

api server:负责接受创建hpa对象,然后存入etcd

hpa controler和其他的controler类似,每30s同步一次,将已经创建的hpa进行一次管理(从heapster获取监控数据,查看是否需要scale, controler的store中就保存着从始至终创建出来的hpa,当做一个缓存),watch hpa有变化也会运行。从heapster中获取scale数据,和hpa对比,计算cup利用率等信息,然后重新调整scale。根据hpa.Spec.ScaleTargetRef.Kind(例如Deployment,然后deployment控制器在调整pod数量),调整其值,发送到apiserver存储到etcd,然后更新hpa到etcd.

2、示例

# 创建pod和service
$ kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --expose --port=80
service "php-apache" created
deployment "php-apache" created

# 创建autoscaler
$ kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
deployment "php-apache" autoscaled
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       0%        1         10        18s

# 增加负载
$ kubectl run -i --tty load-generator --image=busybox /bin/sh
Hit enter for command prompt
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

# 过一会就可以看到负载升高了
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       305%      1         10        3m

# autoscaler将这个deployment扩展为7个pod
$ kubectl get deployment php-apache
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   7         7         7            7           19m

# 删除刚才创建的负载增加pod后会发现负载降低,并且pod数量也自动降回1个
$ kubectl get hpa
NAME         REFERENCE                     TARGET    CURRENT   MINPODS   MAXPODS   AGE
php-apache   Deployment/php-apache/scale   50%       0%        1         10        11m

$ kubectl get deployment php-apache
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
php-apache   1         1         1            1           27m

3、关系原理图 

4、小结

1、首先最底层的资源永远都是pod
2、比pod高级一点的资源叫rc副本控制器
3、在pod上面有一个高级的rs
4、那谁来管理rs呢?是deployment
5、HPA自动管理deployment,deployment设置为1,HPA最低设置为3,deployment这就会被自动设计为3个

原文地址:https://www.cnblogs.com/luoahong/p/10303077.html

时间: 2024-08-21 22:01:54

kubernetes云平台管理实战:HPA水平自动伸缩(十一)的相关文章

kubernetes云平台管理实战: 自动加载到负载均衡(七)

一.如何实现外界能访问 外界访问不了 1.启动svc [root@k8s-master ~]# cat myweb-svc.yaml apiVersion: v1 kind: Service metadata: name: nginx spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: app: myweb [root@k8s-master ~]# kubectl create -f myweb-svc.yaml se

kubernetes云平台管理实战:deployment通过标签管理pod(十)

一.kubectl run命令拓展 1.RC创建 [root@k8s-master ~]# kubectl run web --generator=run/v1 --image=10.0.128.0:5000/nginx:1.13 --replicas=3 replicationcontroller "web" created 2.deployment创建 [root@k8s-master ~]# kubectl run web --image=10.0.128.0:5000/ngin

kubernetes云平台管理实战: 高级资源deployment-滚动升级(八)

一.通过文件创建deployment 1.创建deployment文件 [root@k8s-master ~]# cat nginx_deploy.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx im

kubernetes云平台管理实战: 滚动升级秒级回滚(六)

一.nginx保证有两个版本 1.查看当前容器运行nginx版本 [root@k8s-master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE myweb-7w38b 1/1 Running 0 4h 172.16.10.4 k8s-node1 myweb-btflm 1/1 Running 0 4h 172.16.48.4 k8s-node2 myweb-cbt47 1/1 Running 0 4h 17

kubernetes云平台管理实战:如何创建deployment更好(九)

一.文件创建带--record 1.文件 [root@k8s-master ~]# cat nginx_deploy.yml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: 10.0.128.0

kubernetes云平台管理实战: 服务发现和负载均衡(五)

一.rc控制器常用命令 1.rc控制器信息查看 [root@k8s-master ~]# kubectl get replicationcontroller NAME DESIRED CURRENT READY AGE myweb 3 3 3 3m [root@k8s-master ~]# kubectl get rc NAME DESIRED CURRENT READY AGE myweb 3 3 3 5m 2.删除rc [root@k8s-master ~]# kubectl delete

openStack 云平台管理节点管理网口流量非常大 出现丢包严重 终端总是时常中断问题调试及当前测试较有效方案

tuning for Data Transfer hosts connected at speeds of 1Gbps or higher <一.本次OpenStack系统调试简单过程简单记录> 1,dmesg 日志,丢包问题关键原因定位; [101231.909932] net_ratelimit: 85 callbacks suppressed 2,ethstatus -i p5p1 实时追踪网口TX/RX状态; 3,具体内核等相关参数调整 # recommended default co

Triton - 创新的开源云平台管理软件

SmartOS是基于Solaris的一个开源的操作系统,囊括了ZFS, Zone, Crossbow, DTrace, KVM, Bhyve等卓越的技术; Triton是基于SmartOS的一套开源免费的云平台管理软件,媲美openstack的所有主要功能模块,安装.升级.管理却比openstack简单很多.所有节点是从USB盘或者网络启动,系统不需要安装到硬盘,所以没有普通OS中的安装和打补丁的概念,系统升级只是需要从新的U盘启动就行.每一个系统核心服务都是通过一个image实现的,通过下载新

Kubernetes集群水平扩展——HPA(自动伸缩)

Kubernetes集群可以通过Replication Controller的scale机制完成服务的扩容或缩容,实现具有伸缩性的服务. Kubernetes集群自动伸缩分为: sacle手动伸缩:可参考K8s资源对象的基本管理之使用命令行的方式(升级.回滚.扩容.缩容): autoscale自动伸缩:也就是本篇博文所介绍的HPA: Kubernetes自动扩展主要分为: 水平扩展:针对实例数目的增减: 垂直扩展:也就是单个实例就可以使用的资源的增减,比如增加CPU.内存: 一.HPA简介 HP