
# 滚动升级时临时允许本地Pod超过设定最大值
在执行滚动升级时，为了保证业务平滑运行，系统会在特定阶段临时允许节点上运行的Pod数超过原本设定的最大数量。该超量状态仅在升级期间生效，升级完成后系统会自动恢复到用户设定的副本数与调度策略，不会长期影响资源使用。
#### 约束与限制
使用该能力前，请确保满足以下条件：
- 使用了SchedulingProfile的localPrefer策略，并设置了本地最大实例数（local: maxNum）。
- 本地集群预留资源充足，能够承载滚动升级过程中临时增加的Pod，否则临时增加的Pod可能会被调度到CCI。
 
#### 流程原理
![](https://support.huaweicloud.com/usermanual-cci2/zh-cn_image_0000002514774683.png)
在滚动升级过程中，由于maxSurge的设置，新旧版本Pod将同时存在，导致Pod数量短暂大于replicas。在此期间：
1. ScheduleProfile关联的总Pod数会短暂超过本地最大实例数（local: maxNum）。
2. 为保证调度一致，多出的Pod不会调度到CCI，而是继续留在本地。
3. 通过本地保留超量Pod，保证滚动升级前后Pod 在本地和CCI的分布一致。
4. 滚动升级完成后，随着旧版本Pod的清理，本地Pod数量恢复至正常值，不再超过本地最大实例数（local: maxNum）。
 
#### 操作步骤
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 选择CCE集群，单击进入CCE集群总览页面。
3. 在导航栏左侧单击"插件中心"，进入插件中心首页。
4. 单击"CCE 突发弹性引擎 (对接 CCI)"旁边的"编辑"。
5. 单击左上角的"编辑YAML"。
6. 将"enableScheduleProfileLocalSurge"的值设置为"true"，然后单击"确定"。
   ```
   enableScheduleProfileLocalSurge:true
   ```
   
 
#### 示例
- ScheduleProfile.yaml
  ```
  apiVersion: scheduling.cci.io/v2
  kind: ScheduleProfile
  metadata:
    name: test-local-profile
    namespace: test
  spec:
    objectLabels:
      matchLabels:
        app: whd-test
    strategy: localPrefer
    virtualNodes:
      - type: bursting-node
    location:
      local: 
        maxNum: 10 # 当前暂不支持local/cci同时配置maxNum
        scaleDownPriority: 2
      cci: 
        scaleDownPriority: 10
  ```
  
- Deployment yaml（滚动升级策略）
  ```
  apiVersion: apps/v1      # 注意这里与Pod的区别，Deployment是apps/v1而不是v1
  kind: Deployment         # 资源类型为Deployment
  metadata:
    name: deploy-test      # Deployment的名称
    namespace: test
  spec:
    replicas: 10            # Pod的数量，Deployment会确保一直有10个Pod运行         
    selector:              # Label Selector
      matchLabels:
        app: deploy-test
    template:              # Pod的定义，用于创建Pod，也称为Pod template
      metadata:
        labels:
          app: deploy-test
      spec:
        containers:
        - image: swr.cn-north-7.myhuaweicloud.com/cci-test/nginx:latest
          name: container-0
          resources:
            requests:
              cpu: 200m
              memory: 200Mi
        imagePullSecrets:
        - name: default-secret
    strategy:
      type: RollingUpdate
      rollingUpdate:
        maxUnavailable: 35%
        maxSurge: 35%
  ```
  
 
