Zadania - procesy krótkotrwałe
Zadania w CGC są idealne do uruchamiania zadań, które mają wyraźny początek i koniec. W przeciwieństwie do zwykłych zasobów, które działają nieprzerwanie, zadania wykonują swoją pracę, a następnie się zatrzymują. Ten przewodnik obejmuje wszystko, co musisz wiedzieć o tworzeniu i zarządzaniu zadaniami.
- Obciążenia o jednorazowym wykonaniu
- Konfigurowalny TTL (Time To Live) do automatycznego czyszczenia
- Wsparcie dla przetwarzania równoległego
- Zasady ponawiania dla nieudanych wykonań
- Może czekać w stanie Pending, gdy zasoby nie są dostępne w instancji CGC
Tworzenie zadań
informacja
Moduł job jest bardzo podobny do używania modułu resource
import cgc.sdk.job as job
# Create a simple job
response = job.job_create(
name="hello-world-job",
image_name="busybox:latest",
startup_command="echo 'Hello, World!'",
cpu=1,
memory=1
)
if response['code'] == 200:
print("Job created successfully!")
Zarządzanie TTL (Time To Live)
Zrozumienie TTL
TTL kontroluje pole ttlSecondsAfterFinished
w zadaniach Kubernetes, umożliwiając automatyczne odśmiecanie.
Zadanie, które jest completed
, pozostaje do celów logowania. Ten parametr umożliwia automatyczne usuwanie ukończonego zadania (zarówno udanego, jak i nieudanego).
Wyświetlanie zadań
Pobierz wszystkie zadania
import cgc.sdk.job as job
# List all jobs
jobs_response = job.job_list()
if jobs_response['code'] == 200:
job_list = jobs_response['details'].get('job_list', [])
for j in job_list:
name = j.get('name', 'unknown')
status = j.get('status', {}).get('phase', 'unknown')
created = j.get('created_at', 'unknown')
print(f"Job: {name}")
print(f" Status: {status}")
print(f" Created: {created}")
print()
Filtruj zadania według statusu
def get_jobs_by_status(target_status):
"""Get jobs with specific status"""
response = job.job_list()
if response['code'] != 200:
return []
matching_jobs = []
for j in response['details'].get('job_list', []):
if j.get('status', {}).get('phase') == target_status:
matching_jobs.append(j)
return matching_jobs
# Get all running jobs
running = get_jobs_by_status('Running')
print(f"Found {len(running)} running jobs")
# Get all succeeded jobs
succeeded = get_jobs_by_status('Succeeded')
print(f"Found {len(succeeded)} succeeded jobs")
Usuwanie zadań
Podstawowe usuwanie
import cgc.sdk.job as job
# Delete a specific job
response = job.job_delete("my-job-name")
if response['code'] == 200:
print("Job deleted successfully")
else:
print(f"Failed to delete job: {response['message']}")
Usuwanie wsadowe
def delete_completed_jobs():
"""Delete all completed jobs"""
response = job.job_list()
if response['code'] != 200:
print("Failed to list jobs")
return
deleted_count = 0
for j in response['details'].get('job_list', []):
job_phase = j.get('status', {}).get('phase')
if job_phase == 'Succeeded':
delete_response = job.job_delete(j['name'])
if delete_response['code'] == 200:
deleted_count += 1
print(f"Deleted: {j['name']}")
print(f"Total deleted: {deleted_count}")
# Clean up completed jobs
delete_completed_jobs()
Najlepsze praktyki
Konwencje nazewnictwa
from datetime import datetime
def generate_job_name(prefix, suffix=None):
"""Generate unique job name with timestamp"""
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
if suffix:
return f"{prefix}-{suffix}-{timestamp}"
return f"{prefix}-{timestamp}"
# Use it
job_name = generate_job_name("backup", "postgres")
# Result: "backup-postgres-20240115-143022"
Rozwiązywanie typowych problemów
Zadanie pozostaje w stanie Pending
- Sprawdź dostępność zasobów
- Zweryfikuj, czy obraz można pobrać
Zadanie kończy się niepowodzeniem natychmiast
- Sprawdź składnię komendy startowej
- Zweryfikuj zmienne środowiskowe
- Sprawdź punkt wejścia obrazu
Zadanie działa, ale się nie kończy
- Zadanie może czekać na dane wejściowe
- Proces może się zawiesić
- Sprawdź nieskończone pętle