运行一个k8s部署的应用
# 1、编写 Nginx 部署图纸(nginx-demo.yaml)
在你的 Master 虚拟机上,新建一个文件叫 nginx-demo.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment # 1. 声明控制器的名字
labels:
app: my-nginx
spec:
replicas: 2 # 🌟 重点:我们直接启动 2 个副本,让它自动漂移到 node1 和 node2 上!
selector:
matchLabels:
app: my-nginx # 告诉 Deployment 必须死死盯着带有这个标签的 Pod
template:
metadata:
labels:
app: my-nginx # 给下面吐出来的 Pod 贴上对应的身份证标签
spec:
containers:
- name: nginx
image: nginx:1.25-alpine # 使用超轻量的 nginx 镜像
ports:
- containerPort: 80 # Nginx 容器内部默认监听的端口
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service # 2. 声明网络通道的名字
spec:
type: NodePort # 🌟 核心:NodePort 模式会强制在每一台虚拟机上开辟一个完全一样的物理端口
selector:
app: my-nginx # 路由靶心:把流量精准转发给上面那些带有 app: my-nginx 标签的 Pod
ports:
- protocol: TCP
port: 80 # Service 内部虚拟端口
targetPort: 80 # 对应 Nginx 容器的端口
nodePort: 30080 # 🌟 物理机暴露端口:你可以自己指定(范围必须在 30000-32767 之间)
为了让你看得最明白,我们只写两个最简单的积木组件:
- Deployment:让 K8s 把 Nginx 的 Pod 在你的虚拟机集群里跑起来。
- Service:开辟一条物理通道(NodePort),让你在笔记本电脑的浏览器里能直接打开这个 Nginx 网页。
# 2、第二步:执行部署与硬核状态观测
# 1. 砸向集群,开始创建(Apply)
在 Master 节点执行:
kubectl apply -f nginx-demo.yaml
📺 预期输出:
deployment.apps/nginx-deployment created
service/nginx-service created
否则看看日志:
kubectl describe pod nginx-deployment-7879d9d897-lhdr5
# 2. 查看副本是如何被“调度”到不同机器的(Get Pods)
此前我们配置了 replicas: 2 吗?执行以下命令:
kubectl get pods -o wide
📺 运行效果预览:
[root@yudianxx ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-775f57cb68-p6cql 1/1 Running 0 127m 10.244.1.3 k8s-node1 <none> <none>
nginx-deployment-775f57cb68-zgq9b 1/1 Running 0 127m 10.244.2.3 k8s-node2 <none> <none>
这两个 Nginx Pod 状态字段说明:
READY 1/1:说明 Sandbox 和 Nginx 业务容器全部成功拉起,并且通过了 K8s 的基础健康检查。STATUS Running:说明容器运行极其稳定,没有任何频繁报错或闪退(Crashes)。RESTARTS 0:这长达 127 分钟的时间里,一次重启都没有发生过,稳如磐石。IP (10.244.x.x):最核心的是,它们在node1和node2上分别拿到了10.244.1.3和10.244.2.3两个极其规范的标准集群内网 IP。
上次更新: 2026-06-13 17:29:54