×

扩展

您可以使用水平 Pod 自动扩展器 (HPA) 手动或自动扩展 Pod。您还可以扩展集群节点。

手动 Pod 扩展

您可以使用以下方法之一手动扩展应用程序的 Pod

  • 更改您的 ReplicaSet 或部署定义

  • 使用命令行

  • 使用 Web 控制台

本工作坊首先只为微服务使用一个 Pod。通过在您的部署定义中定义副本数为 1,Kubernetes 副本控制器会努力使一个 Pod 保持活动状态。然后,您将学习如何使用基于负载的水平 Pod 自动扩展器 (HPA) 定义 Pod 自动扩展,如果遇到高负载,它将在您的初始定义之外扩展更多 Pod。

先决条件
  • 一个活动的 ROSA 集群

  • 已部署的 OSToy 应用程序

步骤
  1. 在 OSToy 应用程序中,单击导航菜单中的“**网络**”选项卡。

  2. 在“集群内通信”部分,找到位于“远程 Pod”下方的随机变色方框。在方框内,您会看到微服务的 Pod 名称。在此示例中只有一个方框,因为只有一个微服务 Pod。

    HPA Menu
  3. 通过运行以下命令确认只有一个 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
  4. 下载ostoy-microservice-deployment.yaml并将其保存到您的本地计算机。

  5. 使用以下示例将部署定义更改为三个 Pod 而不是一个 Pod

    spec:
        selector:
          matchLabels:
            app: ostoy-microservice
        replicas: 3
  6. 通过运行以下命令应用副本更改

    $ oc apply -f ostoy-microservice-deployment.yaml

    您也可以通过转到**工作负载 > 部署 > ostoy-microservice > YAML**选项卡,在 OpenShift Web 控制台中编辑ostoy-microservice-deployment.yaml文件。

  7. 通过运行以下命令确认现在有 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
  8. 使用 CLI 或 Web UI 扩展应用程序

    • 在 CLI 中,通过运行以下命令将 Pod 数量从 3 减少到 2

      $ oc scale deployment ostoy-microservice --replicas=2
    • 从 OpenShift Web 控制台 UI 的导航菜单中,单击**工作负载 > 部署 > ostoy-microservice**。

    • 在页面左侧,找到中间带有“3 Pod”标签的蓝色圆圈。

    • 选择圆圈旁边的箭头可以缩放 Pod 的数量。选择向下箭头到 2

      UI Scale
验证

使用 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**。

    Verify the workload pods
  • 您也可以通过在 OSToy 应用程序的导航菜单中选择“**网络**”来确认正在使用两个 Pod。应该有两个彩色方框代表两个 Pod。

    UI Scale

Pod 自动扩展

Red Hat OpenShift Service on AWS 提供了水平 Pod 自动扩展器 (HPA)。HPA 使用指标在必要时增加或减少 Pod 的数量。

步骤
  1. 从 Web UI 的导航菜单中,选择**Pod 自动扩展**。

    HPA Menu
  2. 通过运行以下命令创建 HPA

    $ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10

    此命令创建一个 HPA,它维护 ostoy-microservice 部署控制的 Pod 的 1 到 10 个副本。在整个部署过程中,HPA 会增加和减少副本数量,以保持所有 Pod 的平均 CPU 使用率在 80% 和 40 毫核之间。

  3. 在**Pod 自动扩展 > 水平 Pod 自动扩展**页面上,选择**增加负载**。

    由于增加负载会生成 CPU 密集型计算,因此页面可能会无响应。这是一个预期的响应。仅单击一次“**增加负载**”。有关此过程的更多信息,请参阅微服务的 GitHub 存储库

    几分钟后,页面上将显示由彩色方框表示的新 Pod。

    页面可能会出现延迟。

验证

使用以下方法之一检查您的 Pod 数量

  • 在 OSToy 应用程序的 Web UI 中,查看远程 Pod 方框

    HPA Main

    因为只有一个 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 集群管理器验证自动扩展

    1. 在 OpenShift Web 控制台导航菜单中,单击**观察 > 仪表板**。

    2. 在仪表板中,选择**Kubernetes / 计算资源 / 命名空间 (Pod)**和您的命名空间**ostoy**。

      Select metrics
    3. 将显示一个图表,显示您在 CPU 和内存上的资源使用情况。顶部图表显示每个 Pod 的最近 CPU 使用情况,底部图表显示内存使用情况。以下是图表中的标注列表

      1. 负载增加 (A)。

      2. 创建了两个新的 Pod(B 和 C)。

      3. 每个图形的厚度代表 CPU 消耗,并指示哪些 Pod 处理了更多负载。

      4. 负载降低(D),并且 Pod 被删除。

        Select metrics

节点自动伸缩

AWS 上的 Red Hat OpenShift 服务允许您使用节点自动伸缩。在本场景中,您将创建一个新的项目,其中包含一个工作负载很大的作业,集群无法处理。启用自动伸缩后,当负载大于当前容量时,集群将自动创建新的节点来处理负载。

先决条件
  • 您的机器池已启用自动伸缩。

步骤
  1. 运行以下命令创建一个名为 autoscale-ex 的新项目

    $ oc new-project autoscale-ex
  2. 运行以下命令创建作业

    $ oc create -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/job-work-queue.yaml
  3. 几分钟后,运行以下命令查看 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
  4. 由于许多 Pod 处于 Pending 状态,此状态应触发自动伸缩器在您的机器池中创建更多节点。请留出时间创建这些工作节点。

  5. 几分钟后,使用以下命令查看您现在有多少个工作节点

    $ 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

    您可以看到已自动创建工作节点来处理工作负载。

  6. 输入以下命令返回 OSToy 应用程序

    $ oc project ostoy