Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplo de datos de asignación de costos divididos para instancias aceleradas
El objetivo del siguiente ejemplo es mostrarle cómo se calculan los datos de asignación de costos divididos mediante el cómputo del costo de los pods y espacio de nombres de Kubernetes en los clústeres de Amazon EKS. Las tasas utilizadas en todo el ejemplo tienen únicamente fines ilustrativos.
Tiene el siguiente uso en una sola hora:
-
Instancia de EC2 individual que ejecuta cuatro pods en dos espacios de nombres y de la que quiere saber los costos de cada espacio de nombres.
-
La instancia de EC2 es p3.16xlarge con 8 GPU, 64 vCPU y 488 GB de RAM.
-
El coste amortizado de la instancia es de 10 USD por hora.
Los datos de asignación de costos divididos normalizan el costo por recurso en función de un índice relativo de la GPU:(cpu:memoria) de 9:1. Esto implica que una unidad de GPU cuesta nueve veces más que una unidad de CPU y memoria. Por ello, a la CPU y a la memoria se les asigna entonces un peso de 9:1. Para una instancia de EC2 no acelerada, se adoptará el comportamiento predeterminado actual, que es la CPU: el peso de la memoria se establece de forma predeterminada en 9:1.
Paso 1: cálculo del costo unitario
En función de los recursos de CPU y memoria de la instancia de EC2 y si utilizamos el índice mencionado anteriormente, los datos de asignación de costos divididos primero calculan el costo unitario por GPU, vCPU/hora y GB/hora.
GPU-Weight =9
GPU+Memory-Weight =1
CPU-Weight=1*.9=.9
Memory-Weight=1*0.1=0.1
Hourly-Instance-Cost=$10
GPU-Available=8
Memory-Available=488
CPU-Available=64
UnitCostPerResource = Hourly-Instance-Cost/(( GPU-Weight * GPU-Available) + (Memory-Weight * Memory-Available) + (CPU-Weight * CPU-Available))
= $10/((9*8gpu)+ (0.1 * 488GB) + (.9 * 64vcpu)) = $0.056
Cost-per-GPU-Hour = GPU-Weight * UnitCostPerResource = 9 * $0.056 = $0.504
Cost-per-vcpu-Hour = CPU-Weight * UnitCostPerResource = .9 * $0.056 = $0.05
Cost-per-GB-Hour = Memory-Weight * UnitCostPerResource = .1 * $0.056 = $0.00506
| Instancia | Tipo de instancia | vCPU disponible | GPU disponible | ** | Memoria disponible | Costo amortizado por hora | Costo por hora de vCPU | Costo por hora de GPU | Costo por hora de GB |
|---|---|---|---|---|---|---|---|---|---|
| Instancia 1 | p3.16xlarge | 64 | 8 | 488 | 10$ | 0,05 USD | 0,50$ | 0,005 |
Paso 2: cálculo de la capacidad asignada y sin utilizar
- Capacidad asignada
-
La GPU, la vcpu y la memoria asignadas al pod de Kubernetes desde la instancia de EC2 principal, definidas como la máxima capacidad (reservada y utilizada).
- Capacidad sin utilizar de la instancia
-
Capacidad no utilizada de la GPU, la vcpu y la memoria.
Pod1-Allocated-GPU = Max (1 GPU, 1 GPU) = 1 GPU
Pod1-Allocated-vcpu = Max (16 vcpu, 4 vcpu) = 16 vcpu
Pod1-Allocated-Memory = Max (100 GB, 60 GB) = 100 GB
Instance-Unused-GPU = Max (GPU-Available - SUM(Allocated-vcpu), 0)
= Max (8 – 8, 0) = 0
Instance-Unused-vcpu = Max (CPU-Available - SUM(Allocated-vcpu), 0)
= Max (16 – 18, 0) = 0
Instance-Unused-Memory = Max (Memory-Available - SUM(Allocated-Memory), 0)
= Max (488 – 440, 0) = 48 GB
En este ejemplo, la instancia tiene una sobresuscripción de CPU, lo que se atribuye a que Pod 2 ha utilizado más GPU y vcpu de la que estaba reservada.
| Nombre de pod | Namespace | vcpu reservada | vcpu utilizada | vcpu asignada | GPU reservada | GPU usada | GPU asignada | Memoria reservada | Memoria usada | Memoria asignada |
|---|---|---|---|---|---|---|---|---|---|---|
| Pod 1 | Espacio de nombres 1 | 16 | 4 | 16 | 1 | 1 | 1 | 100 | 60 | 100 |
| Pod 2 | Espacio de nombres 2 | 16 | 18 | 18 | 2 | 3 | 3 | 100 | 140 | 140 |
| Pod 3 | Espacio de nombres 1 | 16 | 4 | 16 | 2. | 1 | 2 | 100 | 60 | 100 |
| Cápsula 4 | Espacio de nombres 2 | 16 | 4 | 16 | 2 | 2 | 2. | 100 | 40 | 100 |
| No utilizado | No utilizado | 0 | 34 | 0 | 1 | 1 | 0 | 88 | 188 | 48 |
| *** | 64 | 32 | 66 | 8 | 8 | 8 | 488 | 488 | 488 |
Paso 3: cálculo de los índices de uso dividido y de utilización
- Índice de uso dividido
-
Es el porcentaje de CPU o memoria que utiliza el pod de Kubernetes en comparación con el total de CPU o memoria disponible en la instancia de EC2.
- Índice no utilizado
-
Es el porcentaje de CPU o memoria que utiliza el pod de Kubernetes en comparación con la CPU o memoria totales utilizadas en la instancia de EC2 (es decir, sin tener en cuenta la CPU o la memoria no utilizadas de la instancia).
Es el porcentaje de CPU o memoria que utiliza el pod de Kubernetes en comparación con el total de CPU o memoria disponible en la instancia de EC2.
Pod1-GPU-Utilization-Ratio = Allocated-GPU / Total-GPU
= 1 gpu / 8 gpu = 0.125
Pod1-vcpu-Utilization-Ratio = Allocated-vcpu / Total-vcpu
= 16 vcpu / 66 vcpu = 0.24
Pod1-Memory-Utilization-Ratio = Allocated-GB / Total-GB
= 100 GB/ 488GB = 0.205
Pod1-GPU-Split-Ratio = Pod1-GPU-Utilization-Ratio / (Total-GPU-Utilization-Ratio – Instance-Unused-GPU). Set to 0 if Instance-Unused-GPU = 0
= 0 since Instance-Unused-GPU is 0
Pod1-vcpu-Split-Ratio = Pod1-CPU-Utilization-Ratio / (Total-CPU-Utilization-Ratio – Instance-Unused-CPU). Set to 0 if Instance-Unused-CPU = 0
= 0 since Instance-Unused-CPU is 0
Pod1-Memory-Split-Ratio = Pod-Memory-Utilization-Ratio / (Total-Utilization-Ratio – Instance-Unused-Memory). Set to 0 if Instance-Unused-Memory = 0
= 0.204/ (1-0.102) = 0.227
| Nombre de pod | Namespace | Utilización de vcpu | Índice de uso dividido de vcpu | Uso de la GPU | Índice de uso dividido de la GPU | Utilización de la memoria | Índice de uso dividido de la memoria |
|---|---|---|---|---|---|---|---|
| Pod 1 | Espacio de nombres 1 | 0,242 | 0 | 0.125 | 0 | 0,205 | 0.227 |
| Pod 2 | Espacio de nombres 2 | 0,277 | 0 | 0,375 | 0 | 0,287 | 0,318 |
| Pod 3 | Espacio de nombres 1 | 0,242 | 0 | 0,25 | 0 | 0,205 | 0.227 |
| Cápsula 4 | Espacio de nombres 2 | 0.242 | 0 | 0,25 | 0 | 0,205 | 0.227 |
| No utilizado | No utilizado | 0 | 0,098 | ||||
| 1 | 0 | 1 | 0 | 1 | 1 |
Paso 4: cálculo del costo dividido y los costos no utilizados
- Costos divididos
-
La asignación del costo de pago por uso del costo de la instancia de EC2 en función del uso de CPU y memoria asignado a los pods de Kubernetes.
- Costo de las instancias sin utilizar
-
Es el costo de los recursos de CPU o memoria no utilizados de la instancia.
Pod1-Split-Cost = (Pod1-GPU-Utilization-Ratio * GPU-Available * Cost per GPU-Hour) + (Pod1-vcpu-Utilization-Ratio * vcpu-Available * Cost per vcpu-Hour) + (Pod1-Memory-Utilization-Ratio * Memory-Available * Cost per GB-Hour)
= (.125*8gpu*$0.504) + (0.242 * 64 vcpu * $0.05) + (0.204 * 488GB * $0.00506) = 0.504+ 0.774 + 0.503 = $1.85
Pod1-Unused-Cost = (GPU-Split-Ratio * Unused-Cost) + (vcpu-Split-Ratio * Unused-Cost) + (Memory-Split-Ratio * Unused-Cost)
= (0*0*8*$0.504) + (0 * $0.05) + (0.227 *.102*488GB*$.00506) = $0.06
Pod1-Total-Split-Cost = Pod1-Split-Cost + Pod1-Unused-Cost = $1.85 + $0.06 = $1.91
[Nota: Costo no utilizado = ratio de tiempo útil no utilizado * Recurso total * Costo por hora del recurso]
| Nombre de pod | Namespace | Costos divididos | Costo no utilizado | Costo total |
|---|---|---|---|---|
| Pod 1 | Espacio de nombres 1 | 1,85 dólares | 0,06 USD | 1,91$ |
| Pod 2 | Espacio de nombres 2 | 3,18 DÓLARES | 0,09$ | 3,26 DÓLARES |
| Pod 3 | Espacio de nombres 1 | 2,35 DÓLARES | 0,06 USD | 2,41 DÓLARES |
| Cápsula 4 | Espacio de nombres 2 | 2,35 DÓLARES | 0,06 USD | 2,41 DÓLARES |
| Total | 10 DÓLARES |