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 小时前
Docker Compose 本地环境搭建:独立 Compose + 共享网络 + .env 统一管理(架构设计篇)
网络·docker·容器
张3232 小时前
角色与内容集合:自动化配置的标准化复用机制
运维·自动化·ansible
岳来2 小时前
docker 容器文件 hostconfig.json 和 config.v2.json 的区别
docker·容器·hostconfig.json·config.v2.json
AI服务老曹2 小时前
深度解析:基于 Docker 与 GB28181 的异构计算 AI 视频管理架构,如何实现 X86/ARM 与 GPU/NPU 的全场景兼容?
运维·docker·容器
Elastic 中国社区官方博客2 小时前
使用 Elastic Observability 和 MCP 的 Agentic 驱动 Kubernetes 调查
数据库·elasticsearch·搜索引擎·云原生·容器·kubernetes·全文检索
阿正的梦工坊2 小时前
DOCKER_DATABASE_URL 逐段解析:部署时候的信息解析
数据库·docker·容器
郝开3 小时前
Docker Compose 本地环境搭建:nacos
运维·docker·容器
旷世奇才李先生3 小时前
Docker\+K8s的核心价值与应用场景
docker·容器·kubernetes
梵得儿SHI3 小时前
SpringCloud 生产级落地:Docker 容器化 + K8s 编排部署全攻略(含完整 yaml + 避坑指南)
docker·云原生·kubernetes·k8s·springcloud·微服务部署·java 后端