Kubernetes 中如何创建 Horizontal Pod Autoscaler

在 Kubernetes 中,Horizontal Pod Autoscaler(HPA)是一种非常有用的机制,它可以根据 CPU 使用率、内存使用率等指标自动调整 Pod 的数量,以实现应用的自动扩缩容。本篇文章将介绍如何在 Kubernetes 中创建 Horizontal Pod Autoscaler。

前置条件

在创建 Horizontal Pod Autoscaler 之前,需要先满足以下条件:

  • Kubernetes 集群已经搭建好,并且可以正常工作。
  • 应用已经部署到 Kubernetes 集群中,并且可以正常运行。
  • 应用的 Deployment 已经创建完成。

创建 Horizontal Pod Autoscaler

在 Kubernetes 中创建 Horizontal Pod Autoscaler,需要使用 kubectl autoscale 命令,具体的命令格式如下:

kubectl autoscale deployment <deployment-name> --cpu-percent=<cpu-percent> --min=<min-pods> --max=<max-pods>

其中,<deployment-name> 是要创建 Horizontal Pod Autoscaler 的 Deployment 的名称,<cpu-percent> 是 CPU 使用率的百分比,<min-pods> 是最小 Pod 数量,<max-pods> 是最大 Pod 数量。

例如,如果要为名为 nginx 的 Deployment 创建一个 Horizontal Pod Autoscaler,CPU 使用率为 50%,最小 Pod 数量为 2,最大 Pod 数量为 5,可以使用以下命令:

kubectl autoscale deployment nginx --cpu-percent=50 --min=2 --max=5

创建完成之后,可以使用 kubectl get hpa 命令查看创建的 Horizontal Pod Autoscaler。

示例代码

下面是一个完整的示例,演示如何使用 Kubernetes 创建一个带有 Horizontal Pod Autoscaler 的 nginx 应用。

创建 Deployment

首先,需要创建一个 Deployment,用于部署 nginx 应用。创建 Deployment 的 YAML 文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.21.1-alpine
          ports:
            - containerPort: 80

使用以下命令创建 Deployment:

kubectl apply -f nginx-deployment.yaml

创建 Service

创建 Service 的 YAML 文件如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

使用以下命令创建 Service:

kubectl apply -f nginx-service.yaml

创建 Horizontal Pod Autoscaler

创建 Horizontal Pod Autoscaler 的 YAML 文件如下:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 2
  maxReplicas: 5
  targetCPUUtilizationPercentage: 50

使用以下命令创建 Horizontal Pod Autoscaler:

kubectl apply -f nginx-hpa.yaml

测试

可以使用以下命令查看创建的 nginx 应用的 Pod:

kubectl get pods -l app=nginx

然后,使用以下命令访问 nginx 应用:

kubectl port-forward svc/nginx 8080:80

打开浏览器,访问 http://localhost:8080,可以看到 nginx 的欢迎页面。

接下来,使用以下命令模拟 CPU 使用率增加:

kubectl run -i --tty load-generator --image=busybox /bin/sh
while true; do wget -q -O- http://nginx; done

这个命令会创建一个 Pod,模拟 CPU 使用率增加。可以使用以下命令查看创建的 Pod:

kubectl get pods -l run=load-generator

然后,可以使用以下命令查看 Horizontal Pod Autoscaler 是否自动调整了 Pod 的数量:

kubectl get hpa

可以看到,Pod 的数量已经从 3 个增加到了 5 个。

总结

本篇文章介绍了在 Kubernetes 中创建 Horizontal Pod Autoscaler 的方法,并提供了一个完整的示例。希望这篇文章能够帮助读者更好地理解和使用 Kubernetes。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c4a24dadd4f0e0fff3090b