文章目录
- [1. Cluster(集群)](#1. Cluster(集群))
- [2. Control Plane(控制平面)](#2. Control Plane(控制平面))
- [3. Node(节点)](#3. Node(节点))
- [4. Pod(容器组)](#4. Pod(容器组))
- [5. Deployment(部署控制器)](#5. Deployment(部署控制器))
- [6. Service(服务)](#6. Service(服务))
- [7. Labels(标签)](#7. Labels(标签))
- [8. Label Selector(标签选择器)](#8. Label Selector(标签选择器))
1. Cluster(集群)
Kubernetes 是可直接用于生产环境的开源编排平台,负责调度容器应用在多台服务器组成的集群中运行。它将多台服务器构建成高可用集群,对外呈现为一个整体。依托平台的抽象能力,我们能够直接将容器应用部署到集群,无需绑定到单台物理主机。
想要使用该部署模式,应用必须打包为容器,实现与宿主机解耦。对比传统直接在物理机安装软件的模式,容器化应用更灵活、可用性更强。Kubernetes 能够自动完成容器在集群中的分发与调度,提升硬件资源利用率,并且开源免费,支持直接部署到生产环境。

一个集群包含两大资源:
- 控制平面 (
Control Plane):全局统一管理整个集群 - 节点 (
Node):执行业务、运行容器的工作机器
工作流程:
- 用户向控制平面下发部署指令,控制平面把容器调度到各个节点运行。
- 节点上的
kubelet通过Kubernetes API与控制平面持续通信。 - 开发人员也可以直接调用
API来操作集群。
2. Control Plane(控制平面)
统一管控集群整体以及所有业务节点,统筹集群全部运维工作,包含应用调度、维持副本期望状态、弹性扩缩容、新版本灰度发布。

在旧版本 Kubernetes 中,集群管控节点叫做 Master 节点,1.24 版本之后正式废弃 Master 叫法,统一命名为 Control Plane(控制平面)。
查看节点状态时,角色也是 control-plane :

3. Node(节点)
节点可以是物理服务器或虚拟机,承担集群的业务负载 。每个节点都会运行 kubelet 代理进程,管理本机容器,并与控制平面交互。节点还需要安装容器运行时,如 containerd、CRI-O 等。

4. Pod(容器组)
Pod 是 Kubernetes 中最小的调度单元。
一个 Pod 可以包含一个或多个容器,并共享:
- 网络命名空间。
IP地址。- 存储卷。
- 运行上下文。
通常情况下,一个 Pod 只运行一个主业务容器。只有容器之间强耦合、需要共享网络或磁盘时,才建议将多个容器放在同一个 Pod 中。

5. Deployment(部署控制器)
Deployment 是 Kubernetes 最常用的控制器,用来声明应用的期望运行状态,由集群自动维持状态,不用人工干预。创建 Deployment 后,控制平面会根据集群资源情况,将 Pod 调度到合适的 Node 上运行。

核心能力:
- 创建
Pod副本:根据配置自动拉起指定数量的业务Pod。 - 持续维持副本数量:一旦
Pod崩溃、节点故障,立刻自动新建Pod补齐数量,实现自愈。 - 弹性扩缩容:随时修改副本数,集群自动增加或减少实例。
- 滚动版本升级:新版本逐步替换旧
Pod,业务不中断,升级失败可以一键回滚。
运行流程:
- 开发者编写配置,声明副本数量、镜像版本;
Deployment把配置提交给控制平面;- 调度器将
Pod调度到合适的Node节点运行; - 控制器不间断监控
Pod状态,保证始终符合期望。
6. Service(服务)
Pod 会频繁重建,IP 地址不断变化,外部无法固定访问。如果使用 Deployment 运行您的应用程序,Deployment 将会在 Pod 消亡后再创建一个新的 Pod 以维持所需要的副本数。Pod 的 IP 会随着 Pod 重建而变化,因此不能直接依赖 Pod IP 对外提供稳定访问。
Service 用于为一组 Pod 提供稳定访问入口,并支持服务发现和负载均衡:

常见 Service 类型:
| 类型 | 说明 |
|---|---|
| ClusterIP | 默认类型,仅集群内部访问 |
| NodePort | 在每个节点开放端口,可通过 节点IP:端口 访问 |
| LoadBalancer | 云环境中创建外部负载均衡 |
| ExternalName | 将服务映射到外部域名 |
7. Labels(标签)
标签是附加在 Pod、Node、Deployment 等所有 K8s 资源上的键值对 (key/value),仅用于人工 / 程序筛选、归类资源,对 K8s 内核无强制语义约束。
语法限制:
Key:可选前缀+名称,总长≤253,名称≤63字符;k8s.io/为系统保留前缀Value:≤63字符,允许空值,首尾只能是数字字母
示例 Pod 标签:
yml
metadata:
labels:
environment: production
app: nginx
8. Label Selector(标签选择器)
Label 是资源上的键值对,用于标识和筛选资源。Label Selector 用于按标签批量匹配资源,多条件逗号分隔代表逻辑与,原生不支持逻辑或。
匹配方式:
- 等值匹配(
=、==、!=) - 集合匹配(功能更强)
使用场景:
- 场景
1:命令行 /API查询过滤(kubectl list/watch) - 场景
2:控制器内部绑定资源(两种配置字段)matchLabels:仅等值匹配,兼容旧资源Service、RCmatchExpressions:支持全套集合运算符(Deployment、RS、Job、DaemonSet等新版资源支持)
示例,通过 -l 指定标签筛选:
bash
# 等值匹配
kubectl get pods -l environment=production,tier=frontend
# 集合匹配,多值或
kubectl get pods -l 'environment in (production,qa)'
# 存在该标签
kubectl get pods -l partition
示例,Service 通过 Selector 匹配带有指定 Label 的 Pod,从而将流量转发给正确的后端实例。
