29. 资源限制
29.1 资源限制概括
| 1.如果运行的容器没有定义资源(memory、CPU)等限制,但是在namespace定义了LimitRange限制,那么该容器会继承LimitRange中的默认限制 |
| 2.如果namespace没有定义LimitRange限制,那么该容器可以只要宿主机的最大可用资源,直到无资源可用而触发宿主机(OOM Killer) |
| CPU 以核心为单位进行限制,单位可以是整核,浮点核心数或豪核(m/milli) |
| 2=2核心=200% 0.5=500m=50% 1.2=1200m=120% |
| memory 以字节为单位,单位可以是E、P、T、G、M、K、Gi、Mi |
| 1536Mi=1.5Gi |
| requests(请求)为kubernetes scheduler执行pod调度时node节点至少需要拥有的资源 |
| limits(限制)为pod运行成功后最多可以使用的资源上限 |

29.2 容器资源限制
| root@k8s-master1:~/20220821/magedu-limit-case |
| |
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: limit-test-deployment |
| namespace: demo |
| spec: |
| replicas: 1 |
| selector: |
| matchLabels: |
| app: limit-test-pod |
| template: |
| metadata: |
| labels: |
| app: limit-test-pod |
| spec: |
| containers: |
| - name: limit-test-container |
| image: lorel/docker-stress-ng |
| resources: |
| limits: |
| cpu: "2" |
| memory: "512Mi" |
| requests: |
| memory: "512M" |
| cpu: "2" |
| |
| args: ["--vm", "3", "--vm-bytes", "256M"] |
29.3 Pod资源限制
| root@k8s-master1:~/20220821/magedu-limit-case |
| apiVersion: v1 |
| kind: LimitRange |
| metadata: |
| name: limitrange-magedu |
| namespace: demo |
| spec: |
| limits: |
| - type: Container |
| max: |
| cpu: "2" |
| memory: "2Gi" |
| min: |
| cpu: "500m" |
| memory: "512Mi" |
| default: |
| cpu: "500m" |
| memory: "512Mi" |
| defaultRequest: |
| cpu: "500m" |
| memory: "512Mi" |
| maxLimitRequestRatio: |
| cpu: 2 |
| memory: 2 |
| - type: Pod |
| max: |
| cpu: "4" |
| memory: "4Gi" |
| - type: PersistentVolumeClaim |
| max: |
| storage: 50Gi |
| min: |
| storage: 30Gi |
29.4 namespace资源限制
| root@k8s-master1:~/20220821/magedu-limit-case |
| apiVersion: v1 |
| kind: ResourceQuota |
| metadata: |
| name: quota-demo |
| namespace: demo |
| spec: |
| hard: |
| requests.cpu: "8" |
| limits.cpu: "8" |
| requests.memory: 8Gi |
| limits.memory: 8Gi |
| requests.nvidia.com/gpu: 4 |
| pods: "6" |
| services: "6" |