容器网段空间耗尽如何继续扩容(VPC网络模式)

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
所有文档
menu
没有找到结果,请重新输入

容器引擎 CCE

  • 功能发布记录
  • 产品描述
    • 介绍
    • 优势
    • 使用限制
    • 应用场景
    • 核心概念
    • 特性
  • 开发指南
    • EFK日志采集系统部署指南
    • 创建LoadBalancer类型的Service
    • Prometheus监控系统部署指南
    • kubectl管理配置
    • 在CCE集群中使用-Network-Policy
  • 常用工具
    • 视图命令行场景示例
  • 产品公告
    • CCE 新版集群管理发布公告
    • CCE 控制台升级公告
    • Kubernetes 版本发布说明
      • CCE发布Kubernetes 1.18版本说明
      • CCE发布Kubernetes 1.30版本说明
      • CCE Kubernetes 版本更新说明
      • CCE发布Kubernetes 1.22版本说明
      • CCE发布Kubernetes 1.20版本说明
      • CCE发布Kubernetes 1.28版本说明
      • CCE发布Kubernetes 1.24版本说明
      • CCE发布Kubernetes 1.26版本说明
    • 安全漏洞修复公告
      • 漏洞CVE-2020-14386修复公告
      • 修复漏洞CVE-2021-30465公告
      • 漏洞CVE-2019-5736修复公告
      • 漏洞CVE-2025-1097、CVE-2025-1098等修复公告
      • 关于 runc 的安全问题(CVE-2024-21626)影响声明
  • 快速入门
    • 快速部署nginx应用
    • 使用CCE容器引擎流程概述
  • 典型实践
    • CCE集群网络说明及规划
    • CCE典型实践之容器网络模式选择
    • Pod异常问题排查
    • 通过 CCE Ingress 实现虚机和容器服务的统一接入
    • CCE集群使用Jenkins持续发布
    • CCE-访问公网实践
    • Linux系统配置常用参数说明
    • 用户使用自定义 CNI 插件方法
    • CCE典型实践之Guestbook搭建
    • 使用KMS对etcd数据加密
    • 添加CGroup V2节点
    • CCE容器运行时选择
    • CCE使用检查清单
    • VPC-ENI模式集群访问公网实践
    • 利用 Velero 实现将应用跨云迁移到 百度CCE
    • 使用 CNI 配置容器内网络参数
    • CCE Resource Recommender 用户文档
    • CCE集群中使用私有镜像实践
    • 云原生AI
      • 使用 CCE AITraining Operator 实现弹性容错训练
      • 部署 TensorFlow Serving 推理服务
      • GPU虚拟化之隔离性最优型的最佳实践
  • 操作指南
    • 多用户访问控制
    • 使用须知
    • 命名空间管理
      • 设置资源配额
      • 设置资源限制
      • 命名空间基本操作
    • 弹性伸缩
      • 使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
      • CCE 集群节点自动伸缩
      • 容器定时水平伸缩(CronHPA)
      • 容器水平伸缩(HPA)
    • 存储管理
      • 使用云盘CDS
      • 使用并行文件存储PFS
      • 使用对象存储BOS
      • 使用并行文件存储PFS L2
      • 使用本地存储
      • 使用数据湖存储加速工具RapidFS
      • 使用文件存储CFS
      • 概述
    • 节点管理
      • 移出节点
      • kubelet容器监控只读端口风险提示
      • 管理污点
      • 设置GPU显存共享
      • 添加节点
      • 自定义Kubelet参数
      • 设置节点封锁
      • 节点排水
      • 管理节点标签
    • 组件管理
      • CCE CSI BOS Plugin 说明
      • Kube Scheduler 说明文档
      • CCE CSI PFS L2 Plugin
      • CCE NodeLocal DNSCache 说明
      • CCE Ingress NGINX Controller 说明
      • CCE RDMA Device Plugin 说明
      • CCE Node Problem Detector 说明
      • CCE Credential Controller 说明
      • Kube Controller Manager 说明
      • CCE Ingress Controller 说明
      • CCE GPU Manager 说明
      • CCE Backup Controller 说明
      • CCE QoS Agent 说明
      • CCE Descheduler 说明
      • 组件概述
      • CCE Image Accelerate 说明
      • CCE Network Plugin说明
      • Kube ApiServer 说明
      • CCE Log Operator 说明
      • CoreDNS 说明
      • CCE NPU Manager 说明
      • CCE AI Job Scheduler 说明
      • CCE LB Controller 说明
      • CCE P2P Accelerator 说明
      • CCE_Hybrid_Manager说明
      • CCE CSI PFS Plugin 说明
      • CCE Deep Learning Frameworks Operator 说明
      • CCE Node Remedier 说明
      • CCE CSI CDS Plugin 说明
      • CCE Ascend Mindx DL说明
      • CCE Calico Felix 说明
      • CCE Virtual Kubelet组件
      • CCE Fluid说明
      • CCE Onepilot 说明
      • CCE CronHPA Controller 说明
      • CCE 动态调度插件说明
    • 云原生AI
      • 云原生AI概述
      • GPU虚拟化
        • MPS 最佳实践&注意事项
        • GPU独占和共享说明
        • GPU在离线混部使用说明
        • GPU虚拟化适配表
        • 单GPU容器共享多卡使用说明
        • 共享GPU场景下的镜像构建注意事项
        • 关闭节点显存共享功能注意事项
      • 队列管理
        • 逻辑队列和物理队列使用说明
        • 修改队列
        • 删除队列
        • 新建队列
      • 任务管理
        • 基于 NCCL的RDMA分布式训练示例
        • 新建AITraining任务
        • 新建PaddlePaddle任务
        • 删除任务
        • 查看任务信息
        • 新建Mxnet任务
        • 新建TensorFlow任务
        • 新建Pytorch任务
      • 数据集管理
        • 删除数据集
        • 操作数据集
        • 查看数据集
        • 新建数据集
      • AI监控大盘
        • 接入监控实例并开启采集任务
        • NVIDIA芯片资源观测
          • AI Job Scheduler组件
          • GPUManager组件
          • GPU资源池总览
          • GPU节点资源
          • GPU工作负载资源
        • 昇腾芯片资源观测
          • 昇腾节点资源
          • 昇腾资源池总览
          • 昇腾工作负载资源
      • AI 加速套件
        • 使用AIAK-Inference 加速推理业务
        • 使用AIAK-Training Pytorch版
        • AIAK 简介
        • 使用 AIAK-Training 部署分布式训练任务
    • Helm管理
      • Helm模板
      • Helm实例
    • 应用管理
      • 部署
      • 保密字典
      • 服务
      • 配置字典
      • 容器组
      • 概述
    • 镜像仓库
      • 使用容器镜像构建服务
      • 镜像仓库基本操作
    • Serverless集群
      • 在Serverless集群中使用Service
      • 产品概述
      • 创建Serverless集群
    • 工作负载
      • 设置工作负载自动水平伸缩
      • Statefulset管理
      • 使用私有镜像创建工作负载
      • Job管理
      • 查看容器组
      • CronJob管理
      • Daemonset管理
      • 免密拉取容器镜像
      • Deployment管理
    • 节点组管理
      • 节点组管理
      • 节点组介绍
      • 升级节点组
      • 添加外部已有节点
      • 自定义节点组 Kubelet 配置
      • 添加备选机型
      • 节点组节点故障检测自愈
      • 配置扩缩容策略
    • 监控日志
      • 使用Prometheus监控集群
      • CCE 事件中心
      • 集群审计仪表盘
      • CCE 集群异常事件报警
      • Java应用监控
      • 集群服务画像
      • 日志管理
      • 集群审计
      • 日志中心
        • 在容器引擎控制台配置采集规则
        • 查看集群控制面日志
        • 日志概述
        • 查看业务日志
        • 使用CRD配置采集规则
    • 网络管理
      • CCE 集群内容器访问集群外服务
      • 容器网段空间耗尽如何继续扩容(VPC-ENI模式)
      • 容器网段空间耗尽如何继续扩容(VPC网络模式)
      • CCE IP Masquerade Agent 用户指南
      • 创建VPC-ENI模式集群
      • 对等连接场景下容器流量转发配置
      • 使用Network Policy网络策略
      • CCE 支持 IPv4 和 IPv6 双栈网络
      • 在CCE集群中使用NetworkPolicy
      • 网络编排
        • 集群 Pod 子网拓扑分布(容器网络 v2)
        • 容器网络 QoS 管理
        • VPC-ENI指定子网分配IP(容器网络 v2)
      • 网络连通性
        • 容器网络通过 NAT 网关访问公网
      • 网络维护
        • CCE容器网络常见错误码对应表
      • DNS
        • DNS 原理概述
        • DNS 问题排查指南
        • CoreDNS 组件手动升级指南
    • 虚拟节点
      • 管理虚拟节点
      • 配置BCIPod
      • 配置bci-profile
    • 备份中心
      • 备份概述
      • 恢复管理
      • 备份仓库
      • 备份管理
    • 巡检与诊断
      • GPU运行环境检查
      • 集群巡检
      • 故障诊断
    • 流量接入
      • NGINX Ingress 使用配置参考
      • CCE基于nginx-ingress实现灰度发布
      • BLB Ingress Annotation说明
      • 通过CCE使用K8S_Ingress
      • 通过YAML创建LoadBalancer_Service
      • 通过CCE使用K8S_Service
      • LoadBalancer Service Annotation说明
      • 使用直连 Pod 模式 LoadBalancer Service
      • Service复用已有负载均衡BLB
      • 通过YAML创建CCE_Ingress
      • 使用 NGINX Ingress
    • 权限管理
      • 配置集群OIDC认证
      • 配置IAM标签权限策略
      • 配置IAM自定义权限策略
      • 配置IAM预置权限策略
      • 权限概述
      • 配置预置RBAC权限策略
    • 配置管理
      • Secret管理
      • Configmap管理
    • 集群管理
      • 集群快照
      • CCE 安全组
      • 查看集群
      • 创建集群
      • 操作集群
      • 升级集群Kubernetes版本
      • 通过kubectl连接集群
      • 托管集群使用说明
      • CCE 支持 GPUSharing 集群
      • CCE节点资源预留说明
      • CCE 节点 CDS 扩容
  • 服务等级协议SLA
    • CCE服务等级协议SLA(V1.0)
  • Solution-Fabric
    • Fabric解决方案
  • API参考
    • 通用说明
    • 公共头和错误返回
    • 概述
  • 常见问题
    • windows下使用kubectl
    • 自动扩缩容常见问题
    • 通过kubectl创建简单的服务
    • 业务应用如何使用负载均衡?
    • 常见问题总览
    • 集群管理常见问题
  • API_V2参考
    • 通用说明
    • Instance相关接口
    • 附录
    • Autoscaler相关接口
    • 组件管理相关接口
    • 套餐适配相关接口
    • Task相关接口
    • 公共头和错误返回
    • Network相关接口
    • 服务域名
    • Cluster相关接口
    • Kubeconfig相关接口
    • InstanceGroup相关接口
    • RBAC相关接口
    • 概述
  • 产品定价
    • 产品定价
  • Solution-Xchain
    • 超级链解决方案
  • SDK
    • Go-SDK
      • 节点组管理
      • 节点管理
      • 集群管理
      • 初始化
      • 安装SDK工具包
      • 概述
  • 文档中心
  • arrow
  • 容器引擎CCE
  • arrow
  • 操作指南
  • arrow
  • 网络管理
  • arrow
  • 容器网段空间耗尽如何继续扩容(VPC网络模式)
本页目录
  • 概述
  • master 二进制部署集群解决方法
  • 第一步
  • 第二步
  • 实际案例
  • 问题场景
  • 修改步骤
  • 第一步
  • 第二步
  • master 采用静态Pod部署方式解决办法
  • 第一步 修改配置
  • 第二步 修改网络组件
  • 第三步 重新移出移入节点
  • 实际案例
  • 问题场景
  • 修改步骤
  • 第一步 修改配置
  • 第二步 修改网络组件
  • 第三步 重新移出移入节点

容器网段空间耗尽如何继续扩容(VPC网络模式)

更新时间:2025-08-21

注意:以下内容仅针对使用 “VPC Route”模式的集群

概述

一个集群中最大的节点数量由容器网段的大小和每个节点上最大 Pod 数量所决定,例如:

  • 容器网段选择 172.16.0.0/16,每个节点最大 Pod 数量为 256,则一个集群中最多只能有 256 个节点;
  • 容器网段选择 192.168.0.0/22,每个节点最大 Pod 数量为 128,则一个集群中最多只能有 8 个节点;

在某些情况下,由于用户创建的集群时,选择的容器网段过小或者每个节点上最大的容器数量过大,在后续对集群进行扩容时,节点数量超过了集群中最大的节点数量。由于 kube-controller-manager 无法为这些扩容的节点分配Pod 的网段,会导致节点状态 notReady。

注意:在 2021-3-11 之前,controller manager 采用二进制方式部署,按照老版本解决办法。2021-3-11 之后的新建的集群,controller manager 采用静态 Pod 方式部署,按照新版本解决办法。

master 二进制部署集群解决方法

在 2021-3-11 之前,controller manager 采用二进制方式部署。

此时只有容器网络 V1 架构,不排除个人手动升级到 V2 架构的情况。请自行确认当前使用的容器网络版本。对应的方法为检查集群中是否有 cce-cni-node-agent 对象,如果有该对象,则使用的容器网络版本是 v1。

Shell
1$ kubectl -n kube-system get cm cce-cni-node-agent
2NAME                 DATA   AGE
3cce-cni-node-agent   1      125d

第一步

修改集群中 master 节点上 cce-network-operator 的配置,需要修改的字段是 cluster-pool-ipv4-mask-size。由于修改目的是让集群中可以容纳更多节点,也就是让节点上最大的 Pod 数量变小,我们需要修改 cluster-pool-ipv4-mask-size 值使其变大。

如果是多副本的 master,需要逐一修改各 master 节点上的配置。

注意: 不能修改 cluster-pool-ipv4-mask-size 比当前值更小,否则会造成网段冲突导致网络不通

第二步

从集群中移出节点再加入,包括的方法有两种:

  • 从 CCE 产品 console 界面上选择“移出节点”或“删除节点”, 之后再“移入节点”或“添加节点”。
  • 执行 kubectl delete node <nodeName> 从 k8s 集群中删除节点。执行 kubectl get pods --all-namespaces=true -o wide | grep <nodeName> 确保该节点上没有 Pod 之后,在节点上重启 kubelet 将节点重新加入到 k8s 集群。

注意:不论哪种方式将节点从集群中删除,都会导致移出的节点上的所有 Pod 漂移。对于承载了线上服务的节点,需要谨慎操作。

实际案例

问题场景

目前有一个集群的容器网段是 172.26.0.0/22,kube-controller-manager 配置中 --node-cidr-mask-size=24。也就是说,集群中最多容纳 4 个节点,每个节点上最大 Pod 数量是 256。

集群中已经有 4 个节点了,如果再扩容节点将会导致新扩容的节点不可用。

Plain Text
1[root@instance-rhkiutp6-3 ~]# kubectl get node
2NAME       STATUS   ROLES    AGE    VERSION
310.0.5.3   Ready    <none>   119m   v1.13.10
410.0.5.4   Ready    <none>   117m   v1.13.10
510.0.5.5   Ready    <none>   20m    v1.13.10
610.0.5.6   Ready    <none>   118m   v1.13.10
7[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
8PodCIDR:                     172.26.2.0/24
9PodCIDR:                     172.26.1.0/24
10PodCIDR:                     172.26.3.0/24
11PodCIDR:                     172.26.0.0/24

修改步骤

第一步

在 master 上执行 vim /etc/systemd/system/kube-controller.service 查看 kube-controller-manager 配置:

Plain Text
1[Unit]
2Description=Kubernetes Controller Manager
3After=network.target
4After=kube-apiserver.service
5
6[Service]
7ExecStart=/opt/kube/bin/kube-controller-manager \
8--allocate-node-cidrs=true \
9--cloud-config=/etc/kubernetes/cloud.config \
10--cluster-cidr=172.26.0.0/22 \
11--node-cidr-mask-size=24 \   #修改这里
12.......
13--kubeconfig=/etc/kubernetes/controller-manager.conf \
14--leader-elect=true \
15--logtostderr=true \
16--master=https://100.64.230.195:6443 \
17--v=6
18Restart=always
19Type=simple
20LimitNOFILE=65536
21
22[Install]
23WantedBy=multi-user.target

修改 --node-cidr-mask-size 值从 24 变更为 26。这样修改后,集群中最多可以容纳 16 个节点,每个节点上最大 Pod 数量则减少为 64。

依次在每个 master 节点修改配置后执行以下命令重启 kube-controller-manager。

Plain Text
1systemctl daemon-reload
2systemctl restart kube-controller.service

第二步

执行 kubectl delete node 10.0.5.4,此时集群状态中已经没有 10.0.5.4 节点:

Plain Text
1[root@instance-rhkiutp6-3 ~]# kubectl get node
2NAME       STATUS   ROLES    AGE    VERSION
310.0.5.3   Ready    <none>   132m   v1.13.10
410.0.5.5   Ready    <none>   33m    v1.13.10
510.0.5.6   Ready    <none>   132m   v1.13.10
6[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
7PodCIDR:                     172.26.2.0/24
8PodCIDR:                     172.26.3.0/24
9PodCIDR:                     172.26.0.0/24

执行 kubectl get pods --all-namespaces=true -o wide | grep <nodeName> 确保 10.0.5.4 上没有 Pod。

在 10.0.5.4 节点上执行 systemctl restart kubelet.service 重启 kubelet,此时集群状态中表明 10.0.5.4 节点又被加入并且容器网段变为了 172.26.1.0/26:

Plain Text
1[root@instance-rhkiutp6-3 ~]# kubectl get node
2NAME       STATUS   ROLES    AGE     VERSION
310.0.5.3   Ready    <none>   138m    v1.13.10
410.0.5.4   Ready    <none>   3m55s   v1.13.10
510.0.5.5   Ready    <none>   40m     v1.13.10
610.0.5.6   Ready    <none>   138m    v1.13.10
7[root@instance-rhkiutp6-3 ~]# kubectl describe node | grep -i podcidr
8PodCIDR:                     172.26.2.0/24
9PodCIDR:                     172.26.1.0/26
10PodCIDR:                     172.26.3.0/24
11PodCIDR:                     172.26.0.0/24

每移入移出一个已有节点将会创造出 3 个节点的扩容空间。例如现在可以给集群继续扩容 3 台节点,分配的 PodCIDR 将会是 172.26.1.64/26、 172.26.1.128/26 以及 172.26.1.192/26。

用户继续执行以上步骤移入移出所有节点,以创造更多的扩容空间。

注意:PodCIDR 掩码不同的节点理论上可以存在于同一集群中,但还是建议用户将所有节点移入移出一遍,让节点拥有相同掩码的 PodCIDR。

master 采用静态Pod部署方式解决办法

在 2021-3-11 之后,controller manager 采用静态 Pod 方式部署,修改对应的配置文件即可完成 Pod 更新。

容器网络分为 V1 和 V2 架构。请自行确认当前使用的容器网络版本。对应的方法为检查集群中是否有 cce-cni-node-agent 对象,如果有该对象,则使用的容器网络版本是 v1。

Shell
1$ kubectl -n kube-system get cm cce-cni-node-agent
2NAME                 DATA   AGE
3cce-cni-node-agent   1      125d

第一步 修改配置

修改集群中 master 节点上 kube-controller-manager 的配置,需要修改的字段是 --node-cidr-mask-size。

由于修改目的是让集群中可以容纳更多节点,也就是让节点上最大的 Pod 数量变小,我们需要修改 --node-cidr-mask-size 值使其变大。

如果是多副本的 master,需要逐一修改各 master 节点上的配置。

| 注意: 不能修改 node-cidr-mask-size 比当前值更小,否则会造成网段冲突导致网络不通

第二步 修改网络组件

容器网络分 V1 和 V2 架构分别对应不同的修改方法。请自行确认当前使用的容器网络版本。对应的方法为检查集群中是否有 cce-cni-node-agent 对象,如果有该对象,则使用的容器网络版本是 v1。

Shell
1$ kubectl -n kube-system get cm cce-cni-node-agent
2NAME                 DATA   AGE
3cce-cni-node-agent   1      125d

对于容器网络 V1 架构,v1 直接用node spec里的podcidr,并不需要进行修改。

对于容器网络 V2 架构,需要修改 cce-network-v2-config,对应的字段是 cluster-pool-ipv4-mask-size。之后重启对应的组件 cce-network-operator 和 cce-network-agent,以确保对应的配置生效。

第三步 重新移出移入节点

从集群中移出节点再加入,包括的方法有两种:

  • 从 CCE 产品 console 界面上选择“移出节点”或“删除节点”, 之后再“移入节点”或“添加节点”。
  • 执行 kubectl delete node <nodeName> 从 k8s 集群中删除节点。执行 kubectl get pods --all-namespaces=true -o wide | grep <nodeName> 确保该节点上没有 Pod 之后,在节点上重启 kubelet 将节点重新加入到 k8s 集群。 注意:不论哪种方式将节点从集群中删除,都会导致移出的节点上的所有 Pod 漂移。对于承载了线上服务的节点,需要谨慎操作。

实际案例

问题场景

目前有一个集群的容器网段是 172.16.0.0/24 ,kube-controller-manager 配置中 node-cidr-mask-size=24 。也就是说,集群中最多容纳 256 个节点,每个节点上最大 Pod 数量是 256。现在需要将可容纳节点个数提升到 1024 个。

Shell
1[root@root ~]# kubectl get no 
2NAME          STATUS   ROLES    AGE   VERSION
3192.168.1.4   Ready    <none>   42m   v1.24.4
4192.168.1.5   Ready    <none>   35m   v1.24.4
5root@root:~# kubectl describe node | grep -i podcidr
6root@root:~# kubectl describe node | grep -i podcidr
7PodCIDR:                      10.0.1.0/24
8PodCIDRs:                     10.0.1.0/24
9PodCIDR:                      10.0.0.0/24
10PodCIDRs:                     10.0.0.0/24

修改步骤

第一步 修改配置

查看 cnode-cidr-mask-size 配置:

Shell
1[root@root manifests]# kubectl get po kube-controller-manager-192.168.1.4 -n kube-system -o yaml | grep node-cidr-mask-size
2    - --node-cidr-mask-size=24

修改 cluster-pool-ipv4-mask-size 值从 24 变更为 26。这样修改后,集群中最多可以容纳 1024 个节点,每个节点上最大 Pod 数量则减少为 64。

修改 kube-controller-manager 参数 node-cidr-mask-size=26 :

Shell
1vim /etc/kubernetes/manifests/kube-controller-manager.yaml
2
3apiVersion: v1
4kind: Pod
5metadata:
6  annotations:
7    scheduler.alpha.kubernetes.io/critical-pod: ""
8  creationTimestamp: null
9  labels:
10    component: kube-controller-manager
11    tier: control-plane
12  name: kube-controller-manager
13  namespace: kube-system
14spec:
15  containers:
16    - command:
17        - kube-controller-manager
18        - --cluster-cidr=172.16.0.0/16
19        - --feature-gates=MixedProtocolLBService=true
20        - --master=https://192.168.1.4:6443
21        - --node-cidr-mask-size=26
22        ……

这里 kube-controller-manager 是通过静态方式部署的。对于静态Pod,kubelet 会监视定义文件的变化。当保存并关闭编辑器后,kubelet 将检测到文件已更改,并自动根据更新后的定义文件删除旧的 Pod 并启动新的 Pod 。

第二步 修改网络组件

这里使用的 V2 网络架构,需要修改 cce-network-v2-config 的 cluster-pool-ipv4-mask-size 字段。

Shell
1kubectl edit cm cce-network-v2-config -n kube-system
2
3apiVersion: v1
4data:
5  cced: |
6    annotate-k8s-node: true
7    api-rate-limit:
8      bcecloud/apis/v1/AttachENI: rate-limit:5/1s,rate-burst:5,max-wait-duration:30s,parallel-requests:5,log:true
9      bcecloud/apis/v1/BatchAddPrivateIP: rate-limit:5/1s,rate-burst:10,max-wait-duration:15s,parallel-requests:5,log:true
10      bcecloud/apis/v1/BatchDeletePrivateIP: rate-limit:5/1s,rate-burst:10,max-wait-duration:15s,parallel-requests:5,log:true
11      bcecloud/apis/v1/CreateENI: rate-limit:5/1s,rate-burst:5,max-wait-duration:30s,parallel-requests:5,log:true
12      bcecloud/apis/v1/DescribeSubnet: rate-limit:5/1s,rate-burst:5,max-wait-duration:30s,parallel-requests:5
13      bcecloud/apis/v1/StatENI: rate-limit:10/1s,rate-burst:15,max-wait-duration:30s,parallel-requests:10
14    auto-create-network-resource-set-resource: true
15    bbcEndpoint: bbc.gz.baidubce.com
16    bccEndpoint: bcc.gz.baidubce.com
17    bce-cloud-access-key: ""
18    bce-cloud-country: cn
19    bce-cloud-host: cce-gateway.gz.baidubce.com
20    bce-cloud-region: gz
21    bce-cloud-secure-key: ""
22    bce-cloud-vpc-id: vpc-2f5wibbx4js7
23    cce-cluster-id: cce-clboj6fa
24    cce-endpoint-gc-interval: 30s
25    cluster-pool-ipv4-cidr:
26    - 172.16.0.0/16
27    cluster-pool-ipv4-mask-size: 26

重启对应的组件cce-network-operator 和 cce-network-agent 以确保对应的配置生效。

Shell
1kubectl rollout restart deployment cce-network-operator -n kube-system
2kubectl rollout restart daemonset cce-network-agent -n kube-system

第三步 重新移出移入节点

执行 kubectl delete 指令,删除对应的节点。

Shell
1kubectl delete node 192.168.1.4

查看集群状态,确保此时集群状态中已经没有 192.168.1.4 节点:

Shell
1[root@root ~]# kubectl get no
2NAME          STATUS   ROLES    AGE   VERSION
3192.168.1.5   Ready    <none>   47m   v1.24.4
4root@root:~# kubectl describe node | grep -i podcidr
5PodCIDR:                      10.0.1.0/24
6PodCIDRs:                     10.0.1.0/24

确保 192.168.1.4 上没有 Pod。如果有 Pod 残留会导致重新加入 Node 后 Pod CIDR 不变。执行以下命令进行查看。

Shell
1kubectl get pods --all-namespaces=true -o wide | grep <nodeName>

在 192.168.1.2节点上执行 systemctl restart kubelet.service 重启 kubelet,此时集群状态中表明 192.168.1.2 节点又被加入并且容器网段变为了 172.26.1.0/26:

Shell
1[root@root ~]# kubectl get node
2NAME          STATUS   ROLES    AGE    VERSION
3192.168.1.4   Ready    <none>   11m    v1.24.4
4192.168.1.5   Ready    <none>   102m   v1.24.4
5[root@root-3 ~]# kubectl describe node | grep -i podcidr
6PodCIDR:                      10.0.0.0/26
7PodCIDRs:                     10.0.0.0/26
8PodCIDR:                      10.0.1.0/24
9PodCIDRs:                     10.0.1.0/24

用户继续执行以上步骤移入移出所有节点,可以创造更多的扩容空间。

注意:PodCIDR 掩码不同的节点理论上可以存在于同一集群中,但还是建议用户将所有节点移入移出一遍,让节点拥有相同掩码的 PodCIDR。

上一篇
容器网段空间耗尽如何继续扩容(VPC-ENI模式)
下一篇
CCE IP Masquerade Agent 用户指南