资源管理

什么是资源管理?

Kubernetes是一个容器集群管理平台,Kubernetes需要统计整体平台的资源使用情况,合理地将资源分配给容器使用,并且要保证容器生命周期内有足够的资源来保证其运行。

为什么资源配额管理是必要的?

更进一步,如果资源发放是独占的,即资源已发放给了一个容器,同样的资源不会发放给另外一个容器,对于空闲的容器来说占用着没有使用的资源(比如CPU)是非常浪费的。

Kubernetes需要考虑如何在优先度和公平性的前提下提高资源的利用率。

资源配额管理有几种类型?

  1. 计算资源配额: CPU、内存
  2. 存储资源配额: PVC容量、PVC数量
  3. 对象数量配额:congfigmaps数量、pvc数量、pod数量、rc数量等等

requests、limit是什么?

  • requests 资源基本需求
  • limit 资源上限,硬限制

CPU资源计量单位?

1 Core = 1000 millioncores

所以,500m = 半个CPU核心

内存资源计量单位?

E、P、G、M、K Ei、Pi、Gi、Mi、Ki

QoS 类别有哪些?

  • guaranteed: pod中limit和requests相同,cpu.requests=cpu.limitsmemory.requests=memory.limits,担保,高优先级
  • burstable:
  • besteffort: Pod中没有任何一个容器设置了limit或requests属性,尽力而为,最低优先级别

但Kubernetes集群资源吃紧时,会优先回收besteffort类型的容器资源,将资源优先给其他两类容器类别使用

回收逻辑

  1. 按照QoS优先级回收
  2. 按照已消耗需求的比例回头,优先回头第二种容器,因为它已经接近需求的上限制
    • (1). 需求1G内存,消耗500M内存
    • (2). 需求512M内存,消耗500M内存

示例

1. 限制只能用小于三分之一核的CPU、200M内存

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: ikubernetes/stress-ng
    command: ["/usr/bin/stress-ng", "-m 1", "-c 1", "--metrics-brief"]
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "300m"
        memory: "200Mi"

观察CPU使用情况

# kubectl exec myapp top
Mem: 1180312K used, 703412K free, 2628K shrd, 54148K buff, 798792K cached
CPU:  33% usr  58% sys   0% nic   0% idle   8% io   0% irq   0% sirq
Load average: 0.03 0.06 0.12 6/272 17
  PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
   13     7 root     RW       0   0%   0  33% [stress-ng-vm]
    6     1 root     R     6888   0%   0  25% {stress-ng-cpu} /usr/bin/stress-ng
    1     0 root     S     6244   0%   0   0% /usr/bin/stress-ng -m 1 -c 1 --met
    7     1 root     S     6244   0%   0   0% {stress-ng-vm} /usr/bin/stress-ng 
   14     0 root     R     1500   0%   0   0% top

results matching ""

    No results matching ""