文章目录
- 1. Cluster(集群)
- 2. Control Plane(控制平面)
- 3. Node(节点)
- 4. Pod(容器组)
- 5. Deployment(部署控制器)
- 6. Service(服务)
- 7. Labels(标签)
- 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标签:
metadata:labels:environment:productionapp:nginx8. Label Selector(标签选择器)
Label是资源上的键值对,用于标识和筛选资源。Label Selector用于按标签批量匹配资源,多条件逗号分隔代表逻辑与,原生不支持逻辑或。
匹配方式:
- 等值匹配(
=、==、!=) - 集合匹配(功能更强)
使用场景:
- 场景
1:命令行 /API查询过滤(kubectl list/watch) - 场景
2:控制器内部绑定资源(两种配置字段)matchLabels:仅等值匹配,兼容旧资源Service、RCmatchExpressions:支持全套集合运算符(Deployment、RS、Job、DaemonSet等新版资源支持)
示例,通过-l指定标签筛选:
# 等值匹配kubectl get pods-lenvironment=production,tier=frontend# 集合匹配,多值或kubectl get pods-l'environment in (production,qa)'# 存在该标签kubectl get pods-lpartition示例,Service通过Selector匹配带有指定Label的Pod,从而将流量转发给正确的后端实例。