最稳妥的快速上手方式是用 kubectl create deployment 创建 pod,再用 kubectl expose 暴露服务;该命令式流程无需 yaml,适合验证、ci 或调试,但生产环境必须改用声明式 yaml 管理。

kubectl create deployment 快速起一个 Pod,再用 kubectl expose 暴露服务。这种方式不依赖 YAML 文件,适合验证环境、CI 测试或临时调试——但生产环境必须切回声明式 YAML 管理。
用 kubectl create deployment 一键创建 Nginx Deployment
这是最轻量的启动路径,绕过写 YAML 的步骤,底层仍生成标准 Deployment 资源:
-
kubectl create deployment nginx --image=nginx:alpine --replicas=3:创建带 3 个副本的 Deployment,镜像选nginx:alpine可减小体积和攻击面 - 默认使用
default命名空间;如需指定,加--namespace=prod - 该命令不会自动挂载配置或日志卷——若需要自定义
nginx.conf或持久化访问日志,必须后续 patch 或删掉重建为 YAML 版本 - 执行后立刻可用
kubectl get pods查看状态,但镜像拉取耗时取决于网络和镜像仓库位置
用 kubectl expose 暴露服务时 type 的选择陷阱
暴露方式决定你能怎么访问 Nginx,--type 参数不能乱选:
-
kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP:仅集群内可访问,适合做内部反向代理上游 -
--type=NodePort:绑定到每个节点的固定端口(默认 30000–32767),需确保节点防火墙放行该端口;注意:K3s 默认禁用 NodePort 端口范围外的端口,如设--node-port=80会失败 -
--type=LoadBalancer:云厂商自动分配公网 IP,本地 Minikube/k3s 不支持,会卡在Pending状态,别硬等 - 没加
--target-port?默认等于--port,但 Nginx 容器实际监听的是 80,所以这里没问题;若容器监听 8080,就必须显式写--target-port=8080
合并部署和服务的 YAML 文件怎么写才不出错
生产环境必须用 YAML,但初学者常栽在分隔符、缩进和字段嵌套上:
- Deployment 和 Service 之间必须用
---(三个短横线)严格分隔,多一个空格或少一个都会报error parsing - Service 的
selector必须和 Deployment 的template.metadata.labels完全一致,比如都写app: nginx;写成name: nginx或漏掉就匹配不上,kubectl get endpoints显示<none></none> -
ports[].port是 Service 对外暴露的端口(如 80),targetPort是容器里真实监听的端口(如 80),两者可以不同,但targetPort必须与容器containerPort一致 - YAML 中不要用 Tab 缩进,只用空格;推荐用 VS Code + Red Hat YAML 插件实时校验
在 K3s 上部署 Nginx 的特殊注意事项
K3s 是轻量发行版,不是“精简版 Kubernetes”,很多行为和标准 kubeadm 集群不同:
- K3s 默认不启用
metrics-server,所以kubectl top pods会报错;如需 HPA,得手动安装 - NodePort 端口范围默认是
30000-32767,但 K3s 启动时若加了--disable servicelb,会导致LoadBalancer类型无法 fallback 到 NodePort,Service 直接不可用 - K3s 内置 containerd,不支持 Dockerfile 构建;若你用
docker build打的镜像,得先ctr -n k8s.io images import xxx.tar导入,再在 YAML 里引用 - 想让 Nginx 绑定宿主机 80 端口?别碰
hostNetwork: true——它绕过 kube-proxy,破坏网络策略且难审计;正确做法是用 Ingress +ingress-nginx控制器
kubectl get pods 看着全绿,但 kubectl get endpoints 是空的,curl 就一直 connection refused——这时候该盯的不是日志,而是两处 label 是否逐字一致。











