运行应用程序的多个实例

使用 kubectl 手动扩展现有应用程序。

目标

  • 使用 kubectl 扩展应用程序。

扩展应用程序

之前我们创建了一个 部署,然后通过 服务 将其公开暴露。部署仅为运行我们的应用程序创建了一个 Pod。当流量增加时,我们需要扩展应用程序以跟上用户需求。

如果您没有完成前面的部分,请从 使用 minikube 创建集群 开始。

扩展 是通过更改部署中的副本数量来实现的


摘要

  • 扩展部署

您可以从一开始就使用 kubectl create deployment 命令的 --replicas 参数创建具有多个实例的部署

kubectl expose deployment/kubernetes-bootcamp --type="LoadBalancer" --port 8080


扩展部署将确保创建新的 Pod 并将其调度到具有可用资源的节点。扩展将增加 Pod 的数量,使其达到新的预期状态。Kubernetes 还支持 Pod 自动扩展,但这超出了本教程的范围。扩展到零也是可能的,它将终止指定部署的所有 Pod。

运行应用程序的多个实例将需要一种方法来将流量分配给所有实例。服务具有集成的负载均衡器,它将网络流量分配给暴露的部署的所有 Pod。服务将使用端点持续监控正在运行的 Pod,以确保流量仅发送到可用的 Pod。

扩展是通过更改部署中的副本数量来实现的。


一旦您运行了应用程序的多个实例,您就可以在不停止服务的情况下进行滚动更新。我们将在本教程的下一节中介绍这一点。现在,让我们进入终端并扩展我们的应用程序。

扩展部署

要列出您的部署,请使用 get deployments 子命令

kubectl get deployments

输出应类似于

NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           11m

我们应该有 1 个 Pod。如果没有,请再次运行该命令。这显示了

  • NAME 列出了集群中部署的名称。
  • READY 显示了 CURRENT/DESIRED 副本的比率
  • UP-TO-DATE 显示已更新以实现预期状态的副本数量。
  • AVAILABLE 显示应用程序有多少个副本可供用户使用。
  • AGE 显示应用程序运行的时间。

要查看部署创建的副本集,请运行

kubectl get rs

请注意,副本集的名称始终格式化为[DEPLOYMENT-NAME]-[RANDOM-STRING]。随机字符串是随机生成的,并使用pod-template-hash 作为种子。

此输出的两个重要列是

  • DESIRED 显示应用程序的预期副本数量,您在创建部署时定义此数量。这是预期状态。
  • CURRENT 显示当前正在运行的副本数量。

接下来,让我们将部署扩展到 4 个副本。我们将使用 kubectl scale 命令,后跟部署类型、名称和预期实例数量

kubectl scale deployments/kubernetes-bootcamp --replicas=4

要再次列出您的部署,请使用 get deployments

kubectl get deployments

更改已应用,我们有 4 个应用程序实例可用。接下来,让我们检查 Pod 的数量是否发生了变化

kubectl get pods -o wide

现在有 4 个 Pod,具有不同的 IP 地址。更改已在部署事件日志中注册。要检查这一点,请使用 describe 子命令

kubectl describe deployments/kubernetes-bootcamp

您还可以在此命令的输出中看到现在有 4 个副本。

负载均衡

让我们检查一下服务是否正在负载均衡流量。要找出暴露的 IP 和端口,我们可以使用 describe service,正如我们在本教程的前面部分中学到的那样

kubectl describe services/kubernetes-bootcamp

创建一个名为NODE_PORT的环境变量,其值为节点端口

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"

echo NODE_PORT=$NODE_PORT

接下来,我们将对暴露的 IP 地址和端口执行 curl。多次执行该命令

curl http://"$(minikube ip):$NODE_PORT"

我们每次请求都会命中不同的 Pod。这表明负载均衡正在起作用。

缩减规模

要将部署缩减到 2 个副本,请再次运行 scale 子命令

kubectl scale deployments/kubernetes-bootcamp --replicas=2

使用 get deployments 子命令列出部署以检查更改是否已应用

kubectl get deployments

副本数量已减少到 2 个。使用 get pods 列出 Pod 的数量

kubectl get pods -o wide

这确认了 2 个 Pod 已终止。

准备就绪后,请继续 执行滚动更新

上次修改时间:2024 年 5 月 24 日凌晨 1:08 PST:修复有关教程中服务创建的指南 (465af1f284)