Kubernetes 核心概念

一、整体概览

Kubernetes 的核心目标是:

自动化部署、扩缩容和管理容器化应用

核心思想可以浓缩为一句话:

Controller 管 Pod,Service 找 Pod,DNS 记名字


二、Pod(最小可部署单元)

2.1 Pod 是什么

  • Pod 是 Kubernetes 中 最小的调度和部署单位
  • 一个 Pod 可以包含:
    • 一个容器(最常见)
    • 多个强耦合容器
形象类比
概念 类比
Container 一颗豌豆
Pod 一个豌豆荚
Node 一根豌豆藤
Cluster 一整块豌豆田

Pod ≈ 一台逻辑服务器


2.2 Pod 的核心特性

  • Pod 内的容器 共享
    • 网络(同一个 IP)
    • 存储(Volume)
  • Pod 生命周期短暂
  • Pod 通常不会单独创建,而是由 Controller 管理

2.3 Pod 示例(基础)

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80

在这里插入图片描述

三、Controller(自动化运维核心)

3.1 Controller 是什么

Controller 是 Kubernetes 的 控制回路(Control Loop)

  • 持续监控集群状态
  • 当前状态 调整为 期望状态

类比:房间的自动温控器


3.2 常见 Controller 类型

3.2.1 Deployment(无状态应用)
  • 最常用 Controller
  • 特点:
    • Pod 无顺序
    • 可随意扩缩容
    • 支持滚动升级

典型场景:Web 服务、API 服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25

在这里插入图片描述

3.2.2 StatefulSet(有状态应用)
  • Pod 启动顺序固定
  • Pod 名称唯一
  • 数据持久化

典型场景:MySQL、Redis、Kafka

记忆口诀:名字不变、顺序不乱、数据不丢


3.2.3 DaemonSet(守护进程)
  • 保证每个 Node 上运行一个 Pod
  • 常用于:
    • 日志采集
    • 监控 Agent
    • 网络组件

3.2.4 Job / CronJob
类型 作用
Job 一次性任务
CronJob 定时任务

3.3 Controller 自动修复示例

kubectl delete pod tomcat-test-xxx

几秒后:

kubectl get pods
# 新 Pod 自动创建

Pod 挂了不可怕,Controller 会自动拉起新 Pod

在这里插入图片描述

四、Label(资源标签系统)

4.1 Label 是什么

  • Label 是 key=value 形式的键值对
  • 用于 标识、分类和筛选资源
labels:
  app: tomcat
  env: production
  version: v1

4.2 Label 的作用

  • Controller 管理 Pod
  • Service 选择 Pod
  • 灰度发布
  • 多环境区分
  • 资源分组与监控

在这里插入图片描述

4.3 Label 语法规则

  • key / value 最多 63 个字符
  • 支持前缀(DNS 子域)
  • 系统保留前缀:kubernetes.io/
  • 允许字符:
    • 字母、数字
    • - _ .

五、Label Selector(标签选择器)

5.1 两种 Selector 类型

等式选择(Equality-based)
app=tomcat
env!=test
集合选择(Set-based)
env in (dev,prod)
tier notin (frontend)

5.2 类 SQL 理解

SELECT * FROM pod WHERE app = 'tomcat';

六、Service(服务发现与负载均衡)

6.1 Service 解决的问题

  • Pod IP 会变化
  • Pod 会被销毁重建

Service 为一组 Pod 提供 稳定访问入口


6.2 Service 工作原理

  • 通过 Label Selector 绑定 Pod
  • 底层通过 iptables / ipvs 转发流量
  • 自动负载均衡

6.3 Service 示例(NodePort)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5
        ports:
        - containerPort: 8080

在这里插入图片描述

6.4 查看 Service 与 Endpoints

kubectl get service
kubectl describe service tomcat-service
kubectl get endpoints tomcat-service

在这里插入图片描述

七、Endpoints(Service 的真实后端)

  • Endpoints 记录 Service 对应的 Pod IP
  • Pod 变化时自动更新
  • 一般无需手动管理

八、DNS(集群内名称解析)

8.1 DNS 的作用

  • Service 名称 → ClusterIP
  • Pod 内通过域名访问 Service

完整域名格式:

service-name.namespace.svc.cluster.local

8.2 DNS 验证示例

dig tomcat-service.default.svc.cluster.local @10.96.0.10

在这里插入图片描述

九、核心概念之间的关系

Deployment
   ↓
ReplicaSet
   ↓
Pod  ←── Service ←── DNS

十、Kubernetes 与微服务架构

10.1 架构演进

  1. 单体架构
  2. 分布式架构
  3. 微服务架构(容器化 + Kubernetes)

10.2 LNMT 微服务示例

组件 Kubernetes 资源
NGINX Deployment + Service
Tomcat Deployment + Service
MySQL StatefulSet
DNS CoreDNS

十一、总结

Pod 是运行单元,Controller 负责状态,Label 用于关联,Service 提供访问入口,DNS 让服务像普通网络一样使用

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐