73 lines
2.8 KiB
Plaintext
73 lines
2.8 KiB
Plaintext
async def create_pod(ns={}):
|
|
import hashlib
|
|
ns['pvcname'] = hashlib.md5(str(time.time()).encode()).hexdigest()[:10]
|
|
ns['podname'] = ns['pvcname']
|
|
ns['containername'] = ns['pvcname']
|
|
ns['volumename'] = ns['pvcname']
|
|
ns['namespace'] = ns['namespace'] if ns.get('namespace') else 'default'
|
|
|
|
namespace = ns['namespace'] # 使用的命名空间
|
|
core_api = client.CoreV1Api()
|
|
|
|
# 创建 PVC
|
|
#create_persistent_volume_claim(core_api, namespace)
|
|
pvc = client.V1PersistentVolumeClaim(
|
|
metadata=client.V1ObjectMeta(name=ns['pvcname']),
|
|
spec=client.V1PersistentVolumeClaimSpec(
|
|
access_modes=["ReadWriteOnce"],
|
|
resources=client.V1ResourceRequirements(
|
|
requests={"storage": str(ns['storage']) + "Gi"}
|
|
)
|
|
)
|
|
)
|
|
core_api.create_namespaced_persistent_volume_claim(namespace=namespace, body=pvc)
|
|
print("PVC created.")
|
|
|
|
# 创建 Pod
|
|
# create_pod(core_api, namespace)
|
|
pod = client.V1Pod(
|
|
metadata=client.V1ObjectMeta(name=ns['podname']),
|
|
spec=client.V1PodSpec(
|
|
containers=[
|
|
client.V1Container(
|
|
name=ns['containername'],
|
|
image=ns['image'], # 使用 Nginx 容器
|
|
command=["tail", "-f", "/dev/null"], # 确保容器保持运行
|
|
resources=client.V1ResourceRequirements(
|
|
requests={
|
|
"cpu": str(ns['cpu']), # 请求 1 个 CPU
|
|
"memory": str(ns['memory']) + "Gi", # 请求 5 GB 内存
|
|
},
|
|
limits={
|
|
"cpu": str(ns['cpu']), # 限制最多使用 4 个 CPU
|
|
"memory": str(ns['memory']) + "Gi", # 限制最多使用 8 GB 内存
|
|
"nvidia.com/gpu": ns['gpu'],
|
|
"nvidia.com/gpumem": ns['gpumem']
|
|
},
|
|
),
|
|
volume_mounts=[
|
|
client.V1VolumeMount(
|
|
name=ns['volumename'],
|
|
mount_path="/usr/share/", # 挂载路径
|
|
)
|
|
],
|
|
)
|
|
],
|
|
volumes=[
|
|
client.V1Volume(
|
|
name=ns['volumename'],
|
|
persistent_volume_claim=client.V1PersistentVolumeClaimVolumeSource(
|
|
claim_name=ns['pvcname']
|
|
),
|
|
)
|
|
],
|
|
)
|
|
)
|
|
core_api.create_namespaced_pod(namespace=namespace, body=pod)
|
|
ns['status'] = True
|
|
ns['msg'] = '创建实例成功'
|
|
return ns
|
|
|
|
ret = await create_pod(params_kw)
|
|
return ret
|
|
|