pcapi/wwwroot/api/v1/create_pod.dspy
2025-07-16 14:46:24 +08:00

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