运行应用的多个实例

目标

  • 使用 kubectl 手动扩缩现有应用。

扩缩应用

之前我们创建了一个 Deployment,然后通过一个 Service 公开暴露它。该 Deployment 只创建了一个 Pod 来运行我们的应用。当流量增加时,我们需要扩缩应用以满足用户需求。

如果你还没有完成前面的章节,请从 使用 minikube 创建集群 开始。

通过改变 Deployment 中的副本数量来实现扩缩

扩缩概述

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

运行应用的多个实例需要一种方式来将流量分配到所有实例。Service 集成了负载均衡器,可以将网络流量分配到暴露的 Deployment 的所有 Pod。Service 会使用端点持续监控正在运行的 Pod,以确保流量只发送到可用的 Pod。

一旦你的应用运行了多个实例,就可以进行无停机时间的滚动更新。我们将在本教程的下一节介绍这一点。现在,让我们进入终端并扩缩我们的应用。

扩缩 Deployment

要列出你的 Deployment,请使用 get deployments 子命令

kubectl get deployments

输出应类似于

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

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

  • NAME 列出了集群中 Deployment 的名称。
  • READY 显示 CURRENT/DESIRED 副本的数量比
  • UP-TO-DATE 显示已更新到期望状态的副本数量。
  • AVAILABLE 显示有多少应用副本对用户可用。
  • AGE 显示应用运行的时间。

要查看 Deployment 创建的 ReplicaSet,请运行

kubectl get rs

请注意,ReplicaSet 的名称总是采用以下格式[DEPLOYMENT-NAME]-[随机字符串]。随机字符串是随机生成的,使用 pod-template-hash 作为种子。

此输出中的两个重要列是

  • DESIRED 显示应用副本的期望数量,这是你在创建 Deployment 时定义的。这是期望状态。
  • CURRENT 显示当前正在运行的副本数量。接下来,让我们将 Deployment 扩缩到 4 个副本。我们将使用 kubectl scale 命令,后跟 Deployment 类型、名称和期望的实例数量
kubectl scale deployments/kubernetes-bootcamp --replicas=4

要再次列出你的 Deployment,请使用 get deployments

kubectl get deployments

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

kubectl get pods -o wide

现在有 4 个 Pod,具有不同的 IP 地址。变更已记录在 Deployment 事件日志中。要检查此信息,请使用 describe 子命令

kubectl describe deployments/kubernetes-bootcamp

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

负载均衡

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

kubectl describe services/kubernetes-bootcamp

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

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。这表明负载均衡正在工作。

输出应类似于

Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-hs9dj | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-wp67j | v=1
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-644c5687f4-4hjvf | v=1

缩容

要将 Deployment 缩容到 2 个副本,请再次运行 scale 子命令

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

使用 get deployments 子命令列出 Deployment,以检查变更是否已应用

kubectl get deployments

副本数量减少到 2。使用 get pods 命令列出 Pod 数量

kubectl get pods -o wide

这证实有 2 个 Pod 被终止。

下一步

最后修改于太平洋标准时间 2024 年 11 月 18 日下午 8:50:添加图片 css 和警报框 (b9ee7dbcba)