第 14 / 18 篇

第 13 章 结业项目:交付你的小站

你要完成的成果

不看前面解释,尝试用一个独立命名空间运行两份网页服务,网页内容来自 ConfigMap,经 Service 提供集群内入口,并能通过本机端口转发访问。Deployment 应包含资源请求、限制、就绪与存活探针。你还要证明自己能恢复失败更新、定位一次错误选择器,并清理资源。

随书 examples/project/ 提供完整起点:namespace.yaml、configmap.yaml、deployment.yaml 和 service.yaml。EPUB 内也已列出所有关键清单;单独拿到电子书的读者,可按第 7、8、6 章依次手工创建相应文件。

在书籍项目目录使用配套文件时:

kubectl config use-context kind-k8s-book
kubectl apply -f examples/project/namespace.yaml
kubectl apply -n k8s-book -f examples/project/configmap.yaml
kubectl apply -n k8s-book -f examples/project/deployment.yaml
kubectl apply -n k8s-book -f examples/project/service.yaml
kubectl rollout status deployment/hello-web -n k8s-book --timeout=120s
kubectl port-forward -n k8s-book service/hello-web 8080:80

若你手工建立了工作目录,就把 examples/project/ 路径替换成实际文件位置。网页出现后,保存一次 Pod 列表和浏览器截图作为自己的学习记录。

验收清单

  1. kubectl get deployment hello-web -n k8s-book 显示两个就绪副本。
  2. 浏览器能看到你自己写的中文欢迎语。
  3. 从集群内访问 http://hello-web 能得到相同页面。
  4. 删除一个 Pod 后,控制器会补建新 Pod。
  5. 错误镜像实验失败后,能通过回滚恢复到健康状态。
  6. Service 选择器故意写错时,能从后端和标签找到原因,再恢复。
  7. 能解释为什么这个项目还不是生产部署。

本轮发布已在隔离 kind 集群中实际完成这些验收,并额外检查 HTTP 就绪失败不重启、存活失败后重启、PVC 换 Pod 保留、CPU 请求过大和节点选择器不匹配时的调度失败。自动化入口为 lab/run_kind.py,配套实验包可下载源文件;运行记录见 交付记录。

这些结果来自记录中的 CI 版本与场景,没有在你的电脑上替你执行。没有验证 HPA、NetworkPolicy 执行、多节点容错、节点丢失后的存储恢复或生产安全基线。请继续在自己的隔离环境复现,不把“能部署小站”当作生产验收。

清理,不留下忘记的资源

先停止所有 port-forward 会话,再删除练习命名空间。下面命令会删除该命名空间内的所有对象,包括你创建的 PVC,务必确认里面只有可丢弃的实验数据。

kubectl config current-context
kubectl delete namespace k8s-book

如果整个 kind 集群都不再需要:

kind delete cluster --name k8s-book
kind get clusters

这会删除本地练习集群及其节点容器。不要把它当成“暂停”,数据可能无法找回。只想暂时休息时,可以先不删除集群。