k8s测试十七 Horizontal Pod Autoscaling

如果看过测试十六到这里我们已经具备了去实验HPA的条件了,没看过的可以去看一下!

简介:

Horizontal Pod Autoscaling 可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者Replica Set 中的 Pod 数量。

运行一个比较耗费资源的pod:

kubectl run php-apache --image=gcr.io/google_containers/hpa-example --requests=cpu=200m --port=80 --image-pull-policy=IfNotPresent

 kubectl top pod 查看一下监控是否已经拿到数据:

 创建 HPA 控制器 最小1个 最大 10个 :

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

帮助文档:

  --cpu-percent=-1: The target average CPU utilization (represented as a percent of requested CPU) over all the
pods. If it's not specified or negative, a default autoscaling policy will be used.

增加负载:

kubectl run -i --tty load-generator --image=busybox /bin/sh

创建无头服务:

apiVersion: v1
kind: Service
metadata:
  name: hpasvc
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    run: php-apache

循环调用 php页面将cpu指标提升到需要hpa介入增加pod数量:

while true; do wget -q -O- http://hpasvc.default.svc.cluster.local; done

开始创建pod:

 10个pod

当监控发现cpu资源不在紧张时会在等待一会才回收资源:

pod动态:

NAME                              READY   STATUS    RESTARTS   AGE
load-generator-5fb4fb465b-kjxl7   1/1     Running   0          31s
php-apache-69fcbf5fbc-5n82p       1/1     Running   0          15m
php-apache-69fcbf5fbc-lv7sh       0/1     Pending   0          0s
php-apache-69fcbf5fbc-8zk7w       0/1     Pending   0          0s
php-apache-69fcbf5fbc-wxmhd       0/1     Pending   0          0s
php-apache-69fcbf5fbc-lv7sh       0/1     Pending   0          0s
php-apache-69fcbf5fbc-8zk7w       0/1     Pending   0          0s
php-apache-69fcbf5fbc-wxmhd       0/1     Pending   0          0s
php-apache-69fcbf5fbc-lv7sh       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-8zk7w       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-wxmhd       0/1     ContainerCreating   0          1s
php-apache-69fcbf5fbc-wxmhd       1/1     Running             0          2s
php-apache-69fcbf5fbc-lv7sh       1/1     Running             0          2s
php-apache-69fcbf5fbc-8zk7w       1/1     Running             0          2s
php-apache-69fcbf5fbc-wb8wd       0/1     Pending             0          0s
php-apache-69fcbf5fbc-wb8wd       0/1     Pending             0          0s
php-apache-69fcbf5fbc-jtg7r       0/1     Pending             0          0s
php-apache-69fcbf5fbc-xfbbh       0/1     Pending             0          0s
php-apache-69fcbf5fbc-2tfcv       0/1     Pending             0          0s
php-apache-69fcbf5fbc-jtg7r       0/1     Pending             0          0s
php-apache-69fcbf5fbc-xfbbh       0/1     Pending             0          0s
php-apache-69fcbf5fbc-2tfcv       0/1     Pending             0          0s
php-apache-69fcbf5fbc-wb8wd       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-jtg7r       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-xfbbh       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-2tfcv       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-2tfcv       1/1     Running             0          1s
php-apache-69fcbf5fbc-xfbbh       1/1     Running             0          2s
php-apache-69fcbf5fbc-wb8wd       1/1     Running             0          2s
php-apache-69fcbf5fbc-jtg7r       1/1     Running             0          2s
php-apache-69fcbf5fbc-ngf2w       0/1     Pending             0          0s
php-apache-69fcbf5fbc-ngf2w       0/1     Pending             0          0s
php-apache-69fcbf5fbc-v8bhl       0/1     Pending             0          0s
php-apache-69fcbf5fbc-v8bhl       0/1     Pending             0          0s
php-apache-69fcbf5fbc-ngf2w       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-v8bhl       0/1     ContainerCreating   0          0s
php-apache-69fcbf5fbc-ngf2w       1/1     Running             0          2s
php-apache-69fcbf5fbc-v8bhl       1/1     Running             0          2s
load-generator-5fb4fb465b-kjxl7   0/1     Error               0          25m
load-generator-5fb4fb465b-kjxl7   1/1     Running             1          25m
load-generator-5fb4fb465b-kjxl7   1/1     Terminating         1          28m
php-apache-69fcbf5fbc-wxmhd       1/1     Terminating         0          6m20s
php-apache-69fcbf5fbc-v8bhl       1/1     Terminating         0          5m49s
php-apache-69fcbf5fbc-lv7sh       1/1     Terminating         0          6m20s
php-apache-69fcbf5fbc-ngf2w       1/1     Terminating         0          5m49s
php-apache-69fcbf5fbc-8zk7w       1/1     Terminating         0          6m20s
php-apache-69fcbf5fbc-2tfcv       1/1     Terminating         0          6m4s
php-apache-69fcbf5fbc-xfbbh       1/1     Terminating         0          6m4s
php-apache-69fcbf5fbc-jtg7r       1/1     Terminating         0          6m4s
php-apache-69fcbf5fbc-wb8wd       1/1     Terminating         0          6m4s
php-apache-69fcbf5fbc-8zk7w       0/1     Terminating         0          6m22s
php-apache-69fcbf5fbc-wb8wd       0/1     Terminating         0          6m6s
php-apache-69fcbf5fbc-ngf2w       0/1     Terminating         0          5m51s
php-apache-69fcbf5fbc-xfbbh       0/1     Terminating         0          6m6s
php-apache-69fcbf5fbc-v8bhl       0/1     Terminating         0          5m51s
php-apache-69fcbf5fbc-lv7sh       0/1     Terminating         0          6m22s
php-apache-69fcbf5fbc-jtg7r       0/1     Terminating         0          6m6s
php-apache-69fcbf5fbc-wxmhd       0/1     Terminating         0          6m22s
php-apache-69fcbf5fbc-wxmhd       0/1     Terminating         0          6m22s
php-apache-69fcbf5fbc-2tfcv       0/1     Terminating         0          6m7s
php-apache-69fcbf5fbc-ngf2w       0/1     Terminating         0          5m52s
php-apache-69fcbf5fbc-ngf2w       0/1     Terminating         0          5m52s
php-apache-69fcbf5fbc-v8bhl       0/1     Terminating         0          5m53s
php-apache-69fcbf5fbc-v8bhl       0/1     Terminating         0          5m53s
php-apache-69fcbf5fbc-jtg7r       0/1     Terminating         0          6m9s
php-apache-69fcbf5fbc-jtg7r       0/1     Terminating         0          6m9s
php-apache-69fcbf5fbc-wxmhd       0/1     Terminating         0          6m26s
php-apache-69fcbf5fbc-wxmhd       0/1     Terminating         0          6m26s
php-apache-69fcbf5fbc-2tfcv       0/1     Terminating         0          6m10s
php-apache-69fcbf5fbc-2tfcv       0/1     Terminating         0          6m10s
php-apache-69fcbf5fbc-lv7sh       0/1     Terminating         0          6m27s
php-apache-69fcbf5fbc-lv7sh       0/1     Terminating         0          6m27s
php-apache-69fcbf5fbc-8zk7w       0/1     Terminating         0          6m29s
php-apache-69fcbf5fbc-8zk7w       0/1     Terminating         0          6m29s
php-apache-69fcbf5fbc-xfbbh       0/1     Terminating         0          6m13s
php-apache-69fcbf5fbc-xfbbh       0/1     Terminating         0          6m13s
php-apache-69fcbf5fbc-wb8wd       0/1     Terminating         0          6m13s
php-apache-69fcbf5fbc-wb8wd       0/1     Terminating         0          6m13s
load-generator-5fb4fb465b-kjxl7   0/1     Terminating         1          29m
load-generator-5fb4fb465b-kjxl7   0/1     Terminating         1          29m
load-generator-5fb4fb465b-kjxl7   0/1     Terminating         1          29m

 监控下的数据:

Kubernetes(k8s)是一种开源的容器编排系统,具有自动化部署、扩展和管理容器化应用程序的能力。它通过网络、调度和资源隔离等机制实现高可用性和可伸缩性。下面简单介绍一下它们的底层原理。 1. 网络 Kubernetes使用CNI(Container Network Interface)插件来管理容器网络。CNI定义了一组标准接口,使得不同的容器网络插件可以在Kubernetes中无缝切换。Kubernetes的每个节点(Node)都有一个kube-proxy代理程序,它负责在节点上创建虚拟的服务IP地址和端口,以及将流量路由到正确的Pod。 2. 调度 Kubernetes的调度器(Scheduler)负责在集群中选择一个最合适的节点来运行Pod。调度器根据一组调度策略来选择节点,比如资源利用率、节点负载等。调度器还可以根据Pod的亲和性(Affinity)和反亲和性(Anti-Affinity)来选择节点,以满足Pod之间的约束关系。 3. 资源隔离 Kubernetes使用Linux命名空间(Namespace)和Cgroups(Control Groups)来实现容器的资源隔离。Namespace使得容器可以拥有自己独立的网络、文件系统、进程和用户空间。Cgroups则可以限制容器的资源使用,比如CPU、内存、磁盘IO等。Kubernetes还支持Vertical Pod Autoscaling(VPA)和Horizontal Pod Autoscaling(HPA)等自动伸缩机制,以根据负载自动调整Pod的资源配额。 总之,Kubernetes通过网络、调度和资源隔离等机制实现了高可用性和可伸缩性。它的底层原理主要涉及到CNI、调度器、Namespace、Cgroups等技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值