您可以使用水平 Pod 自动扩展器 (HPA) 手动或自动扩展 Pod。您还可以扩展集群节点。
您可以使用以下方法之一手动扩展应用程序的 Pod
更改您的 ReplicaSet 或部署定义
使用命令行
使用 Web 控制台
本工作坊首先只为微服务使用一个 Pod。通过在您的部署定义中定义副本数为 1
,Kubernetes 副本控制器会努力使一个 Pod 保持活动状态。然后,您将学习如何使用基于负载的水平 Pod 自动扩展器 (HPA) 定义 Pod 自动扩展,如果遇到高负载,它将在您的初始定义之外扩展更多 Pod。
一个活动的 ROSA 集群
已部署的 OSToy 应用程序
在 OSToy 应用程序中,单击导航菜单中的“**网络**”选项卡。
在“集群内通信”部分,找到位于“远程 Pod”下方的随机变色方框。在方框内,您会看到微服务的 Pod 名称。在此示例中只有一个方框,因为只有一个微服务 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 而不是一个 Pod
spec:
selector:
matchLabels:
app: ostoy-microservice
replicas: 3
通过运行以下命令应用副本更改
$ oc apply -f ostoy-microservice-deployment.yaml
您也可以通过转到**工作负载 > 部署 > ostoy-microservice > YAML**选项卡,在 OpenShift Web 控制台中编辑 |
通过运行以下命令确认现在有 3 个 Pod
$ oc get pods
输出显示现在微服务有 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 的导航菜单中,单击**工作负载 > 部署 > 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 中,选择**工作负载 > 部署 > ostoy-microservice**。
您也可以通过在 OSToy 应用程序的导航菜单中选择“**网络**”来确认正在使用两个 Pod。应该有两个彩色方框代表两个 Pod。
Red Hat OpenShift Service on AWS 提供了水平 Pod 自动扩展器 (HPA)。HPA 使用指标在必要时增加或减少 Pod 的数量。
从 Web UI 的导航菜单中,选择**Pod 自动扩展**。
通过运行以下命令创建 HPA
$ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10
此命令创建一个 HPA,它维护 ostoy-microservice 部署控制的 Pod 的 1 到 10 个副本。在整个部署过程中,HPA 会增加和减少副本数量,以保持所有 Pod 的平均 CPU 使用率在 80% 和 40 毫核之间。
在**Pod 自动扩展 > 水平 Pod 自动扩展**页面上,选择**增加负载**。
由于增加负载会生成 CPU 密集型计算,因此页面可能会无响应。这是一个预期的响应。仅单击一次“**增加负载**”。有关此过程的更多信息,请参阅微服务的 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 集群管理器验证自动扩展
在 OpenShift Web 控制台导航菜单中,单击**观察 > 仪表板**。
在仪表板中,选择**Kubernetes / 计算资源 / 命名空间 (Pod)**和您的命名空间**ostoy**。
将显示一个图表,显示您在 CPU 和内存上的资源使用情况。顶部图表显示每个 Pod 的最近 CPU 使用情况,底部图表显示内存使用情况。以下是图表中的标注列表
负载增加 (A)。
创建了两个新的 Pod(B 和 C)。
每个图形的厚度代表 CPU 消耗,并指示哪些 Pod 处理了更多负载。
负载降低(D),并且 Pod 被删除。
AWS 上的 Red Hat OpenShift 服务允许您使用节点自动伸缩。在本场景中,您将创建一个新的项目,其中包含一个工作负载很大的作业,集群无法处理。启用自动伸缩后,当负载大于当前容量时,集群将自动创建新的节点来处理负载。
您的机器池已启用自动伸缩。
运行以下命令创建一个名为 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
几分钟后,运行以下命令查看 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
状态,此状态应触发自动伸缩器在您的机器池中创建更多节点。请留出时间创建这些工作节点。
几分钟后,使用以下命令查看您现在有多少个工作节点
$ 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
您可以看到已自动创建工作节点来处理工作负载。
输入以下命令返回 OSToy 应用程序
$ oc project ostoy