update at 2024-04-24 11:13:08

pull/158/head
roc 2024-04-24 11:13:08 +08:00
parent 233a46b364
commit a463ec4e6a
1 changed files with 16 additions and 18 deletions

View File

@ -38,8 +38,9 @@ HPA 在进行扩缩容时,先是由固定的算法计算出期望副本数:
这次更新实际就是在 HPA Spec 下新增了一个 `behavior` 字段,下面有 `scaleUp``scaleDown` 两个字段分别控制扩容和缩容的行为,具体可参考 [官方 API 文档](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#hpascalingrules-v2beta2-autoscaling)。 这次更新实际就是在 HPA Spec 下新增了一个 `behavior` 字段,下面有 `scaleUp``scaleDown` 两个字段分别控制扩容和缩容的行为,具体可参考 [官方 API 文档](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#hpascalingrules-v2beta2-autoscaling)。
使用示例: 使用示例:
```yaml
apiVersion: autoscaling/v2beta2 ```yaml showLineNumbers
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler kind: HorizontalPodAutoscaler
metadata: metadata:
name: web name: web
@ -47,17 +48,17 @@ spec:
minReplicas: 1 minReplicas: 1
maxReplicas: 1000 maxReplicas: 1000
metrics: metrics:
- pods: - resource:
metric: name: cpu
name: k8s_pod_rate_cpu_core_used_limit
target: target:
averageValue: "80" type: Utilization
type: AverageValue averageUtilization: 60
type: Pods type: Resource
scaleTargetRef: scaleTargetRef:
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
name: web name: web
# highlight-start
behavior: # 这里是重点 behavior: # 这里是重点
scaleDown: scaleDown:
stabilizationWindowSeconds: 300 # 需要缩容时,先观察 5 分钟,如果一直持续需要缩容才执行缩容 stabilizationWindowSeconds: 300 # 需要缩容时,先观察 5 分钟,如果一直持续需要缩容才执行缩容
@ -66,7 +67,7 @@ spec:
value: 100 # 允许全部缩掉 value: 100 # 允许全部缩掉
periodSeconds: 15 periodSeconds: 15
scaleUp: scaleUp:
stabilizationWindowSeconds: 0 # 需要扩容时,立即扩容 stabilizationWindowSeconds: 0 # 需要扩容时,立即扩容(默认就是 0
policies: policies:
- type: Percent - type: Percent
value: 100 value: 100
@ -75,6 +76,7 @@ spec:
value: 4 value: 4
periodSeconds: 15 # 每 15s 最大允许扩容 4 个 Pod periodSeconds: 15 # 每 15s 最大允许扩容 4 个 Pod
selectPolicy: Max # 使用以上两种扩容策略中算出来扩容 Pod 数量最大的 selectPolicy: Max # 使用以上两种扩容策略中算出来扩容 Pod 数量最大的
# highlight-end
``` ```
* 以上 `behavior` 配置是默认的,即如果不配置,会默认加上。 * 以上 `behavior` 配置是默认的,即如果不配置,会默认加上。
@ -83,7 +85,6 @@ spec:
* `stabilizationWindowSeconds` 是稳定窗口时长即需要指标高于或低于阈值并持续这个窗口的时长才会真正执行扩缩以防止抖动导致频繁扩缩容。扩容时稳定窗口默认为0即立即扩容缩容时稳定窗口默认为5分钟。 * `stabilizationWindowSeconds` 是稳定窗口时长即需要指标高于或低于阈值并持续这个窗口的时长才会真正执行扩缩以防止抖动导致频繁扩缩容。扩容时稳定窗口默认为0即立即扩容缩容时稳定窗口默认为5分钟。
* `policies` 中定义扩容或缩容策略,`type` 的值可以是 `Pods``Percent`,表示每 `periodSeconds` 时间范围内,允许扩缩容的最大副本数或比例。 * `policies` 中定义扩容或缩容策略,`type` 的值可以是 `Pods``Percent`,表示每 `periodSeconds` 时间范围内,允许扩缩容的最大副本数或比例。
## 场景与示例 ## 场景与示例
下面给出一些使用场景的示例。 下面给出一些使用场景的示例。
@ -213,21 +214,18 @@ kubectl api-versions | grep autoscaling
autoscaling/v1 autoscaling/v1
autoscaling/v2beta1 autoscaling/v2beta1
autoscaling/v2beta2 autoscaling/v2beta2
autoscaling/v2
``` ```
以任意一种版本创建,都可以以任意版本获取(自动转换)。 以任意一种版本创建,都可以以任意版本获取(自动转换)。
如果是用 kubectl 获取kubectl 在进行 API discovery 时,会缓存 apiserver 返回的各种资源与版本信息,有些资源存在多个版本,在 get 时如果不指定版本,会使用默认版本获取,对于 HPA默认是 v1 如果是用 kubectl 获取kubectl 在进行 API discovery 时,会缓存 apiserver 返回的各种资源与版本信息,有些资源存在多个版本,在 get 时如果不指定版本,会使用默认版本获取。
如果是通过一些平台的界面获取,取决于平台的实现方式,比如腾讯云容器服务控制台,默认用 v2beta1 版本展示: 如何指定 API 版本进行获取或编辑?指定包含版本信息的完整资源名即可:
![](https://image-host-1251893006.cos.ap-chengdu.myqcloud.com/20220728152913.png)
如何使用 v2beta2 版本获取或编辑?指定包含版本信息的完整资源名即可:
```bash ```bash
kubectl get horizontalpodautoscaler.v2beta2.autoscaling php-apache -o yaml kubectl get horizontalpodautoscaler.v2.autoscaling php-apache -o yaml
# kubectl edit horizontalpodautoscaler.v2beta2.autoscaling php-apache # kubectl edit horizontalpodautoscaler.v2.autoscaling php-apache
``` ```
### 配置快速扩容,为什么快不起来? ### 配置快速扩容,为什么快不起来?