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 代理进程,管理本机容器,并与控制平面交互。节点还需要安装容器运行时,如 containerdCRI-O 等。

4. Pod(容器组)

PodKubernetes 中最小的调度单元。

一个 Pod 可以包含一个或多个容器,并共享:

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

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

5. Deployment(部署控制器)

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

核心能力

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

运行流程

  1. 开发者编写配置,声明副本数量、镜像版本;
  2. Deployment 把配置提交给控制平面;
  3. 调度器将 Pod 调度到合适的 Node 节点运行;
  4. 控制器不间断监控 Pod 状态,保证始终符合期望。

6. Service(服务)

Pod 会频繁重建,IP 地址不断变化,外部无法固定访问。如果使用 Deployment 运行您的应用程序,Deployment 将会在 Pod 消亡后再创建一个新的 Pod 以维持所需要的副本数。PodIP 会随着 Pod 重建而变化,因此不能直接依赖 Pod IP 对外提供稳定访问。

Service 用于为一组 Pod 提供稳定访问入口,并支持服务发现和负载均衡:

常见 Service 类型:

类型 说明
ClusterIP 默认类型,仅集群内部访问
NodePort 在每个节点开放端口,可通过 节点IP:端口 访问
LoadBalancer 云环境中创建外部负载均衡
ExternalName 将服务映射到外部域名

7. Labels(标签)

标签是附加在 PodNodeDeployment 等所有 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:仅等值匹配,兼容旧资源 ServiceRC
    • matchExpressions:支持全套集合运算符(DeploymentRSJobDaemonSet 等新版资源支持)

示例,通过 -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 匹配带有指定 LabelPod,从而将流量转发给正确的后端实例。

相关推荐
这个DBA有点耶4 分钟前
从DBA到数据架构师(五):数据架构演进中的技术债务管理
数据库·程序人生·云原生·架构·dba·数据库管理员
猫吃了源码2 小时前
k9s简介和安装
linux·docker·kubernetes
云原生指北3 小时前
Docker Sandboxes 上手:从安装到第一次跑 Agent
运维·docker·容器
霸道流氓气质4 小时前
微服务架构中多实例消息抢占问题:技术解析与解决方案
微服务·云原生·架构
heimeiyingwang5 小时前
【架构实战】Kubernetes故障排查全景图:从Pod异常到集群雪崩的诊断手册
容器·架构·kubernetes
骇客野人6 小时前
Docker Compose 部署多个独立 Jar 服务完整实操步骤
docker·容器·jar
AAA@峥6 小时前
K8s 资源管控:ResourceQuota 与 LimitRange 机制详解与实战
云原生·容器·kubernetes
daoihfoaf6 小时前
太原助听器品质甄选
容器
秦渝兴7 小时前
Ansible 自动化部署 K8s 三节点集群(完整教程)
kubernetes·自动化·ansible
云川之下8 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes