基本概念
云容器引擎(Cloud Container Engine,简称CCE)提供高度可扩展的、高性能的企业级Kubernetes集群。借助云容器引擎,您可以在云上轻松部署、管理和扩展容器化应用程序。
云容器引擎提供Kubernetes原生API,支持使用kubectl,且提供图形化控制台,让您能够拥有完整的端到端使用体验。
使用CCE前,建议先了解以下基本概念,帮助您建立系统的认知。
集群与节点
集群(Cluster)
Kubernetes集群指容器运行所需要的云资源组合,关联了若干云服务器节点、负载均衡等云资源。您可以理解为集群是“同一个子网中一个或多个弹性云服务器(又称:节点)”通过相关技术组合而成的计算机群体,为容器运行提供了计算资源池。
一个Kubernetes集群由控制面(Control Plane)和工作节点(Worker Node)两部分组成:

云容器引擎支持的集群类型如下:
| 集群类型 | 描述 |
|---|---|
| CCE Standard集群 | CCE Standard集群是云容器引擎服务的标准版本集群,提供商用级容器集群服务,并完全兼容开源 Kubernetes 集群标准功能。 CCE Standard集群为您提供简单、低成本、高可用的解决方案,无需管理和运维控制节点,并且可根据业务场景选择使用容器隧道网络模型或VPC网络模型,适合对性能和规模没有特殊要求的通用场景。 |
| CCE Turbo集群 | CCE Turbo集群是基于云原生基础设施构建的云原生2.0容器引擎服务,具备软硬协同、网络无损、安全可靠、调度智能的优势,为用户提供一站式、高性价比的全新容器服务体验。 CCE Turbo集群提供了面向大规模高性能的场景云原生2.0网络,容器直接从VPC网段内分配IP地址,容器和节点可以分属不同子网,支持VPC内的外部网络与容器IP直通,享有高性能。 |
| CCE Autopilot集群 | CCE Autopilot是云容器引擎服务推出的Serverless版集群,提供免运维的容器服务,并提供经过优化的Kubernetes兼容能力。 CCE Autopilot集群提供了无用户节点的部署方式,简化了应用部署流程。您无需购买节点,也无需对节点的部署、管理和安全性进行维护,只需要关注应用业务逻辑的实现,可以大幅降低您的运维成本,提高应用程序的可靠性和可扩展性。 |
三种集群的关键差异请参见集群类型对比。
关于集群的更多操作请参见购买Standard/Turbo集群。
节点(Node)
在Kubernetes集群中,节点是运行容器化应用程序的工作主机,它们可以是物理服务器或虚拟机,并通过网络连接形成集群。每个节点都安装了必要的组件:
- 容器运行时:负责运行容器(如containerd、Docker)。
- kubelet:向API Server上报节点和Pod状态,接收并执行Pod配置。
- kube-proxy:维护节点上的网络规则,实现Service的流量转发。
节点资源被Kubernetes统一调度和管理,用于部署和运行实例(Pod)(容器的最小部署单元),是集群的基础运行环境,保障应用程序的高可用性和弹性扩展。
关于节点的更多操作请参见创建节点。
节点池(NodePool)
在Kubernetes集群中,节点池是一组具有相同配置和属性的节点集合。这些节点通常具有相同的硬件规格、操作系统版本和Kubernetes节点配置。节点池可以方便地实现集群资源的批量管理与扩展。您可以根据需求创建不同规模和配置的节点池,以满足不同应用程序的负载调度需求,确保资源高效利用。同时,节点池支持弹性伸缩,可根据工作负载自动调整节点数量,从而优化资源利用效率,提升集群的灵活性和可扩展性。
关于节点池的更多操作请参见创建节点池。
容器运行时(Container Runtime)
容器运行时是节点上负责创建和运行容器的组件。Kubernetes通过容器运行时接口(CRI)与运行时交互,支持的运行时包括:
- containerd(推荐):轻量级、高性能,是当前Kubernetes社区推荐的默认运行时。
- Docker:通过dockershim适配,Kubernetes 1.24起已不再内置支持,需通过cri-dockerd适配。
CCE当前默认使用containerd作为容器运行时,从v1.34版本起新创建的节点不再支持使用Docker。
关于容器运行时的更多说明请参见容器运行时说明。
网络
虚拟私有云(VPC)
虚拟私有云是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。您可以在VPC中定义与传统网络无差别的虚拟网络,同时提供弹性IP、安全组等高级网络服务。
通过VPC,CCE集群可以实现节点与容器网络的安全隔离,同时支持弹性公网IP和带宽配置,满足集群的灵活扩展需求。
关于虚拟私有云的更多操作请参见创建虚拟私有云和子网。
安全组
安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。安全组创建后,用户可以在安全组中定义各种访问规则,当弹性云服务器加入该安全组后,即受到这些访问规则的保护。
关于安全组的更多操作请参见添加安全组规则。
集群、虚拟私有云、安全组和节点的关系
- 不同集群可以创建在不同的虚拟私有云中。
- 不同集群可以创建在同一个子网中。
- 不同集群可以创建在不同的子网中。
服务(Service)
在Kubernetes中,Service用于定义Pod的访问策略,为Pod提供稳定的访问入口。由于Pod的IP地址会随重启而变化,Service通过标签选择器关联后端Pod,提供固定的访问方式。
Service类型的取值以及行为如下:
- ClusterIP:这是默认的Service类型,它会在集群内部为Service分配一个唯一的IP地址。这个IP地址只在集群内部可用,外部无法直接访问。ClusterIP类型的Service通常用于集群内部的通信。
- NodePort:NodePort类型的Service会在集群的所有节点上打开一个静态端口(NodePort),通过这个端口可以访问Service。这个类型的Service允许外部流量通过节点绑定的弹性IP和指定的端口访问Service,从而实现对外提供服务。
- LoadBalancer:利用云服务提供商的负载均衡器,将Service暴露给外部网络。外部的负载均衡器可以将流量转发到集群中NodePort服务和ClusterIP服务。
- DNAT:使用DNAT网关为集群节点提供网络地址转换服务,使多个节点可以共享使用弹性IP。与直接为节点绑定弹性IP的方式相比,DNAT方式增强了可靠性,弹性IP无需与单个节点绑定,任何节点状态的异常不影响其访问。
关于服务的更多操作请参见服务概述。
路由(Ingress)
Kubernetes集群中的Ingress用于管理外部访问集群内服务的规则。它提供基于域名、路径的路由功能,支持负载均衡、TLS终止和SSL证书管理。通过Ingress,可以将多个服务的流量统一管理,对外暴露一个入口点,简化网络配置,提升集群的可扩展性和安全性,是实现微服务架构中服务暴露的重要方式。
关于路由的更多操作请参见路由概述。
网络策略(NetworkPolicy)
Kubernetes集群中的NetworkPolicy用于定义Pod之间的网络通信策略。它通过指定允许或拒绝的流量规则,控制Pod之间的访问关系,增强集群的网络安全。
NetworkPolicy支持基于以下维度定义规则:
- Pod标签:匹配源/目标Pod的标签选择器
- 命名空间:匹配源/目标命名空间
- IP地址块:匹配CIDR地址范围
- 端口:匹配协议和端口号
关于网络策略的更多操作请参见配置网络策略(NetworkPolicy)限制Pod访问的对象。
工作负载
实例(Pod)
在Kubernetes中,Pod是部署应用或服务的最小基本单位。一个Pod可以封装一个或多个应用容器,多个容器通常共享存储和网络资源。每个Pod都有一个独立的网络IP地址,这使得 Pod内的容器可以相互通信,并且可以被集群内的其他Pod访问。同时,Kubernetes提供多种策略选项来管理容器的运行方式,包括重启策略、资源请求和限制、生命周期钩子等。
Pod生命周期
Pod从创建到删除经历以下阶段,阶段之间的流转由Kubernetes控制:
| 阶段 | 触发条件 | 说明 |
|---|---|---|
| Pending | Pod创建请求被API Server接受 | 等待调度到节点、拉取镜像 |
| Running | 所有容器镜像拉取完成并创建成功 | 至少一个容器正在运行 |
| Succeeded | 所有容器成功退出且不会重启 | 适用于一次性任务(Job) |
| Failed | 至少一个容器以非零状态退出 | 可通过kubectl describe pod查看失败原因 |
| Unknown | 与Pod所在节点通信失败 | 通常是节点失联 |
Pod的生命周期中还涉及以下关键机制:
- 重启策略(restartPolicy):Always(默认,容器退出后自动重启)、OnFailure(非零退出时重启)、Never(不重启)
- 健康检查(Probe):livenessProbe(存活探针,失败则重启容器)、readinessProbe(就绪探针,失败则从Service摘除)、startupProbe(启动探针,应用启动前阻塞其他探针)
- 生命周期钩子:postStart(容器启动后执行)、preStop(容器终止前执行)
容器(Container)
一个通过Docker镜像创建的运行实例被称为容器。在一个节点(宿主机)上可以运行多个容器。容器的实质是进程,但与直接在宿主机上执行的进程不同,容器进程运行于属于自己的独立的命名空间中。这些命名空间提供了一种隔离机制,使得每个容器都有自己的文件系统、网络接口、进程 ID 等,从而实现了操作系统级别的隔离。
工作负载类型
工作负载是在Kubernetes上运行的应用程序。无论您的工作负载是单个组件还是协同工作的多个组件,您都可以在Kubernetes上的一组Pod中运行它。在Kubernetes中,工作负载是对一组Pod的抽象模型,用于描述业务的运行载体,包括Deployment、StatefulSet、DaemonSet、Job、CronJob等多种类型。
| 类型 | 说明 | 典型场景 | Pod特性 |
|---|---|---|---|
| Deployment | 无状态工作负载,支持弹性伸缩与滚动升级 | Web服务器(NGINX)、博客(WordPress) | 完全独立、可替换、无序 |
| StatefulSet | 有状态工作负载,Pod有序编号,持久标识 | 分布式存储(ETCD)、数据库(MySQL-HA) | 有序部署/删除,持久标识符,稳定网络ID |
| DaemonSet | 守护进程集,确保每个节点运行一个Pod | 日志收集(Fluentd)、监控代理(Node Exporter) | 每节点一个,新节点自动部署 |
| Job | 一次性任务,确保指定数量Pod成功完成 | 数据备份、批量处理 | 成功完成后不再重启 |
| CronJob | 定时任务,按Cron表达式周期运行 | 定时数据同步、定时报告 | 按时间周期创建Job |
| ReplicaSet | 维护Pod副本数量 | 通常由Deployment自动管理 | 确保指定副本数持续运行 |
ReplicaSet是Deployment的底层实现。Deployment通过管理ReplicaSet实现滚动更新和回滚——每次更新创建新ReplicaSet并逐步替换旧ReplicaSet管理的Pod。用户通常无需直接操作ReplicaSet。
关于工作负载的更多操作请参见创建工作负载。
镜像(Image)
镜像(Image)是一个模板,是容器应用打包的标准格式,用于创建容器。或者说,镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub、容器镜像服务或者用户的私有镜像仓库。例如,开发者可以创建一个包含特定应用程序及其所有依赖的镜像,确保在任何环境中都能以相同的方式运行。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
关于镜像的更多操作请参见上传镜像。
存储与配置
存储卷(PersistentVolume)
PersistentVolume(PV)是集群的一块存储资源,可以是本地磁盘或网络存储。它具有独立于Pod的生命周期,这意味着即使使用PV的Pod被删除,PV中的数据也不会丢失。
存储声明(PersistentVolumeClaim)
PersistentVolumeClaim(PVC)是用户对存储资源PV的请求,它指定了存储的大小、访问模式等要求,Kubernetes会自动匹配合适的PV来满足这些要求。
PV和PVC之间的关系类似于Pod和Node的关系:Pod消耗Node资源,而PVC消耗PV资源。

命名空间(Namespace)
命名空间是对一组资源和对象的抽象整合,允许您将相关的资源和对象(如Pods、Services、Deployments等)组织在一起,形成一个逻辑上的分组。不同命名空间中的数据彼此隔离,但它们仍可以共享同一个集群的基础资源(如CPU、内存、存储等)。您可以在不同的命名空间中部署不同的环境,例如开发环境、测试环境和生产环境,这样可以确保环境之间的隔离,同时便于管理和维护。
在Kubernetes中,大部分资源对象都是命名空间级别的,如Pods、Services、Replication Controllers和Deployments等,这意味着它们属于某一个命名空间(默认是default)。但仍有一部分资源是集群级别的,例如Node、PersistentVolumes等,它们不属于任何命名空间,为所有命名空间中的资源提供服务。
关于命名空间的更多操作请参见创建命名空间。
配置项(ConfigMap)
Kubernetes集群中的ConfigMap用于存储配置数据,它可以将配置信息(如配置文件、命令行参数等)从Pod中分离出来,以键值对的形式存储。通过ConfigMap,用户可以轻松地在多个Pod之间共享和更新配置,而无需重新构建镜像。它支持多种数据格式(如YAML、JSON),方便灵活地管理应用程序的配置,确保配置的可维护性和可扩展性。
关于配置项的更多操作请参见创建配置项。
密钥(Secret)
Kubernetes集群中的Secret用于存储敏感信息(如密码、密钥、证书等),它以加密形式存储数据,确保敏感信息的安全性。Secret可以通过挂载或环境变量的形式在Pod中使用,也可以用于存储集群内部的认证信息。通过Secret,用户可以将敏感信息与应用程序代码分离,降低泄露风险,同时实现对敏感数据的集中管理和动态更新,保障集群的安全性和灵活性。
关于密钥的更多操作请参见创建密钥。
配置项(ConfigMap)与密钥(Secret)对比
| 维度 | ConfigMap | Secret |
|---|---|---|
| 数据类型 | 非敏感配置(端口号、日志级别等) | 敏感信息(密码、Token、证书等) |
| 存储方式 | 明文存储在etcd中 | Base64编码存储在etcd中(可配置加密) |
| 大小限制 | 单个ConfigMap不超过1MiB | 单个Secret不超过1MiB |
| 使用方式 | 环境变量、命令行参数、配置文件挂载 | 环境变量、文件挂载(如TLS证书目录) |
| 更新机制 | 挂载的配置文件可自动热更新 | 更新后需要重建Pod才能生效 |
环境变量
环境变量是指容器运行环境中设定的一个变量,您可以在创建容器模板时设定不超过30个的环境变量。环境变量可以在工作负载部署后修改,为工作负载提供了极大的灵活性。
CCE支持以下环境变量来源:
- 手动输入:直接设置键值对
- ConfigMap引用:从ConfigMap中引入配置
- Secret引用:从Secret中引入敏感信息
- 系统变量:引用Pod的名称、命名空间、IP等字段
在CCE中设置环境变量与Dockerfile中的“ENV”效果相同。
调度与伸缩
亲和性与反亲和性
在应用没有容器化之前,原先一个虚机上会装多个组件,进程间会有通信。但在做容器化拆分的时候,往往直接按进程拆分容器,比如业务进程一个容器,监控日志处理或者本地数据放在另一个容器,并且有独立的生命周期。这时如果分布在网络中两个较远的点,请求经过多次转发,性能会很差。
- 亲和性:可以实现就近部署,增强网络能力实现通信上的就近路由,减少网络的损耗。如:应用A与应用B两个应用频繁交互,所以有必要利用亲和性让两个应用尽可能地靠近,甚至在一个节点上,以减少因网络通信而带来的性能损耗。
- 反亲和性:主要是出于高可靠性考虑,尽量分散实例,某个节点故障的时候,对应用的影响只是N分之一或者只是一个实例。如:当应用采用多副本部署时,有必要采用反亲和性让各个应用实例打散分布在各个节点上,以提高可用性。
关于亲和性与反亲和性的更多操作请参见工作负载调度策略概述。
污点与容忍(Taint & Toleration)
污点和容忍是节点级别的调度约束,与亲和性互补——亲和性定义Pod"想去哪",污点定义节点"排斥谁":
| 污点效果 | 说明 |
|---|---|
| NoSchedule | 不调度新Pod到该节点(已有的Pod不受影响) |
| PreferNoSchedule | 尽量不调度到该节点(非强制) |
| NoExecute | 不调度且驱逐已有不容忍的Pod |
工作负载弹性伸缩(HPA)
Horizontal Pod Autoscaling(HPA)是Kubernetes中实现Pod水平自动伸缩的功能。HPA允许Kubernetes集群根据CPU使用率、内存使用率或其他选择的指标自动增加或减少Pod的数量。您可以设置目标指标的阈值,HPA会根据这些阈值自动调整Pod的数量,以保持应用的性能。
关于工作负载弹性伸缩的更多操作请参见创建HPA策略。
节点弹性伸缩(Cluster Autoscale)
节点弹性伸缩是根据集群负载动态调整节点数量的功能。当业务负载上升时,自动添加新节点以扩展资源;当负载下降时,自动移除多余节点以节省成本。它可以结合集群的资源使用情况(如CPU、内存利用率)和预设规则,实现节点的自动增减,确保集群资源与业务需求相匹配,提升资源利用效率和集群的灵活性。
关于节点弹性伸缩的更多操作请参见创建节点弹性策略。
标签和注解
标签(Label)
在Kubernetes中,标签(Label)是附加到资源对象(如Pod、Service、Deployment等)上的键值对。标签的主要作用是为这些对象提供额外的、语义化的元数据,以便于用户和系统能够更容易地识别、组织和管理资源。
标签选择器(LabelSelector)
在Kubernetes中,标签选择器是一种强大的机制,极大地简化了资源管理和操作的复杂性。它允许用户根据资源对象上的标签来选择和分组这些对象,可以对选中的资源组执行批量操作,如流量分配、扩缩容、更新配置、监控状态等。
应用场景:
- Service:选择后端Pod
- Deployment:选择管理的Pod
- HPA:选择伸缩目标
- NetworkPolicy:选择网络策略作用对象
注解(Annotation)
Annotation与Label类似,也采用key/value键值对形式,但用途和约束不同。
- Label:用于标识资源,具有严格的命名规范,属于Kubernetes对象的元数据(Metadata),可通过LabelSelector进行资源筛选,支撑调度、服务发现等核心机制。
- Annotation:用于附加任意非标识性信息,不属于对象选择机制。Kubernetes系统不直接依赖注解控制资源行为,但可将其暴露给外部工具,用于扩展Kubernetes能力。
资源配额(Resource Quota)
资源配额(Resource Quotas)允许管理员为命名空间设置资源使用总和的限制,例如CPU、内存、磁盘空间和网络带宽等。
资源限制(Limit Range)
默认情况下,K8s中所有容器都没有任何CPU和内存限制。LimitRange用来给命名空间中的对象(如Pod等)增加资源限制。
LimitRange对象提供的限制能够实现以下能力:
- 在一个命名空间中对每个Pod或容器的最小/最大资源使用量进行限制。
- 在一个命名空间中对每个PersistentVolumeClaim能申请的最小/最大存储空间进行限制。
- 在一个命名空间中对一种资源的申请值和限制值的比值进行控制。
- 设置一个命名空间中对计算资源的默认申请/限制值,并且自动在运行时注入到多个容器中。
核心组件
API Server
API Server(即kube-apiserver组件)是Kubernetes集群的核心组件之一,也是整个Kubernetes系统的统一入口,负责处理所有来自客户端的API请求,供用户、集群中的不同部分和集群外部组件相互通信,所有针对集群资源(如Pod、Service、Deployment等)的操作都必须通过API Server完成。
API Server的关键特性和功能如下:
- Kubernetes API接口暴露:API Server提供了一个RESTful API,用于管理和操作Kubernetes资源,如Pod、Service、Deployment等。
- 安全访问控制:
- 认证(Authentication):验证请求者的身份(如通过Token、客户端证书、用户名密码等)。
- 授权(Authorization):检查已认证用户是否有权执行请求的操作(如通过RBAC、ABAC等策略)。
- 准入控制(Admission Control):在资源创建/更新/删除前,通过准入控制器(Admission Controllers)对请求进行校验或修改。
- API版本管理:支持多版本API(如v1、apps/v1等),方便功能迭代和兼容性维护。
- 与其他组件的交互:
- etcd:读写etcd以持久化集群状态。
- kube-controller-manager:通过API监听资源变化,执行控制逻辑(如节点控制器、 replication控制器)。
- kube-scheduler:通过API获取待调度Pod,更新调度结果。
- kubelet:向API上报节点和Pod状态,接收Pod配置并执行。
- kubectl:用户通过kubectl调用API操作集群。
更多关于API Server的配置说明,请参见kube-apiserver。
kube-controller-manager
kube-controller-manager是Kubernetes的大脑,运行多个控制器,每个控制器是一个独立的控制循环,通过API Server监听资源变化并执行相应的控制逻辑,包括:
- 节点控制器:检测并响应节点故障
- 副本控制器:维护Pod副本数量
- Service Account控制器:为新建的命名空间创建默认账户
- 端点控制器:填充Service的Endpoints对象
更多关于kube-controller-manager的说明,请参见kube-controller-manager。
kube-scheduler
kube-scheduler负责将未调度的Pod分配到合适的节点上。调度过程分为两个阶段:
- 过滤:排除不满足Pod资源需求或调度约束的节点
- 打分:对剩余节点按优先级排序,选择最优节点
调度决策考虑的因素包括:资源需求、亲和性/反亲和性规则、污点与容忍、数据本地性等。
更多关于kube-scheduler的说明,请参见kube-scheduler。
etcd
etcd是Kubernetes集群的分布式键值存储系统,用于持久化存储集群的所有状态数据,包括:
- 集群配置信息
- 节点状态和健康信息
- Pod、Service等资源对象的定义和状态
- ConfigMap、Secret等配置数据
etcd是集群的数据基石,其可用性直接决定了集群的可用性。CCE Standard/Turbo集群的控制面中,etcd由云平台托管维护,用户无需管理。
kubelet
kubelet是运行在每个节点上的代理,负责:
- 向API Server上报节点和Pod状态
- 接收Pod配置并确保容器按规范运行
- 执行健康检查,重启失败的容器
- 挂载存储卷
更多关于kubelet的说明,请参见kubelet。
kube-proxy
kube-proxy运行在每个节点上,维护网络规则,实现Service的流量转发。kube-proxy通过监听API Server中Service和Endpoints的变化,动态更新iptables或IPVS规则,将到达Service的流量转发到后端Pod。
更多关于kubelet的说明,请参见kube-proxy。
模板(Chart)
Kubernetes集群可以通过Helm实现软件包管理,这里的Kubernetes软件包被称为模板(Chart)。Helm对于Kubernetes的关系类似于在Ubuntu系统中使用的apt命令,或是在CentOS系统中使用的yum命令,它能够快速查找、下载和安装模板(Chart)。
模板(Chart)是一种Helm的打包格式,它只是描述了一组相关的集群资源定义,而不是真正的容器镜像包。模板中仅仅包含了用于部署Kubernetes应用的一系列YAML文件,您可以在Helm模板中自定义应用程序的一些参数设置。在模板的实际安装过程中,Helm会根据模板中的YAML文件定义在集群中部署资源,相关的容器镜像并不会包含在模板包中,而是依旧从YAML中定义好的镜像仓库中进行拉取。
- 对开发者:需要将容器镜像包发布到镜像仓库,并通过Helm的模板将安装应用时的依赖关系统一打包,预置一些关键参数,来降低应用的部署难度。
- 对使用者:可以使用Helm查找模板(Chart)包并支持调整自定义参数。Helm会根据模板包中的YAML文件直接在集群中安装应用程序及其依赖,应用使用者不用编写复杂的应用部署文件,即可以实现简单的应用查找、安装、升级、回滚、卸载。
关于模板的更多操作请参见模板概述。
