0Pricing
DevOps Bootcamp · 课时

Pod:最小单元

了解 Pod——Kubernetes 中的基础构建块,以及如何定义和管理 Pod。

Pod:最小单元 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

什么是 Kubernetes 容器组?

在 Kubernetes 中,您可以部署的最小且最基本的单元是一个容器组。您可以把容器组想象成一栋容纳一个或多个容器的“房子”。

容器组是对容器的抽象。它们代表集群中正在运行的进程,并封装应用程序容器、存储资源、唯一的网络 IP,以及用于控制容器运行方式的选项。

Pod:最小单元 — 插图 1

容器组与容器:区别

您可能会想:“我已经有容器了,为什么还需要容器组?”关键区别如下:

  • 容器(例如 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Kubernetes 架构
  2. Pod:最小单元
  3. kubectl 命令基础
  4. 使用命名空间与标签进行组织
← 返回 DevOps Bootcamp