Kubernetes 入门:容器编排的第一课
写给零基础新手:如果你已经会用 Docker 跑起一个容器,下一步要学的就是 Kubernetes——它负责把一堆容器管起来。
一、Kubernetes 是什么
Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩缩容和管理容器化应用程序。
一句话理解:Docker 解决的是"一个容器怎么跑",Kubernetes 解决的是"一堆容器怎么一起跑"。
它最初由 Google 开源,现在由云原生计算基金会(CNCF)维护,是云原生的事实标准。
二、为什么需要容器编排
只用 Docker 的时候,很多事都要手工做:
- 容器挂了,要手动重启;
- 流量大了,要手动再起几个容器,还要自己配负载均衡;
- 想升级版本,要一个个停掉旧容器、启动新容器,中间还会断服务;
- 容器 IP 经常变,服务之间互相找对方也很麻烦。
Kubernetes 把这些脏活累活自动化了:它时刻盯着集群的"期望状态",发现现状和期望不一致,就自动修复。
三、核心概念:Pod、Deployment、Service
1. Pod:最小的部署单元
Pod 是 Kubernetes 中最小的可部署单元,里面包含一个或多个紧密协作的容器,共享网络和存储资源。
可以把 Pod 想象成一个"豌豆荚":通常一个 Pod 里只放一个主容器(比如 Nginx),需要时再塞一个辅助容器(比如日志收集)。
2. Deployment:管 Pod 的"管家"
Deployment 负责声明和管理 Pod 的期望状态:
- 告诉集群"我要 3 个 Nginx 副本";
- Pod 挂了,它自动补一个;
- 升级时,它一个一个替换旧 Pod,实现滚动升级、不断服务。
3. Service:稳定的访问入口
Pod 的 IP 会变,直接访问 Pod 不靠谱。Service 为一组功能相同的 Pod 提供稳定的网络访问入口和负载均衡:集群内其他服务通过 Service 的名字就能找到它们,流量进来后由 Service 分发到后端的 Pod 上。
三者的关系可以这样记:Deployment 管着一组 Pod,Service 挡在 Pod 前面,对外提供统一入口。
用户请求 → Service(稳定入口)→ Deployment 管理的 Pod 们(真正干活的容器)
四、一个最小部署示例
下面的 YAML 会创建一个 Nginx 的 Deployment(2 个副本)和一个 Service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
部署并查看:
kubectl apply -f nginx-demo.yaml
kubectl get pods
kubectl get svc
能看到 2 个 Nginx Pod 在运行,Service 给了它们一个稳定的访问入口。
五、常见场景
- 扩缩容:把
replicas: 2改成replicas: 5,再 apply 一次,集群自动补齐 3 个 Pod。 - 滚动升级:把镜像版本改成
nginx:1.26,Deployment 会逐个替换 Pod,服务不中断。 - 自愈:某个 Pod 崩溃,Deployment 马上拉起一个新的补上。
- 服务发现:新服务只要访问
nginx-service这个名字,不用关心 Pod 的 IP。
六、小结
- Kubernetes 是容器编排平台,管的是"一堆容器怎么一起跑";
- Pod 是最小部署单元,Deployment 负责管 Pod、做升级,Service 负责提供稳定访问入口;
- 从一个最小的 Nginx 部署开始练,改改副本数、换换镜像版本,就能直观感受到编排的价值。
下一步可以试试在本地用 minikube 或 kind 搭一个单节点集群,把今天的 YAML 真正跑起来。
- 点赞
- 收藏
- 关注作者
评论(0)