Pods

目录

理解 Pods

请参考 Kubernetes 官方网站文档:Pod

Pod 是 Kubernetes 中可以创建和管理的最小可部署计算单元。一个 Pod(如鲸鱼群或豆荚)是一个或多个容器(例如 Docker 容器)的集合,共享存储和网络资源,并包含运行这些容器的规范。Pods 是所有更高级别控制器(如 DeploymentsStatefulSetsDaemonSets)构建的基础单元。

YAML 文件示例

pod-example.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest # The container image to use.
      ports:
        - containerPort: 80 # Container ports exposed.
      resources: # Defines CPU and memory requests and limits for the container.
        requests:
          cpu: '100m'
          memory: '128Mi'
        limits:
          cpu: '200m'
          memory: '256Mi'

使用 CLI 管理 Pod

虽然 Pods 通常由更高级别的控制器管理,但直接使用 kubectl 操作 Pods 对于故障排查、检查和临时任务非常有用。

查看 Pod

  • 列出当前命名空间下的所有 Pods:

    kubectl get pods
  • 列出所有命名空间下的所有 Pods:

    kubectl get pods --all-namespaces
    # 或简写为:
    kubectl get pods -A
  • 获取指定 Pod 的详细信息:

    kubectl describe pod <pod-name> -n <namespace>
    
    # 示例
    kubectl describe pod my-nginx-pod -n default

查看 Pod 日志

  • 流式查看 Pod 中容器的日志(有助于调试):

    kubectl logs <pod-name> -n <namespace>
  • 如果 Pod 中有多个容器,必须指定容器名称:

    kubectl logs <pod-name> -c <container-name> -n <namespace>
  • 跟随日志输出(实时显示新日志):

    kubectl logs -f <pod-name> -n <namespace>

在 Pod 中执行命令

在 Pod 中的指定容器内执行命令(有助于调试,如访问 shell):

kubectl exec -it <pod-name> -n <namespace> -- <command>

# 示例(进入 shell):
kubectl exec -it my-nginx-pod -n default -- /bin/bash

Pod 端口转发

将本地端口转发到 Pod 的端口,允许从本地机器直接访问 Pod 内运行的服务(适用于测试或无需外部暴露服务的直接访问):

kubectl port-forward <pod-name> <local-port>:<pod-port> -n <namespace>

# 示例
kubectl port-forward my-nginx-pod 8080:80 -n default

运行该命令后,可以通过浏览器访问 localhost:8080 来访问运行在 my-nginx-pod 中的 Nginx Web 服务器。

删除 Pod

  • 删除指定的 Pod:

    kubectl delete pod <pod-name> -n <namespace>
    
    # 示例
    kubectl delete pod my-nginx-pod -n default
  • 按名称删除多个 Pods:

    kubectl delete pod <pod-name-1> <pod-name-2> -n <namespace>
  • 根据标签选择器删除 Pods(例如删除所有标签为 app=nginx 的 Pods):

    kubectl delete pods -l app=nginx -n <namespace>

使用 Web 控制台管理 Pod

查看 Pod

平台界面提供了 Pods 的多种信息,便于快速查看。

操作步骤

  1. 进入 Container Platform,在左侧导航栏选择 Workloads > Pods

  2. 找到需要查看的 Pod。

  3. 点击部署名称,查看 DetailsYAMLConfigurationLogsEventsMonitoring 等信息。

Pod 参数说明

以下是部分参数说明:

参数说明
资源请求与限制资源请求限制 定义了 Pod 中容器的 CPU 和内存使用边界,这些值汇总后形成 Pod 的整体资源配置。这些值对于 Kubernetes 调度器高效地将 Pods 安排到节点上以及 kubelet 执行资源管理至关重要。
  • 请求(Requests):容器调度和运行所需的最低保证 CPU/内存。Kubernetes 调度器根据此值决定 Pod 可运行的 Node
  • 限制(Limits):容器运行时允许使用的最大 CPU/内存。超过 CPU 限制会被限流,超过内存限制则容器会被终止(OOM Killed)。
详细单位定义(如 m 表示毫 CPU,Mi 表示 Mebibytes)请参考 Resource Units

Pod 级资源计算逻辑
Pod 的有效 CPU 和内存请求及限制值由其各个容器规格的求和和最大值计算得出。Pod 级请求和限制的计算方法类似,本文以限制值为例说明。当 Pod 仅包含标准容器(业务容器)时:Pod 的有效 CPU/内存限制值为所有容器 CPU/内存限制值之和。

示例:若 Pod 包含两个容器,CPU/内存限制分别为 100m/100Mi 和 50m/200Mi,则 Pod 汇总的 CPU/内存限制为 150m/300Mi。当 Pod 同时包含 initContainers 和标准容器时,Pod 的 CPU/内存限制计算步骤如下:
  • 1. 计算所有 initContainers 中 CPU/内存限制的最大值。
  • 2. 计算所有标准容器 CPU/内存限制的总和。
  • 3. 比较步骤 1 和步骤 2 的结果,Pod 的综合 CPU 限制为两者中较大值,内存限制同理。
计算示例:若 Pod 包含两个 initContainers,CPU/内存限制分别为 100m/200Mi 和 200m/100Mi,则 initContainers 的最大有效 CPU/内存限制为 200m/200Mi。同时,若 Pod 还包含两个标准容器,CPU/内存限制分别为 100m/100Mi 和 50m/200Mi,则标准容器的总限制为 150m/300Mi。因此,Pod 的综合 CPU/内存限制为 CPU max(200m, 150m) 和内存 max(200Mi, 300Mi),即 200m/300Mi。
来源管理该 Pod 生命周期的 Kubernetes 工作负载控制器,包括 DeploymentsStatefulSetsDaemonSetsJobs
重启次数Pod 启动以来其内容器重启的次数。重启次数过多通常表明应用或其运行环境存在问题。
节点Pod 当前调度并运行所在的 Kubernetes 节点名称。
服务账户服务账户是 Kubernetes 对象,为 Pod 内运行的进程和服务提供身份认证,使其能够访问 Kubernetes APIServer。该字段通常仅在当前登录用户拥有平台管理员角色或平台审计员角色时可见,允许查看服务账户的 YAML 定义。

删除 Pod

删除 Pod 可能影响计算组件的运行,请谨慎操作。

使用场景

  • 快速恢复 Pod 到期望状态:当 Pod 处于影响业务的状态(如 PendingCrashLoopBackOff)时,排查错误信息后手动删除 Pod,有助于其快速恢复到期望状态(如 Running)。此时,删除的 Pod 会在当前节点重建或重新调度。

  • 资源清理与运维管理:部分 Pod 达到指定阶段后不再变化,这类 Pod 通常数量较多,影响其他 Pod 的管理。待清理的 Pod 可能包括因节点资源不足而处于 Evicted 状态的 Pod,或因周期性定时任务触发而处于 Completed 状态的 Pod。此类 Pod 删除后将不再存在。

    注意:对于定时任务,如果需要查看每次任务执行的日志,不建议删除对应的 Completed 状态 Pod。

操作步骤

  1. 进入 Container Platform

  2. 在左侧导航栏点击 Workloads > Pods

  3. (单个删除)点击待删除 Pod 右侧的 ⋮ 按钮 > Delete,并确认。

  4. (批量删除)勾选待删除的 Pods,点击列表上方的 Delete,并确认。