一文了解:K8s

那个"港口调度中心"K8s:Docker 把货装箱,它负责管全港

文章目录

  • [那个"港口调度中心"K8s:Docker 把货装箱,它负责管全港](#那个"港口调度中心"K8s:Docker 把货装箱,它负责管全港)
    • [0. 开场:集装箱有了,谁来调度整个港口?](#0. 开场:集装箱有了,谁来调度整个港口?)
    • [1. Kubernetes 是什么?一句话,说人话](#1. Kubernetes 是什么?一句话,说人话)
    • [2. 核心原理:K8s 凭什么"自动化"一切?](#2. 核心原理:K8s 凭什么"自动化"一切?)
      • [2.1 整体架构:控制面 + 节点(主从架构)](#2.1 整体架构:控制面 + 节点(主从架构))
      • [2.2 声明式 API + 控制器模式:K8s 的"灵魂"](#2.2 声明式 API + 控制器模式:K8s 的"灵魂")
      • [2.3 Pod:最小的"打包单元"](#2.3 Pod:最小的"打包单元")
      • [2.4 Service & Ingress:让外界"找得到"你的服务](#2.4 Service & Ingress:让外界"找得到"你的服务)
      • [2.5 调度器怎么选节点?](#2.5 调度器怎么选节点?)
    • [3. 实战:K8s 到底"香"在哪?](#3. 实战:K8s 到底"香"在哪?)
      • [3.1 一条命令部署 + 自动扩缩容](#3.1 一条命令部署 + 自动扩缩容)
      • [3.2 常用对象速查](#3.2 常用对象速查)
    • [4. 实际应用场景:K8s 在哪儿大显身手?](#4. 实际应用场景:K8s 在哪儿大显身手?)
      • [4.1 微服务架构:每个服务独立伸缩的"王牌"](#4.1 微服务架构:每个服务独立伸缩的"王牌")
      • [4.2 高可用生产系统:自愈 + 零停机](#4.2 高可用生产系统:自愈 + 零停机)
      • [4.3 流量波动大的应用:活动 / 季节性高峰](#4.3 流量波动大的应用:活动 / 季节性高峰)
      • [4.4 批处理 / 事件驱动:突发任务"即插即用"](#4.4 批处理 / 事件驱动:突发任务"即插即用")
      • [4.5 跨云 / 混合云:避免"厂商锁定"](#4.5 跨云 / 混合云:避免"厂商锁定")
    • [5. 优势与局限:K8s 是"调度王者",但不是"灵丹妙药"](#5. 优势与局限:K8s 是"调度王者",但不是"灵丹妙药")
      • [✅ 优点](#✅ 优点)
      • [⚠️ 缺点 / 坑](#⚠️ 缺点 / 坑)
    • [6. K8s vs Docker:别再混了,它们"分工明确"](#6. K8s vs Docker:别再混了,它们"分工明确")
    • [7. 未来发展:K8s 会过时吗?它只会"越来越像基建"](#7. 未来发展:K8s 会过时吗?它只会"越来越像基建")
      • [7.1 云原生的"操作系统":地位不可动摇](#7.1 云原生的"操作系统":地位不可动摇)
      • [7.2 从"平台"到"上层服务":向 Serverless 演进](#7.2 从"平台"到"上层服务":向 Serverless 演进)
      • [7.3 边缘计算 / AI 训练:K8s 的新战场](#7.3 边缘计算 / AI 训练:K8s 的新战场)
    • [8. 结尾:致敬那个"管着整个港口"的舵手](#8. 结尾:致敬那个"管着整个港口"的舵手)
    • [📚 参考资料](#📚 参考资料)

0. 开场:集装箱有了,谁来调度整个港口?

上一篇我们讲了 Docker------它把你的应用装进"集装箱",到哪儿都能跑。

可问题来了:

你手上有 100 个集装箱 (服务),要铺到 50 条船(服务器)上。谁来决定哪个箱子放哪条船?哪条船翻了,谁来补货?高峰期船不够了,谁来临时加船?船多了闲着的,谁来回收?

如果你靠人工去盯,那画面大概是:运维同事左手拿着对讲机,右手拿着 Excel,凌晨三点还在喊"5 号船的货到 3 号船上去,快!"

这时候,一个叫 Kubernetes (简称 K8s)的家伙出现了。它一拍桌子:

"别慌。整个港口交给我。哪条船、装什么货、翻船了怎么补、高峰期怎么加船,全部自动化。 你只需要告诉我'想要什么',剩下的事我搞定。"

Kubernetes 就是那个管着整个集装箱港口的自动化调度中心。

今天,我们就来扒一扒这位"港口调度中心"------Kubernetes(K8s)。


1. Kubernetes 是什么?一句话,说人话

Kubernetes(K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩缩容、故障恢复和运维管理。

拆开揉碎讲:

  • 编排(Orchestration):不是"管一个容器",而是"管成千上万个容器"。决定它们放哪、怎么跑、挂了怎么办。
  • 名字 :"Kubernetes"来自希腊语,意为"舵手/领航员"。江湖人称 K8s(因为 K 和 s 之间有 8 个字母)。
  • 出身 :源自 Google 的 Borg 系统,Google 用同样的原则每天运行数十亿个容器。2014 年开源,如今是云原生的"事实标准"。

打个比方:Docker 是"单个集装箱 + 吊车",Kubernetes 是"整个港口的调度中心"。没有调度中心,集装箱再多也只是一堆散货。


2. 核心原理:K8s 凭什么"自动化"一切?

2.1 整体架构:控制面 + 节点(主从架构)

Kubernetes 采用"主从架构":

复制代码
┌────────────────── 控制平面 (Control Plane) ──────────────────┐
│  kube-apiserver    ← 一切请求的前门(HTTP API)                │
│  etcd              ← 集群状态的一致、高可用键值存储             │
│  kube-scheduler    ← 决定 Pod 放到哪个节点                     │
│  kube-controller-manager ← 把实际状态往期望状态"收敛"的控制器  │
└───────────────────────────────────────────────────────────────┘
                          │ 管理
┌───────────────────────────────────────────────────────────────┐
│  工作节点 (Node) × N                                            │
│  kubelet           ← 节点上的"代理",听控制面指挥              │
│  kube-proxy        ← 网络代理,负责服务转发                    │
│  Pod               ← 容器的最小部署单元                         │
└───────────────────────────────────────────────────────────────┘

核心组件分工(Azure / Kubernetes 官方):

组件 角色 通俗理解
kube-apiserver 一切请求的"前门"(HTTP API) 港口的"总服务台"
etcd 集群数据的一致、高可用存储 港口的"大账本"(记着所有状态)
kube-scheduler 决定 Pod 放哪个节点 港口的"调度员"(看资源、看亲和性安排泊位)
kube-controller-manager 把实际状态协调到期望状态 港口的"纠错员"(发现不对就改)

2.2 声明式 API + 控制器模式:K8s 的"灵魂"

这是 K8s 最核心的设计思想,一定要理解:

  • 声明式(Declarative) :你只告诉 K8s"想要什么"(期望状态),比如"我要 3 个 Nginx 副本",而不是"去启动 3 个进程"。

  • 控制器(Controller) :是一段控制循环 ,不断"看"集群的当前状态 ,然后把它往期望状态推进。

    期望状态(你想要 3 个副本)
    ↓
    控制器持续观察当前状态(现在只有 1 个)
    ↓
    发现不一致 → 自动补到 3 个(新建 2 个)
    ↓
    当前状态 = 期望状态 → 稳定

这就是"自愈"的底层逻辑:Pod 挂了,控制器发现"实际 2 个 ≠ 期望 3 个",立刻自动补一个。 你根本不用管,它自己就把自己"修"好了。

2.3 Pod:最小的"打包单元"

K8s 不直接管容器,而是管 Pod------容器的"最小部署单元"。一个 Pod 里可以有一个或多个容器,它们共享网络和存储,像"同住一个房间的室友"。

yaml 复制代码
apiVersion: apps/v1
kind: Deployment          # 控制器:管理 Pod 副本
metadata:
  name: nginx-app
spec:
  replicas: 3             # 期望 3 个副本
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels: {app: nginx}
    spec:
      containers:
        - name: nginx
          image: nginx:1.25   # 用 Docker 构建的镜像
          ports: [{containerPort: 80}]

看到 image: nginx:1.25 了吗?这正是上一篇 Docker 的镜像------Docker 装箱,K8s 调度,完美衔接。

2.4 Service & Ingress:让外界"找得到"你的服务

Pod 的 IP 是会变的(挂了重建就换 IP),所以 K8s 用 Service 提供稳定的访问入口(DNS + 负载均衡),用 Ingress 管理外部 HTTP 流量的进入。

复制代码
用户请求
   ↓
Ingress(外部入口,类似 Nginx)
   ↓
Service(稳定的服务名 + 负载均衡)
   ↓
Pod / Pod / Pod(实际干活的容器,随时可能重建)

这就解释了上一篇说的:Nginx 是 K8s Ingress 的事实标准------Ingress 这层,很多时候就是跑着 Nginx。

2.5 调度器怎么选节点?

kube-scheduler 决定 Pod 放哪个节点时,会综合考量:资源需求(CPU/内存)、硬件/软件约束、亲和性与反亲和性、数据就近等因素,尽量"装箱"装得高效(官方叫自动装箱 autopilot / bin-packing)。


3. 实战:K8s 到底"香"在哪?

3.1 一条命令部署 + 自动扩缩容

bash 复制代码
kubectl create deployment myapp --image=myapp:v1   # 部署
kubectl scale deployment myapp --replicas=5        # 手动扩到 5 个
kubectl rollout status deployment/myapp            # 查看滚动更新状态
kubectl rollout undo deployment/myapp              # 一键回滚

声明式 YAML 才是 K8s 的正确姿势 (见上文 Deployment 示例),用 kubectl apply -f deploy.yaml 应用即可。

3.2 常用对象速查

对象 作用 一句话理解
Pod 最小部署单元 容器的"房间"
Deployment 管理 Pod 副本 + 滚动更新 管"要几个 + 怎么升级"
Service 稳定访问入口 + 负载均衡 给 Pod 一个"固定门牌"
Ingress 外部 HTTP 流量入口 港口的"大门"
ConfigMap / Secret 配置与密钥 给应用"送材料"
Namespace 逻辑隔离 港口的"分区"

4. 实际应用场景:K8s 在哪儿大显身手?

4.1 微服务架构:每个服务独立伸缩的"王牌"

微服务多、依赖复杂、流量不均------K8s 正是为此而生。单独扩容某个服务,而不必扩整个应用,这是 K8s 最擅长的。

4.2 高可用生产系统:自愈 + 零停机

支付、流媒体、协作工具这类实时系统,依赖自动化把停机时间压到最低。K8s 的自愈、滚动更新、自动回滚,让"服务永不宕机"成为可能。

Kubernetes 官方:K8s 会分步骤上线变更,同时监控应用健康,不会一次性杀死所有实例;出问题会自动回滚。

4.3 流量波动大的应用:活动 / 季节性高峰

电商大促、季节性活动,流量忽高忽低。K8s 的自动扩缩容 跟着负载走:高峰加副本,低谷减副本------既扛得住洪峰,又不浪费资源。

4.4 批处理 / 事件驱动:突发任务"即插即用"

定时批处理、消息驱动的突发任务,K8s 能快速加容量、干完就缩,弹性十足。

4.5 跨云 / 混合云:避免"厂商锁定"

同一套 K8s 工作负载,能在任意云(AWS/Azure/阿里云)或自建机房无缝运行,从应用层避免被某家云厂商"绑架"------这是企业最看重的点之一。

PingCAP 官方案例:借助 K8s Operator,TiDB 集群能在云端无需停机地部署、升级、运维,资源利用率显著提升。


5. 优势与局限:K8s 是"调度王者",但不是"灵丹妙药"

✅ 优点

优点 说明
自动化运维 自愈、自动扩缩容、滚动更新、自动回滚,大幅减少人工
可移植性 任意云 / 本地环境运行一致,避免厂商锁定
弹性伸缩 按负载自动加减副本,扛洪峰不浪费
声明式管理 "要什么"交给它,它自己往目标状态收敛
生态庞大 200+ 认证发行版,配套 Prometheus/Grafana/Istio 等全链路

⚠️ 缺点 / 坑

缺点 说明
学习曲线极陡 概念多(Pod/Service/控制器/网络),新手容易懵
运维复杂 自己搭集群、排故障,比 Docker 复杂一个量级
资源开销 控制面 + 组件本身也占资源,小项目可能"杀鸡用牛刀"
网络/存储配置繁琐 CNI、存储卷、Ingress 等配置项多,坑不少
小项目过重 单机、小规模应用,用 K8s 反而增加负担

诚实提醒 :K8s 强大,但"不是所有项目都该上 K8s"。杀鸡不必用牛刀------先判断规模,再决定是否引入。


6. K8s vs Docker:别再混了,它们"分工明确"

这是最常见的误区,Azure 和 Docker 官方都专门澄清过:

维度 Docker Kubernetes
角色 容器化(打包 + 运行单个容器) 容器编排(管理成千上万个容器)
定位 让应用"装箱"并跑起来 让海量容器自动部署、伸缩、调度、自愈
类比 单个集装箱 + 吊车 整个港口的调度中心
能力 单机 run / Compose 副本、自动扩缩、滚动更新、负载均衡、故障恢复

一句话 :Docker 负责"把一个服务打包好、跑起来",K8s 负责"在成百上千台机器上,自动管理成千上万个容器"。它们是黄金搭档,不是竞争对手。


7. 未来发展:K8s 会过时吗?它只会"越来越像基建"

7.1 云原生的"操作系统":地位不可动摇

Kubernetes 已被普遍视为"云原生的操作系统"------它是云时代的 Linux。几乎所有新基础设施都围绕它构建,地位极其稳固。

7.2 从"平台"到"上层服务":向 Serverless 演进

  • K8s 之上长出各种上层服务:Serverless(如 Knative)、Service Mesh(Istio)、可观测性(Prometheus/Grafana)。
  • 云厂商托管(EKS、AKS、GKE、阿里云 ACK):企业"免运维"用 K8s,门槛大幅降低。

7.3 边缘计算 / AI 训练:K8s 的新战场

  • 边缘计算:把 K8s 轻量化(K3s、KubeEdge),推向物联网和边缘节点。
  • AI 基础设施 :GPU 调度、训练/推理工作负载,越来越多跑在 K8s 上------K8s 正成为 AI 时代的算力调度底座。

一句话展望:K8s 已经 10 多岁,但"自动化 + 可移植 + 生态"的底子让它不会过时 ------它只会像 Linux 一样,继续做那个管着全球容器港口的隐形调度中心。


8. 结尾:致敬那个"管着整个港口"的舵手

还记得文章开头那个凌晨三点还在喊"5 号船货挪到 3 号船"的运维吗?

有了 K8s,他终于可以睡个好觉了:

"你不用管哪条船装什么货、翻船了怎么办。你只要说'我想要 3 个 Nginx',剩下的,港口自己搞定。"

它把"容器太多管不过来"的噩梦,变成了"声明一下,剩下的交给它"的轻松日常。

程序员最浪漫的事,莫过于此:

你写的一段 Deployment YAML,可能正让成千上万个容器,在全世界自动地奔跑、自愈、伸缩着。

所以,当你的服务多到 Docker 一个人忙不过来时,别硬扛------是时候请出这位"港口调度中心"了。

愿你的每一个 Deployment,都一直 Available;愿你的每一次 rollout,都永不回滚。


友情提示:K8s 虽强,但别一上来就全家桶。先 Docker,再 Compose,规模真大了才上 K8s------循序渐进,才不会被"牛刀"反噬。

如果这篇文章让你想动手试试 K8s,别忘了点个赞------就当给那位"管着全球集装箱港口"的舵手,加个鸡腿。


📚 参考资料

相关推荐
java_logo2 小时前
Docker 部署 Portainer CE 中文版:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer ce
SelectDB16 小时前
安全评审卡了三周,我把部署形态的四种选项重新排了一遍
大数据·数据库·云原生
阿里云云原生17 小时前
完整还原已经服务千家企业的 AIOps Agent 的评测和调优实践
云原生
阿里云云原生17 小时前
让 Agent 成为企业生产力丨Alibaba Cloud AgentCore 企业智能体构建与治理沙龙·上海站精彩回顾 & PPT 下载
云原生·agent
csdn_aspnet19 小时前
Docker Prune:完整指南与上手示例
运维·docker·容器·prune
阿里云云原生19 小时前
交付周期从 51 天缩短到 14 天,多 Agent 协作产品⾃进化背后的组织重构
云原生·agent
阿里云云原生19 小时前
从部署上线到运维优化:STAROps 与 ROS Agent 的资源运维自动化实践
云原生
谢白羽21 小时前
从传统运维到 AI Infra: K8s 上调度 100 张 GPU踩坑笔记
运维·人工智能·缓存·kubernetes·vllm·sglang·vllm-omni
xianyuCcCcCCCcc1 天前
Kubernetes 资源调度与弹性伸缩:Schedule、Metric、HPA 与 Quota
云原生·kubernetes