Pod:最小单元
了解 Pod——Kubernetes 中的基础构建块,以及如何定义和管理 Pod。
Pod:最小单元 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
什么是 Kubernetes 容器组?
在 Kubernetes 中,您可以部署的最小且最基本的单元是一个容器组。您可以把容器组想象成一栋容纳一个或多个容器的“房子”。
容器组是对容器的抽象。它们代表集群中正在运行的进程,并封装应用程序容器、存储资源、唯一的网络 IP,以及用于控制容器运行方式的选项。

容器组与容器:区别
您可能会想:“我已经有容器了,为什么还需要容器组?”关键区别如下:
- 容器(例如 Docker 容器)是应用程序及其依赖项的打包单元。
- 容器组是 Kubernetes 提供的抽象层,用于封装一个或多个容器,并为它们提供共享资源和统一的网络身份。
容器是实际执行的单元,而容器组是 Kubernetes 管理和编排这些执行单元的方式。
为什么要使用容器组?
容器组提供了多项重要优势:
- 共享网络命名空间:容器组中的所有容器共享同一个 IP 地址和网络端口。它们可以使用
localhost彼此通信。 - 共享存储:容器组可以共享存储卷,使同一容器组中的容器能够访问公共数据。
- 共同放置与共同调度:需要紧密协作的容器(例如应用程序和日志记录代理)可以确保运行在同一节点上,并且始终一起调度。
容器组定义的结构
容器组使用 YAML 配置文件定义。以下是其中的核心组件:
apiVersion:指定 Kubernetes API 版本(例如v1)。kind:Kubernetes 对象的类型,此处为Pod。metadata:包含容器组的name和labels等信息。spec:容器组的期望状态,包括要运行的containers、volumes及其他设置。
定义单容器容器组
大多数容器组只包含一个容器,这对于简单应用程序很常见。下面是一个运行 Nginx Web 服务器的容器组的基本 YAML 定义:
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
labels:
app: webserver
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80部署您的第一个容器组
要从 YAML 文件创建容器组,可以使用 kubectl apply 命令。此命令会告知 Kubernetes 根据您的定义创建或更新资源。
假设您将前面的 Nginx 容器组定义保存为 nginx-pod.yaml。您可以这样部署它:
kubectl apply -f nginx-pod.yaml
随后,Kubernetes 会将此容器组调度到其中一个工作节点上运行。
检查容器组:获取与描述
部署完成后,您可能需要检查容器组的状态。以下是两个必备的 kubectl 命令:
kubectl get pods:列出当前命名空间中的所有容器组,并显示其名称、状态和节点。kubectl describe pod <pod-name>:提供特定容器组的详细信息,包括事件、容器状态和分配的资源。
这些命令对于监控和故障排查至关重要。
多容器容器组:边车容器
虽然单容器容器组很常见,但在某些情况下,使用多容器容器组会更有优势。一个经典示例是边车模式。
边车容器与同一容器组中的主应用程序容器并行运行,用于执行以下辅助任务:
- 日志记录和监控代理
- 数据同步
- 网络流量代理
它们共享容器组的网络和存储,因此通信效率很高。
示例:多容器容器组
下面是一个多容器容器组的示例。它包含一个 Nginx Web 服务器和一个将日志写入共享卷的 busybox 边车容器。
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
volumes:
- name: shared-log-volume
emptyDir: {}
containers:
- name: web-server
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: shared-log-volume
mountPath: /var/log/nginx
- name: log-writer
image: busybox:latest
command: ["/bin/sh", "-c", "while true; do echo 'Hello from sidecar!' >> /var/log/app.log; sleep 5; done"]
volumeMounts:
- name: shared-log-volume
mountPath: /var/log/app检查您对容器组的了解
以下关于 Kubernetes 容器组的说法哪一项是 TRUE?
回顾:容器组——核心单元
您刚刚学习了 Kubernetes 容器组,它们是集群中应用程序的基本构建单元。
- 容器组封装一个或多个容器,并为它们提供共享资源。
- 它们提供共享网络和存储,并确保相关容器共同放置。
- 您可以使用 YAML 定义容器组,并通过
kubectl apply进行部署。 kubectl get pods和kubectl describe pod可以帮助您监控容器组。
接下来,我们将探索更多用于与集群交互的 kubectl 命令!
常见问题解答
「Pod:最小单元」课时是免费的吗?
是的 — 「Pod:最小单元」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「Pod:最小单元」这节课中我会学到什么?
了解 Pod——Kubernetes 中的基础构建块,以及如何定义和管理 Pod。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Pod:最小单元」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。