如何部署和管理 Kubernetes 容器组

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你了解 Kubernetes 容器组(Pod)的基础知识,包括理解其架构、创建和部署容器组,以及在 Kubernetes 集群中对其进行管理和扩展。完成本教程后,你将具备使用 YAML 配置文件创建和管理自己的 Kubernetes 容器组的知识。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/get -.-> lab-415631{{"如何部署和管理 Kubernetes 容器组"}} kubernetes/create -.-> lab-415631{{"如何部署和管理 Kubernetes 容器组"}} kubernetes/apply -.-> lab-415631{{"如何部署和管理 Kubernetes 容器组"}} kubernetes/describe -.-> lab-415631{{"如何部署和管理 Kubernetes 容器组"}} kubernetes/logs -.-> lab-415631{{"如何部署和管理 Kubernetes 容器组"}} end

理解 Kubernetes 容器组(Pod)

Kubernetes 容器组(Pod)是 Kubernetes 集群的基本构建块。一个容器组是一组一个或多个容器,它们共享存储和网络资源,以及关于如何运行这些容器的规范。容器组被设计为 Kubernetes 中可以创建和管理的最小可部署计算单元。

容器组架构

一个 Kubernetes 容器组通常包括以下组件:

graph LR Pod --> Container1 Pod --> Container2 Pod --> Volume Pod --> Network
  • 容器:容器组可以包含一个或多个容器。这些容器共享相同的网络命名空间和存储卷。
  • 存储卷:容器组可以指定容器组内的容器可访问的存储卷。这些存储卷提供了一种在单个容器组的生命周期之外持久保存数据的方法。
  • 网络:容器组在 Kubernetes 集群内有一个唯一的 IP 地址,并且容器组内的容器可以使用回环接口相互通信。

容器组生命周期

Kubernetes 容器组从创建到终止经历一个定义明确的生命周期。容器组生命周期的主要阶段包括:

  1. 挂起(Pending):容器组已被 Kubernetes 系统接受,但一个或多个容器尚未创建。
  2. 运行中(Running):容器组已绑定到一个节点,并且所有容器都已创建。至少有一个容器仍在运行,或者正在启动或重启过程中。
  3. 成功(Succeeded):容器组中的所有容器都已成功终止,并且不会被重启。
  4. 失败(Failed):容器组中的所有容器都已终止,并且至少有一个容器以失败告终。
  5. 未知(Unknown):容器组的状态无法确定,通常是由于与主机通信时出错。

示例:创建一个容器组

以下是在 Ubuntu 22.04 系统上使用 Kubernetes 命令行界面(kubectl)创建一个简单容器组的示例:

kubectl run nginx-pod --image=nginx:latest --port=80

此命令创建一个名为 nginx-pod 的新容器组,该容器组运行最新版本的 Nginx 网络服务器容器,并为传入流量暴露端口 80。

然后,你可以使用以下命令与容器组进行交互:

## 列出当前命名空间中的所有容器组
kubectl get pods

## 描述 nginx-pod 容器组
kubectl describe pod nginx-pod

## 访问容器组中运行的 Nginx 网络服务器
kubectl port-forward nginx-pod 8080:80

创建和部署 Kubernetes 容器组(Pod)

在 Kubernetes 中,可以通过多种方式创建和部署容器组,包括使用 YAML 配置文件或直接通过 Kubernetes 命令行界面(kubectl)。

使用 YAML 创建容器组

以下是一个定义简单 Nginx 容器组的 YAML 配置文件示例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80

要使用此 YAML 文件创建容器组,将其保存到一个文件(例如 nginx-pod.yaml),并在 Ubuntu 22.04 系统上运行以下命令:

kubectl create -f nginx-pod.yaml

这将在 Kubernetes 集群中创建 nginx-pod 容器组。

使用 kubectl 部署容器组

或者,你可以直接使用 kubectl run 命令创建容器组。例如,要创建一个 Nginx 容器组,可以运行以下命令:

kubectl run nginx-pod --image=nginx:latest --port=80

此命令创建一个名为 nginx-pod 的新容器组,该容器组运行最新版本的 Nginx 网络服务器容器,并为传入流量暴露端口 80。

验证容器组创建

创建容器组后,可以使用以下命令验证其状态并与之交互:

## 列出当前命名空间中的所有容器组
kubectl get pods

## 描述 nginx-pod 容器组
kubectl describe pod nginx-pod

## 访问容器组中运行的 Nginx 网络服务器
kubectl port-forward nginx-pod 8080:80

kubectl get pods 命令将显示容器组的状态,kubectl describe pod 命令将提供有关容器组配置和状态的详细信息。kubectl port-forward 命令允许你从本地机器访问容器组中运行的应用程序。

管理和扩展 Kubernetes 容器组(Pod)

Kubernetes 提供了丰富的功能和工具来管理和扩展集群中的容器组。这包括更新、扩展和监控容器组的能力,以及执行健康检查和其他管理任务。

更新容器组

要更新现有容器组的配置,你可以编辑 YAML 文件并应用更改,或者使用 kubectl set 命令。例如,要更新容器组中容器的镜像:

kubectl set image pod/nginx-pod nginx=nginx:1.19

此命令将把 nginx-pod 容器组中的 nginx 容器更新为使用 nginx:1.19 镜像。

扩展容器组

你可以使用 kubectl scale 命令来扩展容器组的副本数量。例如,要将 nginx-pod 扩展到 3 个副本:

kubectl scale pod nginx-pod --replicas=3

这将创建 nginx-pod 容器组的另外两个实例,使你能够处理增加的流量或工作负载。

监控容器组

Kubernetes 提供了多种方法来监控容器组的健康状况和性能。你可以使用 kubectl describe pod 命令获取有关容器组状态、事件和资源使用情况的详细信息。此外,你可以设置像 Prometheus 这样的原生 Kubernetes 监控解决方案来收集和可视化有关容器组的指标。

健康检查

Kubernetes 支持对容器组进行两种类型的健康检查:存活探针(liveness probes)和就绪探针(readiness probes)。存活探针检查容器是否仍在运行,而就绪探针检查容器是否准备好接受流量。你可以在容器组的 YAML 配置中配置这些探针,以确保 Kubernetes 能够正确管理容器组的生命周期。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - containerPort: 80
      livenessProbe:
        httpGet:
          path: /
          port: 80
        periodSeconds: 10
        failureThreshold: 3
      readinessProbe:
        httpGet:
          path: /
          port: 80
        periodSeconds: 5
        failureThreshold: 1

通过使用这些管理和扩展功能,你可以确保你的 Kubernetes 容器组高效运行,并能够处理应用程序工作负载的变化。

总结

在本教程中,你已经了解了 Kubernetes 容器组(Pod)的关键组件,包括容器、存储卷和网络。你还探索了容器组从创建到终止的不同生命周期阶段。最后,你看到了一个使用 kubectl 命令行界面创建简单 Kubernetes 容器组的示例。有了这些知识,你现在可以自信地创建、部署和管理自己的 Kubernetes 容器组,以有效地运行你的应用程序和服务。