华为云云容器引擎CCE实战:从集群创建到HPA弹性伸缩

举报
yd_235631729 发表于 2026/11/05 11:18:11 2026/11/05
【摘要】 本文以部署一个可自动伸缩的无状态Web服务为主线,详解CCE集群与节点池的创建与网络规划、从容器镜像仓库拉取私有镜像、Deployment与LoadBalancer Service对接负载均衡、基于CPU指标的HPA弹性伸缩、滚动升级回滚,以及多可用区、资源配额和监控等运维建议。

一、背景:为什么选择托管 Kubernetes

容器化已经成为应用交付的事实标准,但自建 Kubernetes 集群需要自己维护控制面(etcd、apiserver、调度器)、处理证书轮换、升级版本、排查网络插件问题,运维成本很高。对于大多数业务团队来说,真正关心的是“把应用稳定地跑起来、能弹性伸缩、出了问题能快速定位”,而不是维护集群本身。

华为云 云容器引擎 CCE(Cloud Container Engine) 提供高可用的托管 Kubernetes 控制面,用户只需管理工作节点和业务负载,同时与镜像仓库、负载均衡、云监控等服务深度集成。本文以“部署一个无状态 Web 服务并让它随流量自动伸缩”为主线,介绍创建集群与节点池、从镜像仓库拉取镜像、创建 Deployment 与 LoadBalancer 类型 Service、配置 HPA 弹性伸缩以及日常运维建议的完整过程。

二、核心概念

概念 说明
集群 一组控制面 + 工作节点的集合,CCE 负责托管控制面,可选单控制节点或多控制节点(高可用)
节点 / 节点池 节点是运行容器的云服务器;节点池是一组规格、镜像、标签一致的节点,便于统一扩缩容与升级
工作负载 即 Kubernetes 中的 Deployment、StatefulSet、DaemonSet、Job 等,本文使用无状态的 Deployment
Service 为一组 Pod 提供稳定的访问入口,类型有 ClusterIP、NodePort、LoadBalancer
容器网络模型 常见有容器隧道网络、VPC 网络,以及 Turbo 集群使用的云原生网络 2.0,创建后不可更改
HPA Horizontal Pod Autoscaler,根据 CPU、内存等指标自动调整 Pod 副本数

三、准备工作

在开始之前,建议先确认以下几点:

  1. 网络规划:准备一个 VPC 和子网,集群节点将部署在该子网中。提前规划容器网段和服务网段,确保与 VPC 网段以及将来可能互通的其他网络不冲突;
  2. 镜像准备:将业务镜像推送到华为云容器镜像服务的组织(命名空间)中,记录完整的镜像地址;
  3. 权限:确保当前账号具备 CCE 及相关服务的操作权限,首次使用 CCE 时控制台会提示进行服务授权,按提示同意即可;
  4. 本地工具:安装 kubectl,后续用于通过命令行管理集群。

四、创建集群与节点池

4.1 创建集群

登录华为云控制台,进入“云容器引擎 CCE”,点击“购买集群”,主要配置项如下:

  • 集群类型:一般业务选择 CCE Standard 集群;对网络性能要求较高的场景可以考虑 CCE Turbo 集群;
  • 集群版本:选择控制台推荐的较新稳定版本,避免选择即将停止维护的版本;
  • 控制节点数:生产环境建议选择多控制节点(高可用),测试环境可用单控制节点降低成本;
  • 网络配置:选择 VPC、子网和容器网络模型,并填写容器网段。注意网络模型和网段在创建后通常无法修改,务必提前规划;
  • 服务网段:用于 ClusterIP,保持默认或按规划填写即可。

确认配置后提交,集群创建一般需要若干分钟。

4.2 创建节点池

集群就绪后,进入集群详情,在“节点管理”中创建节点池,而不是零散地添加单个节点:

  • 节点规格:根据业务资源需求选择通用型规格,测试可选较小规格;
  • 操作系统:选择控制台支持的 EulerOS / HCE 等镜像;
  • 数据盘:容器运行时和镜像会占用数据盘空间,适当预留容量;
  • 节点数量:初始至少 2 个节点,并尽量分布在不同可用区,提升容灾能力;
  • K8s 标签与污点:可以为节点池打上如 pool=web 的标签,便于后续通过节点亲和性调度;
  • 弹性伸缩:如已安装集群弹性伸缩插件,可为节点池开启自动扩缩,配合 HPA 实现“Pod + 节点”两级弹性。

4.3 配置 kubectl

在集群详情页的“连接信息”中下载 kubeconfig 文件,放到本地 ~/.kube/config,然后验证:

kubectl get nodes -o wide
kubectl get pods -n kube-system

如果本地机器不在 VPC 内,需要为集群 API Server 绑定公网地址,并注意控制访问来源。

五、从镜像仓库拉取镜像

CCE 集群与华为云容器镜像服务在同一区域时,节点可以直接拉取该区域私有镜像,Kubernetes 中通常会自动创建一个名为 default-secret 的镜像拉取密钥。在 Deployment 中通过 imagePullSecrets 引用即可。

如果需要从其他仓库(例如自建 Harbor)拉取镜像,可以手动创建密钥:

kubectl create secret docker-registry my-registry \
  --docker-server=<仓库地址> \
  --docker-username=<用户名> \
  --docker-password=<密码> \
  -n default

建议镜像使用明确的版本标签(如 v1.2.0),不要依赖 latest,否则回滚和问题排查都会变得困难。

六、部署无状态工作负载

下面是一个完整的 Deployment + Service 示例,其中镜像地址请替换为自己的实际地址:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  labels:
    app: web-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-demo
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web
        image: <区域镜像仓库地址>/<组织名>/web-demo:v1.0.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: 250m
            memory: 256Mi
          limits:
            cpu: 500m
            memory: 512Mi
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 20
      imagePullSecrets:
      - name: default-secret
---
apiVersion: v1
kind: Service
metadata:
  name: web-demo-svc
  annotations:
    kubernetes.io/elb.id: <已有负载均衡实例ID>
spec:
  type: LoadBalancer
  selector:
    app: web-demo
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

执行部署并查看状态:

kubectl apply -f web-demo.yaml
kubectl get deploy,pods,svc -l app=web-demo
kubectl describe svc web-demo-svc

几点说明:

  1. requests/limits 必须设置:HPA 按 CPU 使用率计算时依赖 requests,不设置会导致 HPA 无法工作;
  2. 探针:readinessProbe 决定 Pod 何时接收流量,livenessProbe 决定何时重启容器,二者路径和时延要根据应用启动时间调整;
  3. 负载均衡对接:Service 的注解用于关联已有的负载均衡实例,具体注解名称和可选参数以 CCE 官方文档为准;也可以在控制台创建工作负载时通过“访问方式”页面图形化配置,降低出错概率;
  4. 若只需集群内部访问,Service 使用 ClusterIP 即可;七层路由需求可以使用 Ingress。

七、使用 HPA 实现弹性伸缩

HPA 依赖集群中的指标采集组件,在 CCE 中一般需要先在“插件中心”安装指标相关插件(如 metrics-server 或云原生监控插件)。安装完成后,创建 HPA:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-demo-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-demo
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300

验证伸缩效果:

kubectl apply -f web-demo-hpa.yaml
kubectl get hpa web-demo-hpa -w
# 另开终端施加压力,例如使用 hey / ab 等压测工具访问负载均衡地址

当平均 CPU 使用率超过 60% 时,副本数会逐步增加;压力消失后,经过稳定窗口再缓慢缩容。stabilizationWindowSeconds 可以避免副本数频繁抖动。若 Pod 扩容后因节点资源不足而处于 Pending 状态,就需要节点池的自动扩缩来补充节点。

八、滚动升级与回滚

更新镜像版本时,Deployment 默认采用滚动升级:

kubectl set image deployment/web-demo web=<镜像地址>/web-demo:v1.1.0
kubectl rollout status deployment/web-demo
# 出现问题时回滚
kubectl rollout undo deployment/web-demo

可以通过 maxSurge 与 maxUnavailable 控制升级节奏,配合就绪探针,确保新版本 Pod 就绪后才摘除旧 Pod,做到无感发布。

九、运维建议

  1. 多可用区部署:节点池跨可用区,并为 Deployment 配置 Pod 反亲和或拓扑分布约束,避免副本集中在同一节点;
  2. 资源配额:按团队或环境划分命名空间,为命名空间设置 ResourceQuota 和 LimitRange,防止单个业务挤占全部资源;
  3. 监控与日志:安装云原生监控与日志相关插件,关注节点 CPU/内存、Pod 重启次数、Pending 数量,并对关键指标配置告警;
  4. 版本升级:关注集群版本的生命周期,在测试集群先行验证后再升级生产集群,节点池可分批升级;
  5. 安全:API Server 公网访问限制来源,敏感配置使用 Secret 管理,镜像定期进行漏洞扫描;
  6. 成本控制:测试环境可在非工作时间缩小节点池,HPA 的 minReplicas 根据真实基线设置,不要盲目调大。

十、总结

CCE 把 Kubernetes 控制面的复杂度托管给云平台,让团队把精力放在应用本身。实践主线是:提前规划网络与网段后创建集群;以节点池方式管理节点并跨可用区分布;从同区域镜像仓库拉取带版本号的镜像;使用设置了资源请求和探针的 Deployment 承载应用,通过 LoadBalancer Service 对外暴露;借助 HPA 与节点自动扩缩实现两级弹性;最后用滚动升级、监控告警和资源配额保障日常稳定运行。掌握这些,就能在华为云上搭建一套可靠、可伸缩的容器化应用平台。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。