Skip to content

Kubernetes 全景概览

什么是 Kubernetes

Kubernetes(K8s)是 Google 开源的容器编排系统,源自内部的 Borg 系统,2014 年开源,现由 CNCF 托管。它解决了大规模容器化应用的部署、扩缩容、自愈、服务发现等核心问题。

核心价值:声明式 API + 控制循环(Reconcile Loop)= 自动化运维

整体架构

┌─────────────────────────────────────────────────────────┐
│                    Control Plane(控制平面)               │
│  ┌──────────────┐  ┌──────────┐  ┌────────────────────┐ │
│  │  API Server  │  │  etcd    │  │ Controller Manager │ │
│  │  (核心网关)   │  │ (状态存储)│  │  (控制循环引擎)     │ │
│  └──────────────┘  └──────────┘  └────────────────────┘ │
│  ┌──────────────┐  ┌──────────────────────────────────┐ │
│  │  Scheduler   │  │    Cloud Controller Manager      │ │
│  │  (调度决策)   │  │    (云厂商集成)                   │ │
│  └──────────────┘  └──────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
                           │ API
┌─────────────────────────────────────────────────────────┐
│                      Worker Node(工作节点)               │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────────┐ │
│  │   kubelet    │  │  kube-proxy  │  │  Container    │ │
│  │  (节点代理)   │  │  (网络代理)   │  │  Runtime(CRI) │ │
│  └──────────────┘  └──────────────┘  └───────────────┘ │
│  ┌─────────────────────────────────────────────────────┐│
│  │              Pods(容器组)                           ││
│  └─────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────┘

核心组件职责

组件职责关键特性
API Server集群唯一入口,RESTful API 网关认证、授权、准入控制
etcd分布式 KV 存储,保存集群所有状态Raft 共识、强一致性
Scheduler将 Pod 调度到合适的 Node过滤 + 打分两阶段
Controller Manager运行各种控制器,驱动状态收敛Deployment/RS/Node 等控制器
kubelet节点代理,管理 Pod 生命周期与 CRI/CNI/CSI 交互
kube-proxy维护 Service 的网络规则iptables/ipvs 模式

核心设计理念

1. 声明式 API

用户描述期望状态,K8s 负责驱动实际状态向期望状态收敛:

yaml
# 声明:我要 3 个 nginx 副本
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3          # 期望状态
  selector:
    matchLabels:
      app: nginx
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.25

2. 控制循环(Reconcile Loop)

观察(Observe)→ 分析差异(Diff)→ 执行动作(Act)→ 循环

每个 Controller 都在不断执行这个循环,确保实际状态 = 期望状态。

3. 标签与选择器

标签(Labels)是 K8s 中最核心的关联机制:

yaml
# Pod 打标签
metadata:
  labels:
    app: nginx
    version: v1.25
    env: production

# Service 通过选择器关联 Pod
selector:
  app: nginx
  env: production

4. 资源模型

K8s 中一切皆资源(Resource),通过 GVK(Group/Version/Kind)唯一标识:

apps/v1/Deployment
core/v1/Pod
networking.k8s.io/v1/Ingress

API 请求流程

kubectl apply -f deploy.yaml


  API Server
  ├── 认证(Authentication):谁在请求?
  ├── 授权(Authorization):有没有权限?
  ├── 准入控制(Admission):请求合法吗?
  └── 写入 etcd


  Controller Manager 监听到变化


  Scheduler 分配 Node


  kubelet 拉起容器

对象元数据结构

每个 K8s 对象都有统一的结构:

yaml
apiVersion: apps/v1          # GV
kind: Deployment             # Kind
metadata:
  name: my-app               # 名称
  namespace: default         # 命名空间
  labels: {}                 # 标签
  annotations: {}            # 注解
  resourceVersion: "12345"   # 乐观锁版本
  uid: "abc-123"             # 唯一 ID
spec:                        # 期望状态(用户定义)
  ...
status:                      # 实际状态(系统维护)
  ...

命名空间隔离

bash
# 查看所有命名空间
kubectl get namespaces

# 在指定命名空间操作
kubectl get pods -n kube-system

# 跨命名空间查看
kubectl get pods --all-namespaces

学习路径建议

核心架构 → 工作负载 → 网络 → 存储

client-go → Operator 开发

安全 → 可观测性 → 服务网格

CI/CD → 多集群 → Serverless

版本与发布节奏

  • 每年发布 3 个小版本(约每 4 个月一次)
  • 每个版本维护约 14 个月
  • 当前稳定版:v1.30+(2024)

参考资源

本站内容由 褚成志 整理编写,仅供学习参考