Kubernetes 系列【4】基础概念

文章目录

  • [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 可以包含一个或多个容器,并共享:

  1. 网络命名空间。
  2. IP 地址。
  3. 存储卷。
  4. 运行上下文。

通常情况下,一个 Pod 只运行一个主业务容器。只有容器之间强耦合、需要共享网络或磁盘时,才建议将多个容器放在同一个 Pod 中。

5. Deployment(部署控制器)

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

核心能力:

  • 创建 Pod 副本:根据配置自动拉起指定数量的业务 Pod。
  • 持续维持副本数量:一旦 Pod 崩溃、节点故障,立刻自动新建 Pod 补齐数量,实现自愈。
  • 弹性扩缩容:随时修改副本数,集群自动增加或减少实例。
  • 滚动版本升级:新版本逐步替换旧 Pod,业务不中断,升级失败可以一键回滚。

运行流程:

  1. 开发者编写配置,声明副本数量、镜像版本;
  2. Deployment 把配置提交给控制平面;
  3. 调度器将 Pod 调度到合适的 Node 节点运行;
  4. 控制器不间断监控 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. 等值匹配(=、==、!=)
  2. 集合匹配(功能更强)

使用场景:

  • 场景 1:命令行 / API 查询过滤(kubectl list/watch)
  • 场景 2:控制器内部绑定资源(两种配置字段)
    • matchLabels:仅等值匹配,兼容旧资源 Service、RC
    • matchExpressions:支持全套集合运算符(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,从而将流量转发给正确的后端实例。

相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS3 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun4 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)4 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang4 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿4 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl4 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、4 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove4 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21