您可以使用水平 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