K8s是什么?——第一集:从“搬箱子”到“自动化仓库”的革命

云原生入门系列|第1集:K8s是什么?------从"搬箱子"到"自动化仓库"的革命

1. 引子:运维到底在忙什么?

假设你是一家电商公司的运维工程师。以前,公司只有一两个应用,跑在几台物理服务器上。每次上线,你需要手动登录服务器,拉取代码,重启进程。万一服务器宕机,你得半夜爬起来抢修。

后来,公司开始用 Docker 容器。每个应用被打包成一个个"集装箱" ------ 环境一致、依赖隔离。你写了个脚本,一键启动10个容器,感觉轻松了不少。

但问题又出现了:流量高峰时,你需要手动增加容器数量;某个容器挂了,你要手动重启;多个容器之间怎么通信?怎么让用户通过一个域名访问到不同服务?你发现,光靠脚本已经管不过来了。

这时候,Kubernetes(简称 K8s) 登场了。它就像一个"自动化物流仓库",你把容器(箱子)交给它,它自动负责:

  • 放在哪个货架(节点)
  • 维持多少箱(副本数)
  • 箱子坏了自动换新(自愈)
  • 货物进出路由(网络)
  • 根据订单量增减箱子(弹性伸缩)

一句话:K8s 是容器的"操作系统",帮你管理成千上万个容器的生命周期。

2. K8s 名字由来

Kubernetes 是希腊语"舵手"的意思。因为单词太长,社区取了缩写 K8s ------ K 和 s 之间有 8 个字母,和 "internationalization → i18n" 类似。

3. K8s 能做什么? ------ 四个核心能力

能力 解释 没有K8s时 有了K8s
自动部署与回滚 你可以声明"我要运行nginx:1.20",K8s自动部署;升级到1.21失败,自动退回1.20。 手动改镜像、重启,回滚要重新打包。 kubectl set image 一行命令完成,错误自动停。
服务发现与负载均衡 容器A访问容器B,不需要知道B的IP,只要知道Service名字。K8s自动做负载均衡。 写死IP或自己维护DNS,容器漂移后IP变化就废了。 K8s内置DNS和VIP,容器挂了自动摘除。
存储编排 自动挂载你需要的存储(本地、云硬盘、NFS等),容器重启后数据不丢。 手动挂载宿主机目录,多节点下数据不同步。 声明PVC,K8s会自动分配存储并挂载。
自我修复 如果容器健康检查失败,K8s会重启它;如果节点宕机,会在健康节点重建容器。 需要外部监控脚本或人工介入。 K8s controller loop 持续尝试达到期望状态。

4. K8s 的架构(极简版)

K8s 集群由两部分组成:

  • 控制平面(Master):集群的"大脑",负责调度、维护状态、暴露API。
  • 工作节点(Node):真正运行容器的机器,每个节点上有一个 kubelet(管家)和容器运行时(如 Docker)。

你可以用 kubectl get nodes 查看节点列表。

5. 最小的部署单元不是容器,是 Pod

很多初学者以为 K8s 直接运行容器。不,它运行的是 Pod ------ 一个Pod里可以有1个或多个容器,这些容器共享网络和存储,像一个"逻辑主机"。

例如,你有一个业务容器需要实时收集日志,然后推送到中心。你可以设计一个Pod包含两个容器:

  • 主容器:运行你的业务应用
  • Sidecar容器:负责收集日志并发送

这样两个容器可以共享同一个Pod IP,通过 localhost 互相访问。

6. 声明式API ------ 告诉K8s"要什么",而不是"怎么做"

K8s 的核心思想是声明式。你写一个 YAML 文件,描述最终想要的状态(比如:运行3个nginx Pod),K8s 会持续调整实际状态,使之与期望状态一致。

命令式(旧方式):

bash 复制代码
docker run -d --name nginx nginx
 如果容器挂了,没有人重新拉起。

声明式(K8s方式):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        image: nginx
     保存为 deploy.yaml,执行 kubectl apply -f deploy.yaml。K8s 会确保永远有3个nginx Pod在运行。

7. 一个最简单的K8s操作体验
假设你已经装好 minikube(本地单节点集群),试试下面的流程:   
# 创建一个 Deployment
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

# 查看 Pod
kubectl get pods

# 把这个 Deployment 暴露成 Service(允许外部访问)
kubectl expose deployment hello-minikube --type=NodePort --port=8080

# 获取访问地址
minikube service hello-minikube --url
浏览器打开那个 URL,你会看到请求信息。这就是一个完整的最小应用:部署 + 服务暴露。

}
  1. 为什么现在是学习K8s的最好时机?
    岗位需求爆炸:几乎所有中大型企业招聘后端/运维/云原生岗位,都要求"熟悉 K8s"。

技术成熟稳定:K8s 已经诞生近十年(1.0 发布于2015年),社区文档、学习资源非常丰富。

上手门槛降低:minikube、kind、k3s 等工具让你笔记本就能跑起完整集群。

AI 基础设施:大模型训练平台(如Kubeflow、Ray on K8s)都基于 K8s 构建。

  1. 本系列学习路线图
    我们计划用30篇文章,从零基础到能够独立部署一个微服务应用。路线如下:

基础篇(第1-10集):核心概念:Pod、Deployment、Service、Ingress、ConfigMap、Secret、Volume。

进阶篇(第11-20集):调度、存储、网络、安全、监控。

实战篇(第21-30集):CI/CD、Helm、服务网格、Operator、故障排查。

每一篇文章都会配有可运行的命令和YAML示例,你可以一边读一边在 minikube 上练习。

  1. 下一集预告
    第2集我们将手把手在本地搭建 K8s 实验环境(minikube 或 kind),并成功运行第一个 Pod。敬请期待!

本内容为《云原生入门系列》第1集,订阅专栏后可获取全部30集。

相关推荐
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生4 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭4 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美5 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康9 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
shushangyun_12 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉12 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造