1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG048-Kubernetes Horizontal Pod Autoscaler实战

本文档风哥主要介绍Kubernetes Horizontal Pod Autoscaler (HPA)实战,包括HPA概述、HPA工作原理、使用场景、HPA规划、指标规划、最佳实践规划、HPA实现、指标实现、管理实现、HPA案例、指标案例、集成案例等内容,风哥教程参考Kubernetes官方文档和自动扩缩容相关文档,适合想使用和理解Kubernetes自动扩缩容的开发人员和运维人员。

Part01-基础概念与理论知识

1.1 HPA概述

Horizontal Pod Autoscaler (HPA)是Kubernetes中用于自动扩缩容Pod数量的API对象,它根据观察到的CPU利用率或其他自定义指标自动调整Pod的数量。

HPA的主要特性包括:

  • 自动扩缩容:根据指标自动调整Pod数量
  • 多指标支持:支持CPU、内存和自定义指标
  • 扩缩容策略:支持配置扩缩容的最小和最大Pod数量
  • 平滑过渡:支持配置扩缩容的速度和冷却时间

1.2 HPA工作原理

HPA的工作原理:

  • 指标收集:从Metrics Server或其他指标源收集Pod的指标数据
  • 指标计算:计算当前Pod的平均指标值
  • 目标比较:将当前指标值与目标值进行比较
  • 扩缩容决策:根据比较结果计算需要的Pod数量
  • 执行扩缩容:更新Deployment或ReplicaSet的副本数量

1.3 使用场景

HPA的使用场景包括:

  • 流量波动:应对流量高峰和低谷,自动调整Pod数量
  • 资源优化:根据实际资源使用情况,优化资源分配
  • 高可用性:在流量增加时自动扩容,确保服务可用性
  • 成本控制:在流量减少时自动缩容,降低资源成本
  • 弹性伸缩:实现服务的弹性伸缩,提高系统的弹性和可靠性

Part02-生产环境规划与建议

2.1 HPA规划

Kubernetes HPA的规划:

# HPA规划
– 目标:
– 实现Pod的自动扩缩容
– 确保服务的可用性和性能
– 优化资源利用
– 降低运维成本
– 范围:
– 应用需求分析
– HPA配置设计
– 指标选择
– 扩缩容策略设计
– 监控和告警
– 工具选择:
– kubectl:用于创建和管理HPA
– Metrics Server:用于收集CPU和内存指标
– Prometheus:用于收集自定义指标
– Grafana:用于监控和可视化
– 流程设计:
– 应用需求分析:分析应用的流量模式和资源需求
– HPA配置设计:设计HPA的配置和参数
– 指标选择:选择合适的指标进行扩缩容
– 部署测试:部署HPA并测试扩缩容效果
– 监控管理:配置监控和告警
– 资源分配:
– 人力资源:应用开发人员、运维人员
– 时间资源:设计时间、部署时间、测试时间
– 基础设施:计算资源、存储资源、网络资源

2.2 指标规划

Kubernetes HPA指标的规划:

# 指标规划
– 目标:
– 选择合适的指标进行扩缩容
– 确保指标的准确性和可靠性
– 优化指标收集和处理
– 提高扩缩容的准确性
– 范围:
– 指标类型选择
– 指标收集方式
– 指标处理策略
– 指标监控和告警
– 工具选择:
– Metrics Server:用于收集CPU和内存指标
– Prometheus:用于收集自定义指标
– Custom Metrics API:用于暴露自定义指标
– Grafana:用于监控和可视化
– 流程设计:
– 指标需求分析:分析应用的指标需求
– 指标类型选择:选择合适的指标类型
– 指标收集配置:配置指标收集方式
– 部署测试:部署指标收集系统并测试
– 监控管理:配置监控和告警
– 资源分配:
– 人力资源:应用开发人员、运维人员
– 时间资源:设计时间、部署时间、测试时间
– 基础设施:计算资源、存储资源、网络资源

2.3 最佳实践规划

Kubernetes HPA的最佳实践规划:

# 最佳实践规划
– HPA最佳实践:
– 合理设置扩缩容范围:根据应用需求设置合适的最小和最大Pod数量
– 选择合适的指标:根据应用特性选择合适的指标进行扩缩容
– 配置扩缩容策略:设置合理的扩缩容速度和冷却时间
– 监控扩缩容事件:监控HPA的扩缩容事件,及时发现问题
– 测试扩缩容效果:定期测试HPA的扩缩容效果,确保其正常工作
– 指标最佳实践:
– 使用准确的指标:确保指标能够准确反映应用的负载情况
– 合理设置目标值:根据应用特性设置合适的目标值
– 优化指标收集:确保指标收集的准确性和及时性
– 监控指标异常:监控指标的异常情况,及时发现问题
– 定期校准指标:定期校准指标,确保其准确性
– 性能最佳实践:
– 优化应用性能:提高应用的性能,减少资源使用
– 合理设置资源请求和限制:为Pod设置合理的资源请求和限制
– 避免频繁扩缩容:设置合理的冷却时间,避免频繁扩缩容
– 优化扩缩容算法:根据应用特性选择合适的扩缩容算法
– 监控扩缩容性能:监控扩缩容的性能,及时发现问题
– 安全最佳实践:
– 限制扩缩容权限:为HPA配置最小必要的权限
– 监控扩缩容事件:监控HPA的扩缩容事件,及时发现异常
– 保护指标数据:保护指标数据的安全,避免泄露
– 限制指标访问:限制指标的访问权限,提高安全性

Part03-生产环境项目实施方案

3.1 HPA实现

HPA实现的具体步骤:

# HPA实现
1. 安装Metrics Server:
# 安装Metrics Server
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 查看Metrics Server状态
$ kubectl get pods -n kube-system | grep metrics-server
# 输出
metrics-server-12345 1/1 Running 0 1m
2. 创建Deployment:
# 创建Deployment
$ cat > nginx-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" EOF $ kubectl apply -f nginx-deployment.yaml 3. 创建Service: # 创建Service $ cat > nginx-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: nginx spec: selector: app: nginx ports: - port: 80 targetPort: 80 type: ClusterIP EOF $ kubectl apply -f nginx-service.yaml 4. 创建HPA: # 创建HPA $ cat > hpa.yaml << 'EOF',风哥提示:。 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 70 EOF $ kubectl apply -f hpa.yaml 5. 查看HPA: # 查看HPA $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-hpa Deployment/nginx 0%/50%, 0%/70% 2 10 2 1m 6. 测试HPA: # 生成负载 $ kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://nginx; done" # 查看HPA状态 $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-hpa Deployment/nginx 80%/50%, 20%/70% 2 10 4 5m # 查看Pod数量 $ kubectl get pods # 输出 NAME READY STATUS RESTARTS AGE nginx-12345-abcde 1/1 Running 0 10m nginx-12345-fghij 1/1 Running 0 10m nginx-12345-klmno 1/1 Running 0 1m nginx-12345-pqrst 1/1 Running 0 1m 7. 清理负载: # 停止负载生成 # 按Ctrl+C停止负载生成器 # 查看HPA状态 $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-hpa Deployment/nginx 0%/50%, 0%/70% 2 10 2 15m # 查看Pod数量 $ kubectl get pods # 输出 NAME READY STATUS RESTARTS AGE nginx-12345-abcde 1/1 Running 0 15m nginx-12345-fghij 1/1 Running 0 15m

3.2 指标实现

指标实现的具体步骤。,风哥提示:。

# 指标实现
1. 安装Prometheus:
# 安装Prometheus
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm install prometheus prometheus-community/kube-prometheus-stack
# 查看Prometheus状态
$ kubectl get pods -n default | grep prometheus
# 输出
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 1m
2. 安装Custom Metrics API:
# 安装Prometheus Adapter
$ helm install prometheus-adapter prometheus-community/prometheus-adapter
# 查看Prometheus Adapter状态
$ kubectl get pods -n default | grep prometheus-adapter
# 输出
prometheus-adapter-12345 1/1 Running 0 1m
3. 创建自定义指标HPA:
# 创建Deployment
$ cat > app-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: app spec: replicas: 2 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" EOF $ kubectl apply -f app-deployment.yaml # 创建Service $ cat > app-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: app spec: selector: app: app ports: - port: 80 targetPort: 80 type: ClusterIP EOF $ kubectl apply -f app-service.yaml # 创建HPA $ cat > custom-metrics-hpa.yaml << 'EOF',学习交流加群风哥微信: itpux-com。 apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app minReplicas: 2 maxReplicas: 10 metrics: - type: Pods pods: metric: name: http_requests_total target: type: AverageValue averageValue: 100m EOF $ kubectl apply -f custom-metrics-hpa.yaml 4. 查看HPA: # 查看HPA $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE app-hpa Deployment/app /100m 2 10 2 1m
5. 测试自定义指标HPA:
# 生成HTTP请求
$ kubectl run -i –tty load-generator –rm –image=busybox:latest –restart=Never — /bin/sh -c “while sleep 0.01; do wget -q -O- http://app; done”
# 查看HPA状态
$ kubectl get hpa
# 输出
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
app-hpa Deployment/app 150m/100m 2 10 3 5m
6. 清理资源:
# 停止负载生成
# 按Ctrl+C停止负载生成器
# 清理资源
$ kubectl delete hpa app-hpa
$ kubectl delete deployment app
$ kubectl delete service app
$ helm uninstall prometheus-adapter
$ helm uninstall prometheus

3.3 管理实现

HPA管理的具体步骤。

# 管理实现
1. 监控HPA:
# 安装Prometheus和Grafana
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm install prometheus prometheus-community/kube-prometheus-stack
# 查看监控面板
$ kubectl port-forward deployment/prometheus-grafana 3000:3000
# 打开浏览器访问 http://localhost:3000
2. 配置HPA告警:
# 创建告警规则
$ cat > hpa-alert.yaml << 'EOF' apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: hpa-alerts spec: groups: - name: hpa rules: - alert: HPAScalingLimited expr: kube_hpa_status_condition{condition="ScalingLimited"} == 1 for: 5m labels: severity: warning annotations: summary: "HPA scaling limited" description: "HPA {{ $labels.hpa }} is scaling limited" - alert: HPAMaxedOut expr: kube_hpa_status_current_replicas == kube_hpa_spec_max_replicas for: 5m labels: severity: critical annotations: summary: "HPA maxed out" description: "HPA {{ $labels.hpa }} has reached its maximum number of replicas" - alert: HPAMinReplicas expr: kube_hpa_status_current_replicas == kube_hpa_spec_min_replicas for: 5m labels: severity: info annotations: summary: "HPA at min replicas" description: "HPA {{ $labels.hpa }} is at its minimum number of replicas" EOF $ kubectl apply -f hpa-alert.yaml 3. 批量管理HPA: # 列出所有HPA $ kubectl get hpa --all-namespaces # 查看HPA详情 $ kubectl describe hpa nginx-hpa # 更新HPA $ kubectl patch hpa nginx-hpa -p '{"spec":{"maxReplicas":15}}' # 删除HPA $ kubectl delete hpa nginx-hpa 4. 查看HPA事件: # 查看HPA事件 $ kubectl get events --field-selector involvedObject.kind=HorizontalPodAutoscaler # 输出 LAST SEEN TYPE REASON OBJECT MESSAGE 1m Normal SuccessfulRescale HorizontalPodAutoscaler/nginx-hpa New size: 4; reason: cpu resource utilization (percentage of request) above target 10m Normal SuccessfulRescale HorizontalPodAutoscaler/nginx-hpa New size: 2; reason: All metrics below target 5. 配置HPA策略: # 创建HPA with scaling policies $ cat > hpa-with-policies.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization,学习交流加群风哥QQ113257174。 averageUtilization: 50 behavior: scaleUp: stabilizationWindowSeconds: 300 policies: - type: Pods value: 2 periodSeconds: 60 scaleDown: stabilizationWindowSeconds: 600 policies: - type: Pods value: 1 periodSeconds: 60 EOF $ kubectl apply -f hpa-with-policies.yaml

Part04-生产案例与实战讲解

4.1 HPA案例

HPA的实战案例。

# 案例:使用HPA实现Web应用的自动扩缩容
# 场景:部署一个Web应用,使用HPA根据CPU和内存利用率自动扩缩容
# 问题:
– Web应用的流量波动较大
– 需要根据流量自动调整Pod数量
– 确保服务的可用性和性能
– 优化资源利用
# 解决方案:
1. 安装Metrics Server:
# 安装Metrics Server
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 查看Metrics Server状态
$ kubectl get pods -n kube-system | grep metrics-server
# 输出
metrics-server-12345 1/1 Running 0 1m
2. 创建Web应用Deployment:
# 创建Deployment
$ cat > web-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: web-app spec: replicas: 3 selector: matchLabels: app: web-app template: metadata: labels: app: web-app spec: containers: - name: web-app image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "200m" memory: "512Mi" limits: cpu: "1000m" memory: "1024Mi" EOF $ kubectl apply -f web-deployment.yaml 3. 创建Service: # 创建Service $ cat > web-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: web-app spec: selector: app: web-app ports: - port: 80 targetPort: 80 type: LoadBalancer EOF $ kubectl apply -f web-service.yaml 4. 创建HPA: # 创建HPA $ cat > web-hpa.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: web-app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web-app minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 70 behavior: scaleUp: stabilizationWindowSeconds: 300 policies: - type: Pods value: 2 periodSeconds: 60 scaleDown: stabilizationWindowSeconds: 600 policies: - type: Pods value: 1 periodSeconds: 60 EOF $ kubectl apply -f web-hpa.yaml 5. 查看HPA: # 查看HPA $ kubectl get hpa # 输出,更多视频教程www.fgedu.net.cn。 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web-app-hpa Deployment/web-app 0%/60%, 0%/70% 3 10 3 1m 6. 测试HPA: # 生成负载 $ kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://web-app; done" # 查看HPA状态 $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web-app-hpa Deployment/web-app 75%/60%, 30%/70% 3 10 5 5m # 查看Pod数量 $ kubectl get pods # 输出 NAME READY STATUS RESTARTS AGE web-app-12345-abcde 1/1 Running 0 10m web-app-12345-fghij 1/1 Running 0 10m web-app-12345-klmno 1/1 Running 0 10m web-app-12345-pqrst 1/1 Running 0 1m web-app-12345-uvwxy 1/1 Running 0 1m 7. 验证自动缩容: # 停止负载生成 # 按Ctrl+C停止负载生成器 # 查看HPA状态 $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE web-app-hpa Deployment/web-app 0%/60%, 0%/70% 3 10 3 15m # 查看Pod数量 $ kubectl get pods # 输出 NAME READY STATUS RESTARTS AGE web-app-12345-abcde 1/1 Running 0 15m web-app-12345-fghij 1/1 Running 0 15m web-app-12345-klmno 1/1 Running 0 15m # 输出结果: # Web应用部署成功 # HPA配置成功 # 负载测试时自动扩容 # 负载停止后自动缩容 # 服务可用性得到保证

4.2 指标案例

指标的实战案例。

# 案例:使用自定义指标实现HPA
# 场景:部署一个应用,使用自定义指标(HTTP请求数)实现HPA
# 问题:
– 需要根据HTTP请求数自动扩缩容
– 标准CPU和内存指标无法准确反映应用负载
– 需要更精确的扩缩容策略
# 解决方案:
1. 安装Prometheus和Prometheus Adapter:
# 安装Prometheus
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm install prometheus prometheus-community/kube-prometheus-stack
# 安装Prometheus Adapter
$ helm install prometheus-adapter prometheus-community/prometheus-adapter
# 查看状态
$ kubectl get pods | grep prometheus
# 输出
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 1m
prometheus-adapter-12345 1/1 Running 0 1m
2. 创建应用Deployment:
# 创建Deployment
$ cat > app-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: app spec: replicas: 2 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" EOF $ kubectl apply -f app-deployment.yaml 3. 创建Service: # 创建Service $ cat > app-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: app spec: selector: app: app ports: - port: 80 targetPort: 80 type: ClusterIP EOF $ kubectl apply -f app-service.yaml 4. 创建HPA: # 创建HPA $ cat > custom-metrics-hpa.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app minReplicas: 2 maxReplicas: 10 metrics: - type: Pods pods: metric: name: http_requests_total target: type: AverageValue,更多学习教程公众号风哥教程itpux_com。 averageValue: 100m EOF $ kubectl apply -f custom-metrics-hpa.yaml 5. 查看HPA: # 查看HPA $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE app-hpa Deployment/app /100m 2 10 2 1m
6. 测试自定义指标HPA:
# 生成HTTP请求
$ kubectl run -i –tty load-generator –rm –image=busybox:latest –restart=Never — /bin/sh -c “while sleep 0.01; do wget -q -O- http://app; done”
# 查看HPA状态
$ kubectl get hpa
# 输出
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
app-hpa Deployment/app 150m/100m 2 10 3 5m
# 查看Pod数量
$ kubectl get pods
# 输出
NAME READY STATUS RESTARTS AGE
app-12345-abcde 1/1 Running 0 10m
app-12345-fghij 1/1 Running 0 10m
app-12345-klmno 1/1 Running 0 1m
7. 清理资源:
# 停止负载生成
# 按Ctrl+C停止负载生成器
# 清理资源
$ kubectl delete hpa app-hpa
$ kubectl delete deployment app
$ kubectl delete service app
$ helm uninstall prometheus-adapter
$ helm uninstall prometheus
# 输出结果:
# 自定义指标HPA配置成功
# 根据HTTP请求数自动扩容
# 扩缩容效果符合预期

4.3 集成案例

HPA的集成案例。

# 案例:使用HPA和Cluster Autoscaler实现完整的自动扩缩容
# 场景:部署一个应用,使用HPA根据负载自动调整Pod数量,同时使用Cluster Autoscaler根据集群负载自动调整节点数量
# 问题:
– 需要根据应用负载自动调整Pod数量
– 需要根据集群负载自动调整节点数量
– 确保服务的可用性和性能
– 优化资源利用和成本
# 解决方案:
1. 安装Metrics Server:
# 安装Metrics Server
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# 查看Metrics Server状态
$ kubectl get pods -n kube-system | grep metrics-server
# 输出
metrics-server-12345 1/1 Running 0 1m
2. 启用Cluster Autoscaler:
# 启用Cluster Autoscaler(以AWS EKS为例)
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
# 查看Cluster Autoscaler状态
$ kubectl get pods -n kube-system | grep cluster-autoscaler
# 输出
cluster-autoscaler-12345 1/1 Running 0 1m
3. 创建应用Deployment:
# 创建Deployment
$ cat > app-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: app spec: replicas: 3 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: app image: nginx:latest ports: - containerPort: 80 resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1000m" memory: "2Gi" EOF $ kubectl apply -f app-deployment.yaml 4. 创建Service: # 创建Service $ cat > app-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: app spec: selector: app: app ports: - port: 80 targetPort: 80 type: LoadBalancer EOF $ kubectl apply -f app-service.yaml 5. 创建HPA: # 创建HPA $ cat > app-hpa.yaml << 'EOF' apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app minReplicas: 3 maxReplicas: 20 metrics: - type: Resource resource: name: cpu target: type: Utilization,from K8S+DB视频:www.itpux.com。 averageUtilization: 60 EOF $ kubectl apply -f app-hpa.yaml 6. 查看HPA: # 查看HPA $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE app-hpa Deployment/app 0%/60% 3 20 3 1m 7. 测试自动扩缩容: # 生成负载 $ kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://app; done" # 查看HPA状态。 $ kubectl get hpa # 输出 NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE app-hpa Deployment/app 80%/60% 3 20 10 5m # 查看Pod数量 $ kubectl get pods # 输出 NAME READY STATUS RESTARTS AGE app-12345-abcde 1/1 Running 0 10m app-12345-fghij 1/1 Running 0 10m app-12345-klmno 1/1 Running 0 10m app-12345-pqrst 1/1 Running 0 1m app-12345-uvwxy 1/1 Running 0 1m app-12345-yzabc 1/1 Running 0 1m app-12345-defg 1/1 Running 0 1m app-12345-hijk 1/1 Running 0 1m app-12345-lmno 1/1 Running 0 1m app-12345-pqrs 1/1 Running 0 1m # 查看节点数量 $ kubectl get nodes # 输出 NAME STATUS ROLES AGE VERSION ip-10-0-0-100.us-west-2.compute.internal Ready 1h v1.21.0
ip-10-0-0-101.us-west-2.compute.internal Ready 1h v1.21.0
ip-10-0-0-102.us-west-2.compute.internal Ready 30m v1.21.0 # 新节点
8. 验证自动缩容:
# 停止负载生成
# 按Ctrl+C停止负载生成器
# 查看HPA状态
$ kubectl get hpa
# 输出
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
app-hpa Deployment/app 0%/60% 3 20 3 15m
# 查看Pod数量
$ kubectl get pods
# 输出
NAME READY STATUS RESTARTS AGE
app-12345-abcde 1/1 Running 0 15m
app-12345-fghij 1/1 Running 0 15m
app-12345-klmno 1/1 Running 0 15m
# 查看节点数量(等待Cluster Autoscaler缩容)
$ kubectl get nodes
# 输出
NAME STATUS ROLES AGE VERSION
ip-10-0-0-100.us-west-2.compute.internal Ready 1h v1.21.0
ip-10-0-0-101.us-west-2.compute.internal Ready 1h v1.21.0
# 输出结果:
# HPA和Cluster Autoscaler配置成功
# 根据应用负载自动扩容Pod
# 根据集群负载自动扩容节点
# 负载停止后自动缩容Pod和节点
# 服务可用性和资源利用得到优化

Part05-风哥经验总结与分享

5.1 HPA使用技巧

Kubernetes HPA使用的技巧。

  • 合理设置扩缩容范围:根据应用需求设置合适的最小和最大Pod数量,避免过度扩缩容
  • 选择合适的指标:根据应用特性选择合适的指标进行扩缩容,如CPU、内存或自定义指标
  • 配置扩缩容策略:设置合理的扩缩容速度和冷却时间,避免频繁扩缩容
  • 监控扩缩容事件:监控HPA的扩缩容事件,及时发现问题
  • 测试扩缩容效果:定期测试HPA的扩缩容效果,确保其正常工作
  • 设置合理的资源请求:为Pod设置合理的资源请求,确保HPA能够准确计算指标
  • 使用多种指标:结合使用多种指标进行扩缩容,提高扩缩容的准确性
  • 考虑应用启动时间:在设置扩缩容策略时,考虑应用的启动时间,避免过早缩容

5.2 指标使用技巧

Kubernetes HPA指标使用的技巧:

  • 选择准确的指标:选择能够准确反映应用负载情况的指标
  • 合理设置目标值:根据应用特性设置合适的目标值,避免过度或不足扩缩容
  • 优化指标收集:确保指标收集的准确性和及时性,避免延迟
  • 监控指标异常:监控指标的异常情况,及时发现问题
  • 定期校准指标:定期校准指标,确保其准确性
  • 使用自定义指标:对于特殊应用,使用自定义指标进行扩缩容
  • 考虑指标聚合方式:选择合适的指标聚合方式,如平均值、最大值等
  • 设置指标阈值:为指标设置合理的阈值,避免误触发扩缩容

Kubernetes自动扩缩容的未来趋势:

  • HPA增强:Kubernetes将不断增强HPA的功能,支持更多的指标类型和扩缩容策略
  • 智能化扩缩容:使用AI技术实现智能化扩缩容,自动优化扩缩容策略
  • 多维度指标:支持更多维度的指标,如业务指标、用户体验指标等
  • 预测性扩缩容:基于历史数据和趋势分析,实现预测性扩缩容
  • 跨集群扩缩容:支持跨集群的自动扩缩容,实现资源的统一管理和调度
  • 边缘计算支持:自动扩缩容将延伸到边缘节点,支持边缘计算场景
  • 成本优化:结合云服务提供商的定价模型,实现成本优化的自动扩缩容
  • 安全增强:自动扩缩容的安全性将进一步增强,提供更全面的安全保障

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息