Kubernetes 入门指南:从 Docker Compose 到 K8s 的平滑演进之路
你已经用 Docker Compose 把应用跑得很顺畅了——一个 docker-compose up 就能拉起全套服务。那为什么还需要 Kubernetes?答案很简单:Compose 管单机,K8s 管集群。
当你需要跨多台服务器部署、自动故障转移、滚动更新而不停机时,K8s 就是那个答案。
核心概念对照表
| Docker Compose | Kubernetes | 说明 |
|---|---|---|
| Container | Pod | Pod 是最小调度单元,可含 1+ 个容器 |
| docker-compose.yml | Deployment | 声明式定义应用 |
| Network | Service | 服务发现与负载均衡 |
| Volume | PersistentVolume/PVC | 持久化存储 |
| Env Variables | ConfigMap/Secret | 配置与密钥分离 |
| Port Mapping | Ingress | 外部流量入口 |
第一个 K8s 部署:minikube 实战
1 | minikube start --driver=docker |
三个 replicas 意味着 K8s 会自动维持 3 个 Pod 实例。如果某个 Pod 挂了,K8s 会立刻拉起一个新的——这就是自愈能力。
Deployment:声明式 YAML
生产环境中你不会用 kubectl create 命令,而是用 YAML 声明:
1 | apiVersion: apps/v1 |
关键字段:resources.requests(最低保证资源)、resources.limits(硬上限)、livenessProbe(健康检查失败重启)、readinessProbe(就绪后接入流量)。
Service:稳定的网络入口
Pod 随时会重建(IP 会变),Service 提供了不变的虚拟 IP 和 DNS 名称:
1 | apiVersion: v1 |
现在集群内任何服务都可以通过 http://my-app-service 访问你的应用,K8s 自动做负载均衡。
ConfigMap 与 Secret:配置代码分离
1 | apiVersion: v1 |
在 Deployment 中引用:
1 | env: |
总结
从 Compose 到 K8s 不是替代关系,而是单机到集群的自然演进。当你只需要单台服务器跑几个服务时,Compose 是最佳选择。当业务需要高可用、自动扩缩容、滚动更新时,K8s 的价值就体现出来了。两者各有所长,关键是在合适的阶段选择合适的工具。
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自CC 的技术工坊
