更改 kubernetes 工作节点的内存分配

changing memory allocation of a kubernetes worker node

我的设置

我有一个物理节点 K8s 集群,我在其中污染了主节点,因此它也可以充当工作人员。该节点有 Centos7,总内存为 512 GB。我将我的实验限制在一个节点集群上;一旦找到解决方案,我将在我的小型 k8s 集群上对其进行测试,其中主服务和辅助服务位于不同的节点上。

我想做什么

我希望 k8s worker 一开始只使用 256GB 内存。稍后,如果满足特定节点条件,我想将 k8s worker 的内存分配增加到(假设)400GB

我现在在哪里

  1. 我重新启动了我的机器,节点已满 512 GB 内存。
  2. 我使用chmem -d <range>离线256GB内存。现在 OS 只看到 256 GB 内存可用。
  3. 我遵循从 kubeadm initkubectl taint nodes --all node-role.kubernetes.io/master-
  4. 的步骤
  5. 我的单节点 K8s 设置已经完成,我最多可以部署 2 个 pods。每个 pod 请求 100Gi 并限制为 200Gi 内存使用。 Pod 正在执行 sleep 100000。所以没有内存压力。
  6. 当我尝试启动第三个 pod 时; pod 卡在挂起状态,因为调度程序检测到它管理的唯一工作节点用完了可分配的内存资源。这是有道理的。第三个 pod 永远停留在 pending 状态。
  7. 一段时间后现在;节点满足要求的条件;此时我使用 chmem -e <range> 启用一些内存,现在 OS 看到 400GB。
  8. 此时我想让 k8s worker 知道这个内存资源容量变化,以便可以部署卡在 pending 阶段的第三个 pod。
  9. 这就是我需要你帮助的地方。如何在不重新启动 k8s 的情况下更新工作人员的内存资源容量。如果我重启集群,它可以看到 400GB 内存;但这意味着我需要杀死 运行 pods 并且已经杀死 运行 pod 是不可接受的。

希望不大,但您可以尝试通过 systemctl restart kubelet 重启 kubelet。容器不应以这种方式重新启动,希望一旦重新启动,它会注意到增加的内存配置。

  • 请提供以下命令的输出
kubectl describe nodes
  • 使用以下命令重新启动 kubelet 应该可以工作,因为 kubelet 每次启动时都会重新计算可分配 cpu 和内存
systemctl restart kubelet
  • 您是否尝试在重启 kubelet 后删除并重新创建第三个 pod?