【每日一个云原生小技巧 #77】Kubernetes Pod overhead(Pod 开销)

2024-02-04 13:46:09 浏览数 (2)

Pod 调度就绪态是 Kubernetes 中一个用于控制 Pod 是否准备好被调度到节点上的特性。在默认情况下,一旦 Pod 被创建,Kubernetes 调度程序就会开始寻找合适的节点来放置这个 Pod。然而,在某些情况下,某些 Pod 可能会因为缺少必要的资源而长时间处于未就绪状态,这会不必要地干扰调度器以及其他系统组件,如集群自动扩展器。
  1. 配置调度门控:调度门控通过 .spec.schedulingGates 字段配置,该字段是一个字符串列表,每个字符串表示 Pod 在被认为可调度之前应该满足的标准。
  2. 检查 Pod 状态:可以使用 kubectl get pod 命令检查 Pod 的状态,如果 Pod 被门控,其状态将显示为 SchedulingGated
  3. 更新调度指令:在 Pod 具有调度门控时,可以更改其调度指令,但只能收紧这些指令,确保 Pod 只被调度到之前匹配的节点子集上。通过这种方式,Kubernetes 用户可以更细粒度地控制 Pod 的调度,确保只有当所有必要条件满足时,Pod 才会被调度到节点上。

使用场景

Pod 调度就绪态特别适合以下场景:

  1. 资源依赖:当 Pod 需要依赖于某些外部资源(如配置文件或服务)才能正常运行时,可以使用调度就绪态确保 Pod 在这些资源就绪之前不会被调度。
  2. 特定节点准备:在某些情况下,可能需要确保节点完成特定准备(如加载特定驱动程序或配置)后,才能将 Pod 调度到该节点上。

使用技巧

  1. 配置 schedulingGates:通过在 Pod 的 .spec.schedulingGates 字段中指定一个或多个门控条件,可以控制 Pod 何时准备好被调度。
  2. 监控和调试:使用 Kubernetes 提供的 scheduler_pending_pods 指标来监控被门控的 Pod,帮助观察和调试调度行为。

使用案例

以下是一个使用 Pod 调度就绪态的示例:

代码语言:javascript复制
# 创建带有调度门控的 Pod 示例
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  schedulingGates:
  - name: foo
  - name: bar
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.6

在这个示例中,Pod 创建时会带有两个调度门控 foobar,这意味着 Pod 不会立即被调度。

代码语言:javascript复制
# 删除调度门控,使 Pod 准备好被调度
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - name: pause
    image: registry.k8s.io/pause:3.6

在删除调度门控后,Pod 将准备好被调度,调度程序可以将其调度到合适的节点上。

0 人点赞