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,从而将流量转发给正确的后端实例。

相关推荐
云烟成雨TD3 小时前
Kubernetes 系列【3】使用 kubeadm 创建 K8s 集群
云原生·容器·kubernetes
江畔柳前堤5 小时前
第13章:docker生产环境部署实战
运维·git·docker·容器·代码复审
潘正翔7 小时前
docker基础_镜像使用
linux·运维·服务器·docker·容器·centos·devops
江湖有缘8 小时前
Lunalytics部署指南:使用Docker快速搭建私有监控面板
运维·docker·容器
分布式存储与RustFS8 小时前
RustFS保姆级教程:Docker快速部署兼容S3的本地对象存储
运维·docker·容器·rustfs部署教程·本地搭建s3对象存储·rustfs网页控制台使用·awscli连接rustfs
江湖有缘8 小时前
Docker部署Papra极简文件归档平台
运维·docker·容器
艾文伯特9 小时前
k8s-1.35-centos7-安装文档
云原生·容器·kubernetes
qq_3494479510 小时前
十四、k8s集群安装kube-state-metrics 组件
docker·容器·kubernetes
AOwhisky10 小时前
Kubernetes(K8s)学习笔记(第十四期):集群存储与有状态应用(下篇):StatefulSet 有状态应用管理
redis·笔记·mysql·云原生·kubernetes·云计算·k8s