Focused on a Kubernetes cluster, cost data are available on the XSEDE portal and are equivalent to the virtual CPUs made available to each instance.
import pandas as pd
#!openstack flavor list -f csv > openstack_flavor.csv
%%file openstack_flavor.csv
"ID","Name","RAM","Disk","Ephemeral","VCPUs","Is Public"
"1","m1.tiny",2048,8,0,1,True
"10","m1.quad",10240,20,0,4,True
"14","s1.large",30720,120,120,10,True
"15","s1.xlarge",61440,240,240,24,True
"16","s1.xxlarge",122880,480,480,44,True
"2","m1.small",4096,20,0,2,True
"3","m1.medium",16384,60,0,6,True
"4","m1.large",30720,60,0,10,True
"5","m1.xlarge",61440,60,0,24,True
"6","m1.xxlarge",122880,60,0,44,True
flavor = pd.read_csv("openstack_flavor.csv").set_index("Name")
flavor
num_masters = 1
num_workers = {"minimum":0, "average":2, "maximum":5}
flavor_master = "m1.xlarge"
flavor_workers = "m1.xlarge"
for scenario in num_workers:
print(15*"-" + f" SU usage for the {scenario} scenario")
print(f"{num_masters} {flavor_master} master - {num_workers[scenario]} {flavor_workers} workers")
su_cost = num_masters * flavor.loc[flavor_master].VCPUs + num_workers[scenario] * flavor.loc[flavor_workers].VCPUs
print(f"{su_cost} SU/hour")
print(f"{su_cost*24:,} SU/day")
print(f"{su_cost*24*30:,} SU/month")