首页 / Kubernetes (k8s) 入门教程 / 部署你的第一个应用

Kubernetes (k8s) 入门教程

部署你的第一个应用

本教程共 65 篇 · 第 8 篇 · 更新于 2026-08-14 · 约 13 分钟阅读

KubernetesDeploymentPodkubectlnginx第一个应用

本节目标:亲手用 kubectl 把一个 nginx 应用跑起来,学会创建 Deployment、查看 Pod、看日志,建立”k8s 跑应用”的真实手感。

前面把环境装好了,这章终于动手。我们跟着官方 Hello Minikube 的思路,部署一个最简单的 Web 应用。别担心看不懂命令,每条我都解释。

8-1 前提:集群已经起来

动手前确认两件事:

  1. 你已安装 kubectl
  2. 本地集群已启动(minikube startkind create cluster 已成功)。

验证一下集群在不在:

kubectl get nodes

能看到一个节点、状态是 Ready,就说明一切就绪。

Note

本章示例以 minikube 为主,但命令在 kind 上同样适用。下面用 nginx 镜像当例子,因为它简单、自带 Web 服务,最适合入门。

8-2 一句话创建 Deployment

在 k8s 里部署应用,最标准的方式是创建一个 Deployment(部署)。它负责保证指定数量的 Pod 一直跑着。

用一条命令起一个 nginx:

kubectl create deployment hello-node --image=nginx

这条命令的意思是:创建一个名为 hello-node 的 Deployment,它拉取 nginx 镜像,跑一个 Pod。

Tip

kubectl create deployment 是”命令式”的快捷写法,适合快速试手。后面章节会教你用 YAML 文件来”声明式”部署,那才是生产推荐方式。这章先求跑通。

8-3 查看部署和 Pod

创建之后,看看它长啥样:

kubectl get deployments

输出类似:

NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   1/1     1            1           1m

再看 Pod 实际跑起来没:

kubectl get pods

输出类似:

NAME                          READY   STATUS    RESTARTS   AGE
hello-node-5f76cf6ccf-br9b5   1/1     Running   0          1m

STATUSRunningREADY1/1,就说明 Pod 健康。如果看到 0/1,别急,等几秒再敲一次——镜像下载需要时间。

Note

Pod 名字里那一串随机字符是副本的标识。Deployment 管着这些 Pod,Pod 挂了它会自动重建一个,名字会变,但服务不断。

8-4 看看集群里发生了什么

想看更细的事件,可以:

kubectl get events

想看 kubectl 当前连的是哪个集群、什么上下文:

kubectl config view

这俩命令在排错时很有用。比如 Pod 一直 Pendingget events 往往能告诉你”节点资源不够”之类的原因。

8-5 看一眼日志

Pod 跑着,怎么确认它在干活?看日志:

kubectl logs hello-node-5f76cf6ccf-br9b5

把 Pod 名换成你自己 get pods 看到的那串。nginx 起来后日志会有类似 “start worker processes” 的字样。

Warning

kubectl logs 后面跟的必须是你 get pods 里真实的 Pod 名,别照抄我示例里的那串。每台机器生成的名字都不一样。

8-6 让它能被访问(可选)

默认 Pod 只在集群内部有 IP,外面访问不到。想暴露成一个对外的 Service,可以:

kubectl expose deployment hello-node --port=80 --type=NodePort

--type=NodePort 表示给这个 Service 在节点上开一个端口,你可以用 节点IP:端口 直接访问。在 minikube 里更简单:

minikube service hello-node

它会自动打开浏览器访问这个服务。

Tip

Service 是”稳定访问入口”的概念,细节后面服务与网络章节才展开。这章你只要体验”应用起来了、能被访问”,目的就达到了。

8-7 清理,养成好习惯

练完记得清理,别让资源堆着:

kubectl delete service hello-node
kubectl delete deployment hello-node

如果用的是 minikube 还想停掉整个集群:

minikube stop
Note

学 k8s 很容易建一堆东西忘了删。养成”建了就删”的习惯,本地环境才清爽,也不容易把概念搞混。

8-8 你刚经历了什么

回顾一下,你其实已经走完了 k8s 最核心的一条链路:

  1. 用 kubectl 告诉集群”我要一个 nginx”。
  2. apiserver 记下需求,scheduler 选好节点。
  3. 节点上的 kubelet 拉起容器,Pod 进入 Running。
  4. 你用 get/logs 观察它,用 expose 访问它。

这跟前面架构章节讲的全对上了。

8-9 换个方式访问:port-forward

除了 expose 开 NodePort,还有一个更轻量的本地访问办法:port-forward(端口转发)。它把集群里某个 Pod 的端口,映射到你自己电脑的某个端口。

kubectl port-forward pod/hello-node-xxxx 8080:80

执行后,你在浏览器打开 http://localhost:8080 就能访问那个 Pod 的 80 端口。它只用于本地调试,不会真正对外暴露服务。

Tip

port-forward 特别适合”我想在本地看看这个 Pod 到底通不通”的场景。关掉命令,转发就断了,不留下任何集群配置,干净。

8-10 顺手改一下:edit

想临时改 Pod 的某个配置看看效果?可以用 edit 直接在默认编辑器里改:

kubectl edit deployment hello-node

它会拉起编辑器,你改完保存,k8s 就按新配置调整。不过注意,对于由 Deployment 管理的 Pod,直接 edit Pod 可能被控制器覆盖——正确的做法通常是改 Deployment。这里只是让你体验”改了即时生效”的感觉。

Warning

editport-forward 都是调试利器,但别把它们当日常管理手段。正经修改要用 YAML 文件 apply,那样才有版本记录、可回滚。这条原则第 10 章会详细讲。

8-11 Pod 一直起不来?先看这几处

新手最常遇到的状况:Pod 卡在 PendingCrashLoopBackOff。别慌,按这个顺序查:

  1. kubectl describe pod <名>,重点看最下面的 Events。它会直接告诉你原因,比如”镜像拉取失败""节点资源不足""节点有污点不允许调度”。
  2. 如果是 ImagePullBackOff,多半是镜像名拼错,或镜像仓库拉不到。换用 nginx 这种公开镜像先跑通。
  3. 如果是 CrashLoopBackOff,说明容器起来了又立刻退出。看 kubectl logs <名> --previous 找崩溃前的最后输出。
  4. 如果是 Pending 一直不变,可能集群资源不够,或调度规则太严。本地单节点一般不会,但 kubectl describe node 能看资源余量。
Note

这些状态名(Pending、Running、CrashLoopBackOff 等)是 k8s 的”Pod 生命周期”概念,后面会专门一章讲。这章你只要知道”出事先 describe 看 Events”就够了。

小结

这一章你走通了:建 Deployment → 看 deployment/pod → 看 events/logs → 暴露访问 → port-forward 调试 → 清理。你还学会了出问题时怎么排查。亲历了”提交意图、集群落地”的全过程。

8-13 本章命令速记

把这一章敲过的命令收个尾,方便你回看:

kubectl create deployment hello-node --image=nginx   # 建 Deployment
kubectl get deployments / pods                       # 看资源
kubectl describe pod <>                            # 看详情、排错
kubectl logs <>                                    # 看日志
kubectl expose deployment hello-node --type=NodePort # 暴露服务
kubectl port-forward pod/<> 8080:80                # 本地转发调试
kubectl delete deployment/service hello-node         # 清理

把这些敲顺了,你对”k8s 怎么跑应用”就算有了真实体感。下一章,我们系统学一遍 kubectl 最常用的命令,让你指挥集群更顺手。