深色模式
容器与 K8s 运维总览
摘要:本文从运维岗位视角解释「容器」与「K8s 编排」到底差在哪,什么时候该用 Docker 单机、什么时候必须上 Kubernetes。并给出一条可照做的学习路径,帮你建立整体认知框架。
适用环境
- 一台 Linux 主机(虚拟机即可,2 核 4G 起步)
- 系统:Ubuntu 22.04 / AlmaLinux 9 / Rocky Linux 9
- 练习集群:minikube、kind 或 kubeadm 三节点均可
操作步骤
一、先分清两层:容器运行时 vs 编排层
| 维度 | Docker(单机) | Kubernetes(集群) |
|---|---|---|
| 管理对象 | 一台机上的若干容器 | 多台机上的成百 Pod |
| 网络 | bridge/host,手动映射端口 | Service + CNI 插件,跨节点互通 |
| 存储 | volume / bind mount,绑本机目录 | PV/PVC,与节点解耦 |
| 高可用 | 容器挂了靠 restart policy | 控制器自动重建、调度、滚动更新 |
| 声明方式 | 命令式 docker run | 声明式 YAML,控制器持续对齐期望状态 |
二、单机容器:Docker 的职责边界
bash
docker run -d --name web -p 8080:80 --restart=always nginx
docker ps
docker logs -f web
docker exec -it web sh1
2
3
4
2
3
4
它解决的是「在一台机器上把应用跑起来」:打包镜像、启停、看日志、进容器排查。
三、集群编排:K8s 多做了什么
bash
kubectl create deployment web --image=nginx --replicas=3
kubectl expose deployment web --port=80 --type=ClusterIP
kubectl get pods -o wide1
2
3
2
3
K8s 在容器之上补上了四件单机做不到的事:
- 调度:Pod 该落在哪个节点,按资源和亲和性自动决定。
- 自愈:容器崩溃、节点宕机后自动在其他节点重建。
- 服务发现:Pod IP 会变,Service 提供稳定访问入口。
- 声明式发布:改镜像触发滚动更新,出问题一键回滚。
四、运维学习路径(建议顺序)
- Docker 基础:镜像、Dockerfile、网络、存储、compose(本文目录 02-06)。
- K8s 核心对象:Pod / Deployment / Service / Ingress(07-12)。
- 配置与存储:ConfigMap、Secret、PV/PVC、StatefulSet(13-15)。
- 稳定性治理:HPA、资源限制、探针、配额(16-19)。
- 集群运维:RBAC、节点维护、升级、etcd 备份(20-23)。
- 可观测与工程化:排障、Helm、Operator、监控日志(24-32)。
建议
新手不要一上来就啃 CKA 教材。先用 kind 起一个单节点集群,把 Pod 跑起来、删掉、看它自愈,理解会比读文档快得多。
验证
- [ ]
docker run hello-world能正常输出 - [ ]
kubectl get nodes返回 Ready 状态节点 - [ ] 能说出「容器运行时」和「编排层」各自解决什么问题
常见坑
- 把 K8s 当虚拟机用:直接
kubectl exec进 Pod 改文件,下次重建就没了。配置要进 ConfigMap,改动要回到 YAML。 - 跳过 Docker 直接学 K8s:排障时不会看容器日志、不懂镜像分层,遇到
ImagePullBackOff会无从下手。 - 生产环境用
latest标签:看似方便,实际无法回滚也无法确认版本,务必打明确版本号。