第 4 章 读懂第一份 YAML
四个核心字段
Kubernetes 对象常见的四个部分如下:
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
spec:
containers:
- name: web
image: nginx:1.28
ports:
- containerPort: 80apiVersion 表示资源所属 API 版本,不是你电脑上的 Kubernetes 版本。kind 表示资源类型。metadata 放名字、标签等标识信息。spec 描述你期望它怎样运行。查询时看到的 status 是系统报告的实际状态,通常不应复制进你维护的清单。
YAML 用缩进表示层级,使用空格,不用 Tab。同一层级保持对齐。containers 前的短横线表示列表,意味着一个 Pod 可以描述多个容器。书中使用的 nginx:1.28 固定到次版本系列,方便复现;标签可能继续指向该系列的新补丁。严格复现应固定镜像摘要,并在更新时验证安全性。
创建、观察与删除
把上述内容保存为 pod.yaml。文件必须是纯文本,扩展名是 .yaml,避免编辑器悄悄保存成 .yaml.txt。
kubectl apply -n k8s-book -f pod.yaml
kubectl get pods -n k8s-book
kubectl describe pod hello-pod -n k8s-book
kubectl logs hello-pod -n k8s-bookapply 创建或更新资源;get 看概况;describe 看细节和事件;logs 看容器输出。首次拉取镜像期间,Pod 可能显示 ContainerCreating,随后进入 Running。
想看网页,可以运行:
kubectl port-forward -n k8s-book pod/hello-pod 8080:80保持这个终端开启,用浏览器访问 http://localhost:8080,应看到 NGINX 欢迎页。8080:80 表示本机 8080 端口转发到 Pod 的 80 端口。按 Ctrl+C 停止转发,Pod 本身仍在运行。
containerPort: 80 是端口声明,不会自动把网页暴露到你的电脑或公网;真正访问还需要端口转发或后面的 Service 等机制。
kubectl delete pod hello-pod -n k8s-book
kubectl get pods -n k8s-book这个手工创建的独立 Pod 删除后不会自动回来,因为没有 Deployment 等上层控制器替它维持副本。这就是下一章的切入点。
本章自测:metadata.name 与容器 name 是同一个概念吗?为什么声明 containerPort 后还需要转发?