Zrozumienie wolumenów
SDK wolumenów CGC zapewnia funkcjonalność tworzenia, zarządzania i montowania trwałych wolumenów pamięci masowej do zasobów obliczeniowych.
Wolumeny zachowują dane poza cyklem życia poszczególnych kontenerów i mogą być współdzielone między wieloma zasobami.
Indywidualne prawa dostępu mogą wymagać dostosowania dla folderów, plików, podfolderów, aby w pełni wykorzystać tę funkcję i nie napotkać błędów uprawnień.
Szybki przykład
import cgc.sdk.volume as volume
import cgc.sdk.resource as resource
# Create a volume
response = volume.volume_create("my-data", size=10)
if response['code'] == 200:
print("Volume created successfully")
# Wait for volume to be ready
if volume.volume_ready("my-data"):
print("Volume is ready for use")
# Mount to a compute resource (requires app reload)
volume.volume_mount("my-data", "my-compute")
# Use the volume in your workload...
# Cleanup
volume.volume_umount("my-data") # will reload the app
volume.volume_delete("my-data")
Operacje na wolumenach
Twórz trwałe wolumeny pamięci masowej o określonym rozmiarze i klasie pamięci:
import cgc.sdk.volume as volume
# Create with default storage class
response = volume.volume_create("my-volume", size=20)
# Create with specific storage class
response = volume.volume_create(
name="fast-storage",
size=50,
storage_class="ssd-rwx-ec"
)
# Check response
if response['code'] == 200:
print("Volume created successfully")
else:
print(f"Failed to create volume: {response.get('message')}")
Wyświetlanie wolumenów
Uzyskaj informacje o wszystkich wolumenach w swojej przestrzeni nazw:
response = volume.volume_list()
if response['code'] == 200:
volumes = response['details']['volume_list']
for vol in volumes:
# Note: size comes with 'Gi' suffix (e.g., '10Gi')
size = vol['size'].replace('Gi', '')
print(f"Volume: {vol['name']}, Size: {size}GB, Status: {vol['status']}")
print(f" Storage Type: {vol['disks_type']}, Mounted to: {vol['mounted_to']}")
Sprawdzanie statusu wolumenu
Sprawdź, czy wolumin jest gotowy do użycia:
# Simple boolean check
if volume.volume_ready("my-volume"):
print("Volume is ready to mount")
else:
print("Volume is still provisioning")
# Wait for volume with timeout
import time
def wait_for_volume(name, timeout=60):
start_time = time.time()
while time.time() - start_time < timeout:
if volume.volume_ready(name):
return True
time.sleep(2)
return False
if wait_for_volume("my-volume"):
print("Volume is ready!")
else:
print("Timeout waiting for volume")
Usuwanie wolumenów
Usuń wolumeny, gdy nie są już potrzebne:
# Delete unmounted volume
response = volume.volume_delete("my-volume")
# Force delete even if mounted (dangerous)
response = volume.volume_delete("my-volume", force=True)
if response['code'] == 200:
print("Volume deleted successfully")
Klasy pamięci
Klasy pamięci definiują typ i charakterystyki wydajności wolumenów.
Dostępne klasy pamięci
# Get all available storage classes
storage_classes = volume.get_available_storage_classes()
print("Available storage classes:", storage_classes)
# Get default storage class
default_class = volume.get_default_storage_class()
print("Default storage class:", default_class)
# Get details about a specific storage class
response = volume.volume_storage_class_details("ssd-rwx-ecd")
if response['code'] == 200:
details = response['details']
print(f"Storage class details: {details}")
Montowanie i odmontowywanie
Niezbędne jest dla zasobów obliczeniowych i zadań używanie trwałej pamięci masowej, gdy jest to wymagane. Wolumeny muszą być dołączone podczas tworzenia zasobu lub później za pomocą zestawu poleceń.
Montowanie wolumenów
Dołącz wolumeny do zasobów obliczeniowych, aby uzyskać dostęp do przechowywanych danych:
# Mount with default path
response = volume.volume_mount("my-volume", "my-compute")
# Mount with custom start path
response = volume.volume_mount(
name="my-volume",
target="my-compute",
start_mount_path="data" # will be used, instead of the "volume name"
)
# Mount with full custom path (advanced - use carefully)
response = volume.volume_mount(
name="my-volume",
target="my-compute",
full_mount_path="/custom/mount/point"
)
if response['code'] == 200:
print("Volume mount initiated successfully")
Ważne: Opóźnienia montowania: Montowanie wolumenu uruchamia przeładowanie/restart zasobu obliczeniowego, co zajmuje czas
- Operacja montowania zwraca sukces natychmiast, ale ukończenie trwa
- Zasób obliczeniowy zostanie zrestartowany, aby zastosować montowanie wolumenu
- Status wolumenu może początkowo pokazywać "Not mounted"
- Poczekaj 15-30 sekund przed sprawdzeniem statusu montowania
import time
# Mount volume
response = volume.volume_mount("my-volume", "my-compute")
if response['code'] == 200:
print("Mount initiated, waiting for completion...")
# Wait for mount to complete
time.sleep(30) # Allow time for resource reload
# Verify mount completed
response = volume.volume_list()
for vol in response['details']['volume_list']:
if vol['name'] == 'my-volume':
if vol['mounted_to']:
print("✓ Volume is now mounted!")
else:
print("⏳ Mount still in progress...")
Odmontowywanie wolumenów
Odłącz wolumeny od zasobów obliczeniowych:
# Unmount from all resources
response = volume.volume_umount("my-volume")
# Unmount from specific resources
response = volume.volume_umount("my-volume", ["compute1", "compute2"])
# Force unmount even if resources are not responding
response = volume.volume_umount("my-volume", force=True)
if response['code'] == 200:
print("Volume unmount initiated successfully")
Ważne: Opóźnienia odmontowywania: Podobnie jak montowanie, odmontowywanie również uruchamia przeładowania zasobów
- Operacja odmontowywania zwraca sukces natychmiast, ale ukończenie trwa
- Zasób obliczeniowy zostanie zrestartowany, aby usunąć montowanie wolumenu
- Status wolumenu może początkowo nadal pokazywać "Mounted"
- Poczekaj 15-30 sekund przed sprawdzeniem statusu odmontowania
import time
# Unmount volume
response = volume.volume_umount("my-volume")
if response['code'] == 200:
print("Unmount initiated, waiting for completion...")
# Wait for unmount to complete
time.sleep(20) # Allow time for resource reload
# Verify unmount completed
response = volume.volume_list()
for vol in response['details']['volume_list']:
if vol['name'] == 'my-volume':
if not vol['mounted_to']:
print("✓ Volume is now unmounted!")
else:
print("⏳ Unmount still in progress...")