kubernetes從入門到精通系列19-容器資源限制

kubernetes從入門到精通系列目錄:


kubernetes從入門到精通系列19-容器資源限制


起始值 requests 最低保障

終結值 limits 硬限制

  • CPU
<code>1 顆 CPU = 1000 millicores
0.5 顆 CPU = 500 m
/<code>
  • 內存
<code>Ei、Pi、Ti、Gi、Mi、Ki
/<code>

19.1 資源限制

  • 清單格式,詳見:kubectl explain pods.spec.containers.resources
<code>resources      <object>               # 資源限制
limits # 資源最高限制
cpu <string> # 單位 m
memory <string> # 單位 Gi、Mi
requests # 資源最低要求
cpu <string> # 單位 m
memory <string> # 單位 Gi、Mi
/<string>/<string>
/<string>/<string>
/<object>/<code>
  • 清單示例,node 節點的 CPU 為 12 核心,cpu limits 設置為 1000m 也就是允許
<code>apiVersion: v1
kind: Pod
metadata:
name: pod-resources-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: nginx
image: ikubernetes/stress-ng
command:
- "/usr/bin/stress-ng"
#- "-m 1" # 以單線程壓測內存
- "-c 1" # 以單線程壓測CPU
- "--metrics-brief"
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
resources:
requests:
cpu: 1000m # 它決定在預選階段淘汰哪些主機
memory: 512Mi
limits:
cpu: 1000m # 表示限制容器使用 node 節點的一顆 CPU,無論多少進程,它們最多隻能佔用 node 節點的可 CPU
memory: 512Mi
/<code>
  • 查看結果
<code>Mem: 855392K used, 139916K free, 10188K shrd, 796K buff, 350368K cached
CPU0: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU1: 100% usr 0% sys 0% nic 0% idle 0% io 0% irq 0% sirq # 佔滿了一顆 CPU

CPU2: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU3: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU4: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU5: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU6: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU7: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU8: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU9: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU10: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
CPU11: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
Load average: 0.84 0.50 0.40 3/485 11
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
6 1 root R 6888 1% 1 8% {stress-ng-cpu} /usr/bin/stress-ng -c 1 --metrics-brief
1 0 root S 6244 1% 10 0% /usr/bin/stress-ng -c 1 --metrics-brief
7 0 root R 1504 0% 11 0% top
/<code>

19.2 qos 質量管理

  • GuranteedW
<code>每個容器同時設置了 CPU 和內存的 requests 和 limits,而且
cpu.limits = cpu.requests
memory.limits = memory.requests
那麼它將優先被調度
/<code>
  • Burstable
<code>至少有一個容器設置 CPU 或內存資源的 requests 屬性

那麼它將具有中等優先級
/<code>
  • BestEffort
<code>沒有任何一個容器設置了 requests 或 limits 屬性 


那麼它將只有最低優先級,當資源不夠用的時候,這個容器可能最先被終止,以騰出資源來,為 Burstable 和 Guranteed
/<code>
  • oom 策略
<code>最先殺死佔用量和需求量的比例大的
/<code>


分享到:


相關文章: