Pods

了解 Pods

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

Pod 是 Kubernetes 中可以创建和管理的最小可部署计算单元。一个 Pod(类似鲸鱼群或豆荚)是由一个或多个容器组成的集合,这些容器共享存储和网络资源,并且有运行容器的规范。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 执行资源管控至关重要。
  • 请求:容器调度和运行所需的最小保证 CPU/内存。Kubernetes 调度器根据此值决定 Pod 可运行的 Node
  • 限制:容器运行时允许使用的最大 CPU/内存。超过 CPU 限制会导致节流,超过内存限制则容器会被终止(OOM Killed)。
详细单位定义(如 m 表示 milliCPU,Mi 表示 mebibytes)请参考 Resource Units

Pod 级资源计算逻辑
Pod 的有效 CPU 和内存请求及限制值由其各个容器规格的总和和最大值计算得出。Pod 级请求和限制的计算方法类似,本文以限制值为例说明。当 Pod 仅包含标准容器(业务容器)时:Pod 的有效 CPU/内存限制值为 Pod 内所有容器 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/内存限制为两者中 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 中容器的重启次数。重启次数较高通常表明应用或其运行环境存在问题。
节点Pod 当前被调度并运行的 Kubernetes 节点名称。
服务账户服务账户是 Kubernetes 对象,为 Pod 内运行的进程和服务提供身份认证,使其能够访问 Kubernetes APIServer。该字段通常仅在当前登录用户拥有平台管理员角色或平台审计员角色时可见,允许查看服务账户的 YAML 定义。

删除 Pod

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

使用场景

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

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

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

操作步骤

  1. 进入 Container Platform

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

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

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