18.9. 教程:扩展应用程序
18.9.1. 扩展
您可以使用 Horizontal Pod Autoscaler (HPA)手动或自动扩展 pod。您还可以扩展集群节点。
18.9.1.1. 手动 pod 扩展
您可以使用以下方法之一手动扩展应用程序的 pod:
- 更改 ReplicaSet 或部署定义
- 使用命令行
- 使用 Web 控制台
此研讨会首先仅将一个 pod 用于微服务。通过在部署定义中定义 1
副本,Kubernetes Replication Controller 会努力保持一个 pod 处于活动状态。然后,您将了解如何使用基于负载的 Horizontal Pod Autoscaler(HPA)定义 pod 自动扩展,并在遇到高负载时扩展更多 pod。
前提条件
- 活跃的 ROSA 集群
- 分离 OSToy 应用程序
流程
- 在 OSToy 应用中,点导航菜单中的 Networking 选项卡。
在"Intra-cluster Communication"部分中,找到位于"远程 Pod"下随机更改颜色的框。在框中,您会看到微服务的容器集名称。本例中只有一个框,因为只有一个微服务容器集。
运行以下命令,确认只有一个 pod 为微服务运行:
$ oc get pods
输出示例
NAME READY STATUS RESTARTS AGE ostoy-frontend-679cb85695-5cn7x 1/1 Running 0 1h ostoy-microservice-86b4c6f559-p594d 1/1 Running 0 1h
- 下载 ostoy-microservice-deployment.yaml,并将它保存到本地机器中。
使用以下示例将部署定义改为三个 pod 而不是一个:
spec: selector: matchLabels: app: ostoy-microservice replicas: 3
运行以下命令来应用副本更改:
$ oc apply -f ostoy-microservice-deployment.yaml
注意您还可以通过进入 Workloads > Deployments > ostoy-microservice > YAML 标签页来编辑 OpenShift Web 控制台中的
ostoy-microservice-
deployment.yaml 文件。运行以下命令确认现在有 3 个 pod:
$ oc get pods
输出显示微服务有 3 个 pod,而不是仅有 3 个 pod。
输出示例
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 26m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 81s ostoy-microservice-6666dcf455-5z56w 1/1 Running 0 81s ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 26m
使用 CLI 或通过 Web UI 来扩展应用程序:
在 CLI 中,运行以下命令,将 pod 数量从
3
减少到 2:$ oc scale deployment ostoy-microservice --replicas=2
- 在 OpenShift Web 控制台 UI 的导航菜单中点击 Workloads > Deployments > ostoy-microservice。
- 在页面左侧,找到中间带有"3 Pod"标签的蓝色圆圈。
选择圆圈旁边的箭头会扩展 pod 的数量。选择向下箭头到
2
。
验证
使用 CLI、Web UI 或 OSToy 应用程序检查 pod 数量:
在 CLI 中,通过运行以下命令确认您正在为微服务使用两个 pod:
$ oc get pods
输出示例
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 75m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 50m ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 75m
在 Web UI 中,选择 Workloads > Deployments > ostoy-microservice。
您还可以通过在 OSToy app 的导航菜单中选择 Networking 来确认已使用的两个 pod。这两个 pod 应该有两个带颜色的框。
18.9.1.2. Pod 自动扩展
Red Hat OpenShift Service on AWS 提供了一个 Horizontal Pod Autoscaler (HPA)。HPA 根据需要使用指标来增加或减少 pod 数量。
流程
从 Web UI 的导航菜单中,选择 Pod 自动扩展。
运行以下命令来创建 HPA:
$ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10
此命令创建一个 HPA,维护由 ostoy-microservice 部署控制的 1 到 10 个 pod 副本。Thoughout 部署,HPA 会增加并减少副本数,以保持所有 pod 的平均 CPU 使用量为 80% 和 40 millicore。
在 Pod Auto Scaling > Horizontal Pod Autoscaling 页面上,选择 increased the load。
重要由于增加负载会生成 CPU 密集型计算,页面可能会变得无响应。这是预期的响应。点只 增加一次 Load。有关此过程的更多信息,请参见 微服务的 GitHub 存储库。
几分钟后,新 pod 会显示在由带颜色框表示的页面中。
注意该页面可能会出现滞后。
验证
使用以下方法之一检查您的 pod 数量:
在 OSToy 应用程序的 Web UI 中,请参阅远程 pod 框:
由于只有一个 pod,因此增加工作负载应该会触发增加 pod。
在 CLI 中运行以下命令:
oc get pods --field-selector=status.phase=Running | grep microservice
输出示例
ostoy-microservice-79894f6945-cdmbd 1/1 Running 0 3m14s ostoy-microservice-79894f6945-mgwk7 1/1 Running 0 4h24m ostoy-microservice-79894f6945-q925d 1/1 Running 0 3m14s
您还可以从 OpenShift Cluster Manager 验证自动扩展
- 在 OpenShift Web 控制台导航菜单中点 Observe > Dashboards。
在控制面板中,选择 Kubernetes / Compute Resources / Namespace (Pods) 和命名空间 ostoy。
图会出现显示 CPU 和内存中的资源使用情况。顶部图显示每个 pod 的最新 CPU 消耗,较低图表示内存用量。下面列出了图中的 callout:
- 负载增加(A)。
- 创建了两个新 pod (B 和 C)。
- 每个图的厚性代表 CPU 消耗,并指示哪些 pod 处理更多负载。
负载减少(D),pod 已被删除。
18.9.1.3. 节点自动扩展
Red Hat OpenShift Service on AWS 允许您使用 节点自动扩展。在这种情况下,您将使用具有集群无法处理的大型工作负载的作业创建一个新项目。启用自动扩展后,当负载大于您当前容量时,集群将自动创建新的节点来处理负载。
前提条件
- 机器池上启用了自动扩展。
流程
运行以下命令,创建一个名为
autoscale-ex
的新项目:$ oc new-project autoscale-ex
运行以下命令来创建作业:
$ oc create -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/job-work-queue.yaml
几个 minuts 后,运行以下命令来查看 pod:
$ oc get pods
输出示例
NAME READY STATUS RESTARTS AGE work-queue-5x2nq-24xxn 0/1 Pending 0 10s work-queue-5x2nq-57zpt 0/1 Pending 0 10s work-queue-5x2nq-58bvs 0/1 Pending 0 10s work-queue-5x2nq-6c5tl 1/1 Running 0 10s work-queue-5x2nq-7b84p 0/1 Pending 0 10s work-queue-5x2nq-7hktm 0/1 Pending 0 10s work-queue-5x2nq-7md52 0/1 Pending 0 10s work-queue-5x2nq-7qgmp 0/1 Pending 0 10s work-queue-5x2nq-8279r 0/1 Pending 0 10s work-queue-5x2nq-8rkj2 0/1 Pending 0 10s work-queue-5x2nq-96cdl 0/1 Pending 0 10s work-queue-5x2nq-96tfr 0/1 Pending 0 10s
-
由于有许多 pod 处于
Pending
状态,因此此状态应触发自动扩展在机器池中创建更多节点。允许时间创建这些 worker 节点。 几分钟后,使用以下命令查看您现在有多少 worker 节点:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION ip-10-0-138-106.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-153-68.us-west-2.compute.internal Ready worker 2m12s v1.23.5+3afdacb ip-10-0-165-183.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-176-123.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-195-210.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-196-84.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-203-104.us-west-2.compute.internal Ready worker 2m6s v1.23.5+3afdacb ip-10-0-217-202.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-225-141.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb ip-10-0-231-245.us-west-2.compute.internal Ready worker 2m11s v1.23.5+3afdacb ip-10-0-245-27.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-245-7.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb
您可以看到自动创建 worker 节点来处理工作负载。
输入以下命令返回到 OSToy 应用程序:
$ oc project ostoy