云原生学习笔记(九) 初识Kubernetes

131 阅读3分钟

Kubernetes 不只是容器编排,它代表了一种“状态驱动”运维模式:你描述期望状态,系统自动发现偏差并修复。


🧩 背景:容器难题与 Kubernetes 的诞生

容器解决了打包和隔离的问题,却留下了新的挑战:

  • 容器挂掉后谁负责重启?
  • 如何统一管理成百上千个服务?
  • 配置、存储、权限如何集中控制?

Kubernetes 的出现,正是为了解决这些复杂性,让系统像“自愈生物”一样运行。


🧠 一、核心思想:声明式 + 控制循环

Kubernetes 的运作基于两个关键概念:

  1. 声明式配置:你只需写下想要的状态(YAML)
  2. 控制循环:系统不断对比当前状态与期望状态,并做出修正
# 示意:我想要三个副本
replicas: 3

并非“请一次性创建 3 个 Pod”,而是“系统始终保持 3 个运行实例”。


📦 二、资源对象:系统的建模单元

在 Kubernetes 中,一切都是资源:

类型说明
Pod最小运行单位
Deployment副本管理与滚动升级
Service负载均衡与服务发现
ConfigMap非敏感配置管理
Secret密钥和敏感数据存储
PersistentVolume + Claim持久化存储

每个资源均包含:

metadata: # 资源标识、标签
spec:     # 期望状态
status:   # 实际状态(只读)

系统的所有动作均由这些对象的 spec 驱动。


🏷 三、标签与注解:不只是标记,而是系统语言

  • Label:参与控制器、Service、策略选择,类似“路由标签”
  • Annotation:附加额外信息,仅供人或工具参考,不影响调度
metadata:
  labels:
    app: frontend
  annotations:
    build: "2025-06-18"

误区:以为 label 只为检索——实际上,这是系统内部定位资源的关键机制。


🔄 四、生命周期:删除也有学问

Kubernetes 并非简单地 delete 就完事:

  • Finalizer:在删除前挂钩,让控制器做额外清理(如卸载存储)
  • OwnerReference:父子资源关联,父对象删除时级联清理子资源

示例:删除 Deployment 会自动清理关联的 ReplicaSet 和 Pod。


⚙️ 五、控制平面 & 工作节点:团队协作分工

部分组件职责
控制平面kube-apiserver, etcd, scheduler, controller-manager接收配置、调度决策并下发任务、存储集群状态
工作节点kubelet, kube-proxy, container runtime运行 Pod、实现网络、连接容器运行时

理解数据流:API Server → 控制器 → kubelet → 容器


🔌 六、API & 扩展:CRD 与 Operator

  • 所有资源皆 API 对象,支持 CRUD、Watch ;
  • CRD(自定义资源)让你定义新类型;
  • Operator 通过控制器模式将业务逻辑纳入集群自愈体系。

可以自己实现 Database 资源,并让 Operator 自动在云上创建数据库实例。


🔒 七、命名空间与隔离:租户 vs 环境

  • Namespace:逻辑隔离,便于多团队/多环境管理;
  • 默认不隔离网络,需配合 NetworkPolicy;
  • 应从 Day-1 规划命名空间策略和资源配额。

📋 八、误区与建议:从实践中学习

误区建议
只关注 YAML 写对即可同步关注 status 与事件,观察控制器行为
随意命名 Label按官方 Common Labels 规范,便于工具集成
使用 default Namespace按团队/环境划分 Namespace,防止资源冲突
误以为 Namespace 自动隔离网络必配 NetworkPolicy 才能真正实现网络层隔离

✅ 总结:从手动到自愈,Kubernetes 的价值在于

  1. 状态驱动:写意图,不写过程;
  2. 抽象化建模:用资源对象描述系统;
  3. 自愈闭环:系统自动对比并修正偏差;
  4. 扩展性:CRD + Operator 构筑业务自愈平台。

Kubernetes 是一种“系统治理语言”,学会它,就是学会让基础设施自己运维。