所有分类
  • 所有分类
  • 未分类

K8S-水平自动扩缩容实战演练

简介

本文用实例来展示K8S的自动扩缩容(水平方向)。

官网网址

HorizontalPodAutoscaler 演练 | Kubernetes

为 Pod 和容器管理资源 | Kubernetes

水平扩缩的原理 

水平扩缩容:自动增加或减少Pod的数量以满足需求。

水平扩缩使用的是orizontalPodAutoscaler(简称 HPA ),可以自动更新工作负载资源(例如 Deployment 或者 StatefulSet), 以自动扩缩工作负载来满足需求。

  1. 如果负载增加,并且 Pod 的数量低于配置的最小值, HPA 会指示工作负载资源(Deployment、StatefulSet 或其他类似资源)增加Pod。
  2. 如果负载减少,并且 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
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录