第 1 章 先弄懂:为什么需要 Kubernetes
从一个网站讲起
假设你写了一个小网站。最初只需在电脑上启动程序,就能从浏览器访问。后来要让别人访问,你把它放到服务器上。服务器重启怎么办?程序退出怎么办?访问量增加后要开三份程序怎么办?更新版本时如何尽量减少中断?这时你开始需要一套管理运行过程的方法。
容器先解决“把程序连同运行环境打包”的问题。镜像是一份可分发的模板,容器是用这份模板启动的进程实例。镜像像菜谱加备好的食材,容器像实际做出来的一份菜。这个比喻只帮助记忆:容器本质上仍然是进程,不是完整虚拟机。
Kubernetes 再解决“很多容器怎么持续运行”的问题。你告诉它希望有三份应用,它观察实际状态,如果只剩两份,就尝试补回一份。这个不断缩小实际状态与期望状态差距的过程,叫作协调。
它能做什么,不能替你做什么
Kubernetes 可以调度应用到节点,维持副本数,提供服务发现,组织滚动更新,并按配置执行健康检查。它不会自动修好程序逻辑错误,也不会自动替你设计数据库备份。配置了三个副本,也不代表应用天然高可用:如果三个副本都依赖同一处故障点,仍可能一起不可用。
如果你只是运行一个个人脚本,直接启动进程或者使用 Docker Compose 可能更合适。学习 Kubernetes 的价值,是理解应用规模扩大后,系统如何声明、调度和恢复。
你需要先掌握的终端知识
终端是用文字控制电脑的入口。cd 切换目录,ls 列出文件,mkdir 建目录。命令执行完没有输出,可能代表成功;遇到错误要读完整信息,尤其是最后几行。
mkdir k8s-practice
cd k8s-practice
pwdpwd 显示当前目录。后续 YAML 文件都放在这里,避免不知道文件保存到了哪里。代码块内的命令不带提示符 $,可以直接复制。出现 <名称> 这样的占位符时,需要替换为实际值;不要原样执行。
本章自测:镜像与容器有什么区别?Kubernetes 可以保证程序永远没有 bug 吗?如果期望三个副本而实际只有两个,控制器会尝试做什么?