Kubernetes部署Web应用需先用Deployment管理多副本Pod(如nginx:1.25,replicas=3),再通过Service(ClusterIP/NodePort)提供稳定网络入口,支持滚动更新与回滚。

用 Kubernetes 部署一个可访问的 Web 应用,核心就是 Deployment 控制副本与更新,Service 提供稳定网络入口。下面以 Nginx 为例,带你一步步完成从镜像拉取、多副本部署,到集群内外访问的完整流程。
写一个基础 Deployment YAML
Deployment 定义应用的期望状态:运行几个 Pod、用什么镜像、是否自动重启等。以下是最简可用配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
注意三点:
- replicas: 3 表示维持 3 个 Pod 副本,Kubernetes 会自动补缺
- selector.matchLabels 和 template.metadata.labels 必须完全一致,否则 Deployment 找不到它管理的 Pod
- containerPort 是容器内监听端口,仅作声明,不直接开放网络
暴露服务:用 Service 绑定 Deployment
Pod IP 是临时的,不能直接访问。Service 通过标签选择器关联 Pod,并提供固定 IP 或 DNS 名称。添加如下 Service 配置:
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx-pod
ports:
- port: 80
targetPort: 80
type: ClusterIP
关键字段说明:
- selector.app: nginx-pod 与 Deployment 中的 Pod 标签匹配,实现自动关联
- port 是 Service 对外暴露的端口(集群内访问时用),targetPort 是转发到 Pod 容器的端口
- type: ClusterIP 表示仅在集群内部可访问;如需外部访问,可改为 NodePort 或 LoadBalancer
部署并验证服务连通性
把两个资源写进同一个文件(如 nginx.yaml),或分两个文件依次应用:
本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言板、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播、购物系统等等,力求让读者通过对案例的学习,轻松掌握PHP和MySQL的编程精要,迅速掌握网络后台开发技巧。 本书适
kubectl apply -f nginx.yaml # 查看 Deployment 状态 kubectl get deploy # 查看 Pod 是否就绪(READY 列应为 3/3) kubectl get pods -l app=nginx-pod # 查看 Service 分配的 ClusterIP kubectl get svc nginx-svc
验证方式:
- 在任意节点上执行
kubectl exec -it,能返回 Nginx 欢迎页即成功-- curl -s http://nginx-svc - 若 Service type 改为 NodePort,可通过
http://从集群外浏览器访问: - Service 名称在集群内可被 DNS 解析,例如其他 Pod 中直接访问
curl http://nginx-svc
滚动更新与回滚实操
修改镜像版本即可触发滚动更新(旧 Pod 逐个终止,新 Pod 逐个启动):
kubectl set image deploy/nginx-deploy nginx=nginx:1.26 # 观察更新过程 kubectl rollout status deploy/nginx-deploy
若更新后异常,立刻回滚:
kubectl rollout undo deploy/nginx-deploy # 查看历史版本(用于指定回滚到某次) kubectl rollout history deploy/nginx-deploy
滚动更新默认策略是 maxSurge=25%、maxUnavailable=25%,意味着最多新增 1 个 Pod,最多不可用 1 个 Pod(基于 replicas=3)。如需更激进或保守,可在 Deployment 的 strategy.rollingUpdate 中自定义。









