3.4. 配置自动扩展
了解 Red Hat OpenShift Dev Spaces 自动扩展的不同方面。
3.4.1. 为 Red Hat OpenShift Dev Spaces 容器配置副本数
要使用 Kubernetes HorizontalPodAutoscaler
(HPA)为 OpenShift Dev Spaces 操作对象配置副本数,您可以为部署定义 HPA
资源。HPA
根据指定指标动态调整副本数量。
流程
为部署创建
HPA
资源,指定目标指标和所需的副本数。apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: scaler namespace: openshift-devspaces spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <deployment_name> 1 ...
- 1
- &
lt;deployment_name
> 对应于以下部署:-
devspaces
-
che-gateway
-
devspaces-dashboard
-
plugin-registry
-
devfile-registry
-
例 3.14. 为 devspaces 部署创建一个 HorizontalPodAutoscaler
:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: devspaces-scaler namespace: openshift-devspaces spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: devspaces minReplicas: 2 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 75
在本例中,HPA 以名为 devspaces 的 Deployment 为目标,至少为 2 个副本,最多 5 个副本并根据 CPU 使用率进行扩展。
其他资源
3.4.2. 配置机器自动扩展
如果您将集群配置为根据资源需求调整节点数量,则需要额外的配置来维护 OpenShift Dev Spaces 工作区的无缝操作。
当自动扩展添加或删除节点时,工作区需要特殊考虑。
当自动扩展添加新节点时,工作空间启动所需的时间可能比通常要长,直到节点置备完成为止。
相反,当节点被删除时,运行工作区 pod 的节点不应被自动扩展驱除,以避免在使用工作区时造成中断,并可能会丢失任何未保存的数据。
3.4.2.1. 当自动扩展添加新节点时
您需要对 OpenShift Dev Spaces 安装进行额外的配置,以确保在添加新节点时正确工作空间启动。
流程
在 CheCluster 自定义资源中,将
spec.devEnvironments.startTimeoutSeconds
字段设置为至少 600 秒,以便在工作空间启动过程中需要置备新节点的时间。spec: devEnvironments: startTimeoutSeconds: 600
在 openshift-devspaces 命名空间中的 DevWorkspaceOperatorConfig 自定义资源中,将
FailedScheduling
事件添加到config.workpsace.ignoredUnrecoverableEvents
字段中。如果没有足够的节点可用,则工作区启动不会失败。置备新节点时,这允许工作空间启动继续进行。config: workspace: ignoredUnrecoverableEvents: - FailedScheduling
3.4.2.2. 当自动扩展删除节点时
要防止工作区 pod 在自动扩展需要删除节点时被驱除,请将 "cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
注解添加到每个工作区 pod。
流程
在 CheCluster 自定义资源中,在
spec.devEnvironments.workspacesPodAnnotations
字段中添加cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
注解。spec: devEnvironments: workspacesPodAnnotations: cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
验证步骤
启动工作区,并验证工作区 pod 是否包含
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
注解。$ oc get pod <workspace_pod_name> -o jsonpath='{.metadata.annotations.cluster-autoscaler\.kubernetes\.io/safe-to-evict}' false