Przejdź do głównej zawartości

Zrozumienie wolumenów w CGC SDK

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, storage_class="ssd-rwx-ec")
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:

Zawsze podawaj storage_class jawnie: klaster może nie definiować domyślnej klasy magazynu, a cgc status wypisuje klasy dostępne w Twojej przestrzeni nazw.

import cgc.sdk.volume as volume

# Create with an explicit 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-ec")
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")
warning

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"])

if response['code'] == 200:
print("Volume unmount initiated successfully")
warning

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...")