【问题标题】:How does Kubernetes deal with node resource changes at run time?Kubernetes 在运行时如何处理节点资源变化?
【发布时间】:2019-10-04 20:23:47
【问题描述】:

我对 k8s 还是很陌生。 k8s如何处理节点资源变化?例如,如果某些节点是 VM,并且它们的资源分配(cpu 和内存)随时间变化,k8s 控制平面是否会持续监控每个节点可用的计算资源并更新其记录?

【问题讨论】:

  • 您可能必须尝试一下或跟踪 kubelet 代码才能确定。但我会随机猜测您必须重新启动 kubelet。虽然它确实会持续检查磁盘空间,所以它可能会刷新内存和 CPU 计数。

标签: kubernetes


【解决方案1】:

确切地说,“运行时更改”是什么意思? 您的意思是VM(节点)在集群中,您将关闭此VM,添加新资源并再次打开?

如果是,请查找一些信息here 和下面的一些示例:

Minikube

您无法更改它。在创建Minikube集群的过程中,如果你没有指定资源,它会自动创建名称为Minikube、2个CPU和2048 RAM的集群。

如果您将指定 Minikube 资源,例如:

$ sudo minikube start --cpus=4 --memory=8192 -p minikube-name

Kubeadm

基本上如果提到的VM不是Master,你只需要关闭VM,添加资源并再次运行它。 Kubeadm 会自动识别节点资源已更改。

$ kubectl describe node <node-name>

$ kubectl describe node ubuntu18-slave
...
Addresses:
  InternalIP:  10.156.0.16
  Hostname:    ubuntu18-slave
Capacity:
 cpu:                2
 ephemeral-storage:  9983232Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             7652372Ki
 pods:               110
Allocatable:
 cpu:                2
 ephemeral-storage:  9200546596
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             7549972Ki
 pods:               110
...

添加了资源。只需关闭并打开 VM,无需重启kubelet

$ kubectl describe node ubuntu18-slave
...
Addresses:
  InternalIP:  10.156.0.16
  Hostname:    ubuntu18-slave
Capacity:
 cpu:                8
 ephemeral-storage:  9983232Ki
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             30875684Ki
 pods:               110
Allocatable:
 cpu:                8
 ephemeral-storage:  9200546596
 hugepages-1Gi:      0
 hugepages-2Mi:      0
 memory:             30773284Ki
 pods:               110
...

这取决于云提供商。我试图用GKE 来实现这一点。 我发现只有一种方法可以做到这一点。你只需要: * 使用特定资源创建一个新的node_pool * 将它们添加到集群 * 排空旧节点 * 删除旧节点

注意:

请记住,在关闭VM(节点)之前,您应该drain要关闭的节点。

监控

要实现当前时间的资源使用情况,请创建使用历史记录,您可以使用一些开源或付费软件。一切都取决于您的需求

  • Kubernetes 仪表板
  • 普罗米修斯 + Grafana
  • 数据狗
  • Sysdig 等等

不过,我建议您使用 Prometheus,因为它是最受欢迎的之一,您可以在网上找到许多教程。
Here 您可以找到许多有关指标和普罗米修斯的有用信息。

【讨论】:

  • 非常感谢您的详细解答!通过“运行时更改”,我的意思是在不关闭虚拟机的情况下添加/删除核心,例如膨胀
【解决方案2】:

我发现this 链接非常有用。要回答您的问题,K8s 是否监控资源,是的,因为它必须确保节点上所需的资源在资源允许的限制范围内,例如 CPU。

【讨论】:

    【解决方案3】:

    是的,您可以添加 grafana 以更具描述性的方式查看这些变化,或者 kubernetes 仪表板也可以提供帮助。

    您还可以计算分配给应用程序 pod 的资源限制,即它们被调度的节点,从而大致了解工作节点的内存和 cpu 占用率。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2018-07-14
      • 2018-09-26
      • 2021-11-10
      • 2021-05-20
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多