Limitaciones de recursos del contenedor de pods de k8


1. Limitaciones de recursos de los contenedores Pod

Al definir un Pod, opcionalmente puede establecer la cantidad de recursos necesarios para cada contenedor. Los recursos configurables más comunes son la CPU y el tamaño de la memoria, entre otros tipos de recursos.

Cuando se especifica un recurso para un contenedor en un Pod request, representa la cantidad mínima de recursos necesarios para que se ejecute el contenedor, y el programador usa esta información para decidir en qué nodo programar el Pod. Cuando también se especifican recursos para el contenedor limit, kubelet se asegurará de que el contenedor en ejecución no utilice más recursos que el límite establecido. Kubelet también reservará la cantidad de recursos de solicitud establecida para el contenedor para que la utilice el contenedor.

Si el nodo donde se ejecuta el Pod tiene suficientes recursos disponibles, el contenedor puede usar más recursos que la solicitud establecida. Sin embargo, el contenedor no puede utilizar más recursos que el límite establecido.

Si se establece el valor del límite de memoria para el contenedor, pero no se establece el valor de solicitud de memoria, Kubernetes establecerá automáticamente un valor de solicitud que coincida con el límite de memoria. De manera similar, si el valor límite de CPU se establece para un contenedor pero el valor de solicitud de CPU no se establece, Kubernetes establece automáticamente el valor de solicitud de CPU y lo compara con el valor límite de CPU.

Ejemplo de sitio web oficial:
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/

//Pod 和 容器 的资源请求和限制:
spec.containers[].resources.requests.cpu		//定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.memory		//定义创建容器时预分配的内存资源
spec.containers[].resources.limits.cpu			//定义 cpu 的资源上限 
spec.containers[].resources.limits.memory		//定义内存的资源上限

2. Unidad de recursos de CPU

La solicitud y el límite de recursos de la CPU están en la CPU. Una CPU en Kubernetes equivale a 1 vCPU (1 hiperproceso).
Kubernetes también admite solicitudes con CPU fraccionarias. Un contenedor cuyo spec.containers[].resources.requests.cpu es 0.5 puede obtener la mitad de los recursos de CPU de una CPU (similar a la división de tiempo de los recursos de CPU de Cgroup). La expresión 0.1 es equivalente a la expresión 100m (milicore), lo que significa que la cantidad total de tiempo de CPU que el contenedor puede usar cada 1000 milisegundos es 0.1*1000 milisegundos.
Kubernetes no permite configurar recursos de CPU con una precisión inferior a 1 m.

3. Unidad de recursos de memoria

La solicitud de memoria y el límite están en bytes. Se puede expresar como un número entero, o en unidades de exponente de base 10 (E, P, T, G, M, K), o en unidades de exponente de base 2 (Ei, Pi, Ti, Gi, Mi, Ki) para representar.
Por ejemplo: 1KB=10 3=1000, 1MB=10 6=1000000=1000KB, 1GB=10^9=1000000000=1000MB
1KiB=2 10=1024, 1MiB=2 20=1048576=1024KiB

PD: Al comprar un disco duro, la cantidad indicada por el sistema operativo es menor que lo que está marcado en el producto o lo que afirma el comerciante. La razón principal es que la cantidad marcada está en MB y GB. 1 GB es 1.000.000.000 Byte, y el sistema operativo está en unidades de MB y GB. El binario es la unidad de procesamiento, por lo que al verificar la capacidad del disco duro, se utilizan MiB y GiB como unidad, 1 GiB = 2 ^ 30 = 1,073,741,824. En comparación, 1 GiB es 1,073,741,824-1,000,000,000 =73,741,824Bytes más de 1GB, por lo que la detección real El resultado es menor que el indicado.

实例:
apiVersion: v1
kind: Pod
metadata:
  name: myapp-demo4
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: "0.25"
        memory: "128Mi"
      limits:
        cpu: "0.5"
        memory: "256Mi"
 - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "abc123"
    ports:
    - containerPort: 80
    resources:
      requests:
        cpu: "250m"
        memory: "128Mi"
      limits:
        cpu: "500m"
        memory: "256Mi"

  restartPolicy: Always
        

Insertar descripción de la imagen aquí

 kubectl describe pod myapp-demo4

Insertar descripción de la imagen aquí
Cuando un proceso en un contenedor intenta utilizar recursos que exceden la cantidad de memoria permitida, el kernel del sistema finalizará el proceso que intenta solicitar memoria y provocará un error de falta de memoria (OOM).

Los límites pueden implementarse pasivamente (el sistema interviene cuando se detecta una infracción) o imponerse (el sistema evita que el uso del contenedor exceda el límite). Diferentes tiempos de ejecución de contenedores implementan las mismas restricciones de diferentes maneras.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

kubectl describe node node01  //查看node01节点pod使用资源情况

Insertar descripción de la imagen aquí

4. Establecer solicitudes y límites para el almacenamiento temporal local.

Puede especificar ephemeral-storageadministrar el almacenamiento temporal local. Cada contenedor en un Pod puede establecer las siguientes propiedades:

spec.containers[].resources.limits.ephemeral-storage
spec.containers[].resources.requests.ephemeral-storage

Se dimensionan las solicitudes y los límites de almacenamiento efímero. Puede utilizar números enteros generales o números de coma fija con los siguientes sufijos para expresar cantidades de almacenamiento: E, P, T, G, M, k. También puedes utilizar la serie de potencias correspondiente de 2 para expresar: Ei, Pi, Ti, Gi, Mi, Ki. Por ejemplo, las siguientes expresiones expresan aproximadamente el mismo valor:

  • 128974848
  • 129e6
  • 129M
  • 123Mi

Tenga en cuenta el caso del sufijo. Si solicita 400 m de almacenamiento temporal, en realidad está solicitando 0,4 bytes. Si alguien establece una solicitud de recursos o un límite como este, su idea real puede ser solicitar 400Mi bytes (400Mi) o 400M bytes.

En el siguiente ejemplo, el Pod contiene dos contenedores. Cada contenedor solicita 2 GiB de almacenamiento temporal local. Cada contenedor está configurado con un límite de 4 GiB como almacenamiento temporal local. Por lo tanto, la solicitud de almacenamiento temporal local completa del Pod es de 4 GiB y su límite de almacenamiento temporal local es de 8 GiB. De este límite, 500Mi están disponibles para el volumen vacíoDir.

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: app
    image: images.my-company.example/app:v4
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "4Gi"
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  - name: log-aggregator
    image: images.my-company.example/log-aggregator:v6
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "4Gi"
    volumeMounts:
    - name: ephemeral
      mountPath: "/tmp"
  volumes:
    - name: ephemeral
      emptyDir:
        sizeLimit: 500Mi

Insertar descripción de la imagen aquí

5. Resumen

Límites de recursos para contenedores Pod:
spec.containers.resources.requests.cpu/memory Establezca la cantidad de recursos que deben reservarse al crear un contenedor Pod. Configuración mínima para aplicaciones contenedoras <= solicitudes <= límites
spec.containers.resources. limites.cpu/memory settings El límite superior de la cantidad de recursos que el contenedor Pod puede usar. Si el uso de memoria del proceso del contenedor excede los límites.memory, causará OOM. Unidad de recursos de CPU: número de CPU 1 2 0.1 0.25
milicore 1000m 2000m 100m 250m
Unidad de recursos de memoria: entero (la unidad predeterminada es palabra) Sección) Unidad base de 2 (Ki Mi Gi Ti) Unidad base de 10 (KMGT)

kubectl describe el nodo XXX Ver el límite de recursos de cada pod o el límite total de recursos en el nodo node
kubectl describe pod xxx Ver el límite de recursos de cada contenedor en el Pod

Supongo que te gusta

Origin blog.csdn.net/ll945608651/article/details/131756288
Recomendado
Clasificación