侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

Kubernetes Pod 资源的使用机制

zze
zze
2021-07-01 / 0 评论 / 0 点赞 / 435 阅读 / 1538 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

Pod 好比一个虚拟机。虚拟机能分配固定的 CPU、Mem、Disk 和网络资源。Pod 也是如此,那么 Pod 是如何使用和控制这些资源的呢?

首先,我们先了解 CPU 资源的分配模式。

计算机里 CPU 的资源是按时间片的方式分配给请求的,系统里的每一个操作都需要 CPU 处理,我们知道 CPU 的单位是 Hz、GHz(1Hz=次/秒,即在单位时间内完成振动的次数,1GHz=1 000 000 000Hz=1 000 000 000次/秒),频率越大,单位时间内完成的处理次数就越多。所以,任务申请的 CPU 时间片越多,它得到的 CPU 资源就越多。

我们再来了解 Cgroup 里资源的换算单位,CPU 换算单位如下所示。

  • 1CPU=1000millicpu (1core=1000m)
  • 0.5CPU=500millicpu (0.5core=500m)

这里 m 是毫核的意思,Kubernetes 集群中的每一个节点都可以通过操作系统的命令确认本节点的 CPU 内核数量,然后将这个数量乘以 1000,得到的就是节点 CPU 总毫数。比如一个节点有 4 核,那么该节点的 CPU 总毫数为 4000m。

Kubernetes 是通过以下两个参数来限制和请求 CPU 的资源的。

  1. spec.containers[].resources.limits.cpu:CPU 上限值, 短暂超出上限值,容器不会被停止。
  2. spec.containers[].resources.requests.cpu: CPU 请求值,是 Kubernetes 调度算法里的依据值,可以超出。

这里需要说明一点,如果 resources.requests.cpu 设置的值大于集群里每个节点的最大 CPU 核心数,那么这个 Pod 将无法调度(没有节点能满足它)。

我们在 YAML 里定义一个容器 CPU 资源如下。

resources:
	requests:
		memory: 50Mi
		cpu: 50m
	limits:
		memory: 100Mi
		cpu: 100m

这里,CPU 我们给的是 50m,也就是 0.05core,这 0.05core 占了 1CPU里 5% 的资源时间。

另外,我们还要知道,Kubernetes CPU 是一个可压缩的资源。如果容器达到了 CPU 的设定值,就会开始限制 CPU 的资源,容器性能
也会随之下降,但是不会终止和退出。

最后我们了解一下内存的资源控制。

单位换算方法: 1 MiB=1024KiB,注意 MiB≠MB,MB 是十进制单位,MiB 是二进制,很多人以为 1MB=1024KB,其实 1MB=1000KB,1MiB=1024KiB。

在 Kubernetes 里,内存单位一般用的是 MiB,当然你也可以根据具体的业务需求和资源容量使用 KiB、GiB 甚至 PiB 为单位。

这里要注意的是,内存是不可压缩资源,容器使用的内存资源到达了上限会造成内存溢出,容器就会终止运行并退出。

0

评论区