简介
本文用实例来展示K8S的自动扩缩容(水平方向)。
官网网址
HorizontalPodAutoscaler 演练 | Kubernetes
水平扩缩的原理
水平扩缩容:自动增加或减少Pod的数量以满足需求。
水平扩缩使用的是orizontalPodAutoscaler(简称 HPA ),可以自动更新工作负载资源(例如 Deployment 或者 StatefulSet), 以自动扩缩工作负载来满足需求。
- 如果负载增加,并且 Pod 的数量低于配置的最小值, HPA 会指示工作负载资源(Deployment、StatefulSet 或其他类似资源)增加Pod。
- 如果负载减少,并且 Pod 的数量高于配置的最小值, HPA 会指示工作负载资源(Deployment、StatefulSet 或其他类似资源)减少Pod。
水平与垂直有什么区别?
水平扩缩:增加或减少Pod的数量
垂直扩缩:Pod数量不变,给已有的Pod增加或者减少资源(例如:内存或 CPU)。
实战演练
本文部署nginx应用,用HPA控制nginx的Pod数量:最少1个,最多10个。然后频繁请求nginx,观察它是否动态扩容。然后停止请求,看它是否动态缩容。
所需的文件如下:
文件下载地址
此内容 登录 后可见!
准备工作
需要先安装资源统计服务(metrics-server),用来监控cpu、内存等占用情况。见:这里
1.部署nginx
创建名为k8s-nginx.yaml的文件,内容如下:
# 创建Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx # 选择或创建的Pod的模板 template: metadata: labels: app: nginx spec: # 容器的路径 containers: - image: nginx:latest name: nginx-latest ports: - containerPort: 80 name: nginx-80 resources: limits: cpu: 500m requests: cpu: 200m --- # 创建Service apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx spec: ports: - name: nginx-port port: 8000 # Service监听的端口 targetPort: 80 # nginx自身暴露的端口。对应Deployment的containerPort # 对外的端口号 nodePort: 30003 selector: app: nginx # NodePort类型可以对外暴露端口 type: NodePort
重点:Deployment.spec.template.spec.containers.resources
里边使用limits限制pod的最大资源(本处是限制CPU占用),用requests设置请求资源。
部署nginx:
kubectl apply -f k8s-nginx.yaml
用dashboard查看结果(成功启动)
2.部署HPA
此内容查看价格为0.9积分,VIP免费,请先登录
4.停止请求nginx
停止请求(按下ctrl+c),然后看观察负载页面(红框内是停止请求后的打印)。
可以看到:CPU占用立刻降到了0;然后过了大概五分钟,副本的数量逐渐恢复到了1。
5.清除资源
清除Nginx应用
kubectl delete -f k8s-nginx.yaml
清除负载
kubectl delete pod load-generator
清除HPA
kubectl delete hpa hpa-nginx
请先
!