kubectl autoscale 和 kubectl scale 有什么区别

lin*_*ran 1 kubernetes kubectl

我是 kubernetes 的新手,并试图了解何时使用 kubectl autoscale 和 kubectl scale 命令

Pjo*_*erS 6

部署规模表明应该始终运行多少个 Pod 以确保应用程序正常工作。您必须手动指定它。在 YAML 中,您必须spec.replicas像下面的示例一样定义它:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

指定部署规模(副本)的第二种方法是使用命令。

$ kubectl run nginx --image=nginx --replicas=3
deployment.apps/nginx created

$ kubectl get deployment
NAME    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx   3         3         3            3           11s
Run Code Online (Sandbox Code Playgroud)

这意味着部署将有 3 个 pod 运行,Kubernetes 将始终尝试保持此数量的 pod(如果任何 pod 崩溃,K8s 将重新创建它)。您可以随时使用 inspec.replicas和 usekubectl apply -f <name-of-deployment>或通过命令更改它

$ kubectl scale deployment nginx --replicas=10
deployment.extensions/nginx scaled

$ kubectl get deployment
NAME    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx   10        10        10           10          4m48s
Run Code Online (Sandbox Code Playgroud)

请阅读有关扩展和副本集的文档

水平 Pod 自动缩放 (HPA) 的发明是为了根据Pod产生的指标来扩展部署。例如,如果您的应用程序每分钟大约有 300 个 HTTP 请求,并且每个 pod 允许每分钟 100 个 HTTP 请求,那就没问题了。但是,如果您将收到大量的 HTTP 请求 ~ 1000,则 3 个 pod 是不够的,并且 70% 的请求将失败。当您使用 时HPA,部署将自动扩展以运行 10 个 pod 来处理所有请求。一段时间后,当请求数量下降到 500/分钟时,它将缩减为 5 个 pod。稍后取决于请求数量,它可能上升或下降取决于您的 HPA 配置。

应用自动缩放的最简单方法是:

$ kubectl autoscale deployment <your-deployment> --<metrics>=value --min=3 --max=10
Run Code Online (Sandbox Code Playgroud)

这意味着 autoscale 将根据指标自动扩展到最多 10 个 pod,然后它将最小缩减到 3 个。HPA 文档中显示了一个很好的示例,其中包含 CPU 使用率。

请记住,Kubernetes 可以使用多种基于 API 的指标(HTTP/HTTP 请求、CPU/内存负载、线程数等)。

希望它可以帮助您了解 Scale 和 Autoscaling 之间的区别。