本页面介绍如何扩缩在 Google Kubernetes Engine (GKE) 中部署的应用。
概览
在 GKE 中部署应用时,您可以定义想要运行的应用的副本数。您可以通过增加或减少副本数来扩缩应用。
应用的每个副本代表一个 Kubernetes Pod,用于封装应用的容器。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
检查应用
在扩缩您的应用之前,建议先对应用进行检查并确保其运行状况良好。
如需查看已部署到集群的所有应用,请运行以下命令:
kubectl get CONTROLLER
将 CONTROLLER
替换为 deployments
、statefulsets
或其他控制器对象类型。
例如,如果运行 kubectl get deployments
并且只创建了一个 Deployment,那么命令的输出应如下所示:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 1 1 1 1 10m
对于所有对象,此命令的输出都是类似的,但显示方式可能会略有不同。对于 Deployment,输出将包含六列:
NAME
用于列出集群中各 Deployment 的名称。DESIRED
用于显示您在创建 Deployment 时为应用定义的所需副本数或状态。CURRENT
用于显示当前正在运行的副本数。UP-TO-DATE
用于显示为实现所需状态而更新的副本数。AVAILABLE
用于显示您的用户可以使用的应用副本数。AGE
用于显示应用已在集群中运行的时间量。
在此示例中,只有一个 Deployment (my-app
),并且该部署只有一个副本,因为所需状态是一个副本。您可以在创建时定义所需状态,并且可以随时通过扩缩应用来更改此状态。
检查 StatefulSet
在扩缩 StatefulSet 之前,您应该通过运行以下命令对其进行检查:
kubectl describe statefulset my-app
在此命令的输出中,检查 Pods Status 字段。如果 Failed
值大于 0
,则扩缩操作可能会失败。
如果 StatefulSet 看似运行状况不佳,请执行以下操作:
获取 Pod 列表,看看哪些 Pod 运行状况不佳:
kubectl get pods
移除运行状况不佳的 Pod:
kubectl delete POD_NAME
如果尝试对运行状况不佳的 StatefulSet 进行扩缩,可能会导致该资源变为不可用。
扩缩应用
以下部分介绍您可以采用的各种应用扩缩方法。kubectl scale
是最快的扩缩方法。但在某些情况下,您可能需要使用其他方法,例如,在更新配置文件或执行就地修改时。
kubectl scale
借助 kubectl scale
命令,您可以立即更改要运行应用的副本数量。
如需使用 kubectl scale
,请设置 --replicas
标志以指定新的副本数。例如,如需将 my-app
扩容到四个副本,请运行以下命令,将 CONTROLLER
替换为 deployment
、statefulset
或其他控制器对象类型:
kubectl scale CONTROLLER my-app --replicas 4
如果此命令成功执行,其输出应类似于 deployment
"my-app" scaled
。
然后运行:
kubectl get CONTROLLER my-app
输出应类似如下所示:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 4 4 4 4 15m
kubectl apply
您可以使用 kubectl apply
将新配置文件应用到现有控制器对象。kubectl
apply
有助于对资源进行多项更改,并且有助于用户在配置文件中管理其资源。
要使用 kubectl apply
实现扩缩,所提供配置文件应在对象规范的 replicas
字段中添加新的副本数。
以下是示例 my-app
对象的配置文件的更新版本。该示例显示了一个 Deployment,因此,如果您使用其他类型的控制器(例如 StatefulSet),请相应地更改 kind
。此示例最适用于至少具有三个节点的集群。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: my-container
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
在此文件中,replicas
字段的值为 3
。应用此配置文件时,对象 my-app
会扩展到三个副本。
要应用更新的配置文件,请运行以下命令:
kubectl apply -f config.yaml
然后运行:
kubectl get CONTROLLER my-app
输出应类似如下所示:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 3 3 3 3 15m
控制台
如需在 Google Cloud 控制台中扩缩工作负载,请按以下步骤操作:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,点击要扩缩的工作负载的名称。
点击 list 操作 > 扩缩 > 修改副本。
输入工作负载的新副本数量。
点击调节。
自动扩缩 Deployment
使用 kubectl
autoscale
或 Google Cloud 控制台中的 GKE“工作负载”菜单,您可以根据 Pod 的 CPU 利用率自动扩缩 Deployment。
kubectl autoscale
kubectl autoscale
会创建一个 HorizontalPodAutoscaler
(或 HPA)对象,该对象以指定资源为目标(称为扩缩目标)并根据需要进行扩缩。HPA 会定期调整扩缩目标的副本数,以匹配您指定的平均 CPU 利用率。
使用 kubectl autoscale
时,您可以为应用指定最大和最小副本数,以及 CPU 利用率目标。例如,要将最大副本数设置为 6,将最小副本数设置为 4,并将 CPU 利用率目标设置为 50%,请运行以下命令:
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
在此命令中,必须使用 --max
标志。--cpu-percent
标志是所有 Pod 的目标 CPU 利用率。除非系统要求,否则此命令不会立即将 Deployment 扩展到六个副本。
运行 kubectl autoscale
之后,系统将创建 HorizontalPodAutoscaler
对象并将应用设为目标。当负载发生变化时,该对象会增加或减少应用的副本。
如需获取集群中 HorizontalPodAutoscaler
对象的列表,请运行以下命令:
kubectl get hpa
要查看集群中的特定 HorizontalPodAutoscaler
对象,请运行以下命令:
kubectl get hpa HPA_NAME
将 HPA_NAME
替换为您的 HorizontalPodAutoscaler
对象的名称。
要查看 HorizontalPodAutoscaler
配置,请运行以下命令:
kubectl get hpa HPA_NAME -o yaml
此命令的输出类似如下所示:
apiVersion: v1
items:
- apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: ...
name: HPA_NAME
namespace: default
resourceVersion: "664"
selfLink: ...
uid: ...
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: HPA_NAME
targetCPUUtilizationPercentage: 50
status:
currentReplicas: 0
desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""
在此示例输出中,targetCPUUtilizationPercentage
字段包含从 kubectl autoscale
示例传入的 50
百分比值。
要查看集群中特定 HorizontalPodAutoscaler
对象的详细说明,请运行以下命令:
kubectl describe hpa HPA_NAME
您可以通过使用 kubectl apply
应用新配置文件、使用 kubectl edit
或 kubectl patch
修改 HorizontalPodAutoscaler
。
如需删除 HorizontalPodAutoscaler
对象,请执行以下操作:
kubectl delete hpa HPA_NAME
控制台
如需自动扩缩 Deployment,请按以下步骤操作:
转到 Google Cloud 控制台中的工作负载页面。
在工作负载列表中,点击要自动扩缩的 Deployment 的名称。
点击 list 操作 > 自动扩缩。
输入 Deployment 的最大副本数以及可选的最小副本数。
在自动扩缩指标下,根据需要选择并配置指标。
点击自动调节。
使用自定义指标进行自动扩缩
您可以根据从 Cloud Monitoring 导出的自定义指标扩缩您的 Deployment。
如需了解如何使用自定义指标自动扩缩 Deployment,请参阅使用自定义指标自动扩缩 Deployment 教程。