Mengoptimalkan performa dan biaya penyimpanan dengan Penyimpanan Gabungan Hyperdisk

Dokumen ini menunjukkan cara mengoptimalkan performa dan biaya penyimpanan Google Kubernetes Engine (GKE) di GKE menggunakan Kumpulan Penyimpanan Hyperdisk.

Untuk workload stateful di cluster GKE, gunakan Kumpulan Penyimpanan Hyperdisk GKE untuk mengoptimalkan performa dan biaya penyimpanan. Gabungan ini memungkinkan Anda berbagi kapasitas penyimpanan, throughput, dan IOPS secara efisien di beberapa volume Hyperdisk. Dukungan Hyperdisk bergantung pada jenis mesin node Anda. Untuk mengetahui informasi selengkapnya, lihat Dukungan seri mesin untuk Hyperdisk.

Dokumen ini ditujukan bagi spesialis penyimpanan yang men-deploy workload stateful GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

Ringkasan

Kumpulan penyimpanan mengelompokkan perangkat penyimpanan fisik secara logis, sehingga Anda dapat menyegmentasikan resource. Anda dapat menyediakan Google Cloud Hyperdisk dalam Gabungan Penyimpanan ini, sehingga pada dasarnya membuat Gabungan Penyimpanan Hyperdisk. Penyimpanan Gabungan Hyperdisk menawarkan kapasitas, throughput, dan IOPS yang telah disediakan sebelumnya yang dapat digunakan bersama oleh disk cluster GKE Anda.

Anda dapat menggunakan Penyimpanan Gabungan Hyperdisk untuk mengelola sumber daya penyimpanan secara lebih efisien dan hemat biaya. Dengan begitu, Anda dapat memanfaatkan teknologi efisiensi seperti penghapusan duplikat dan penyediaan tipis.

Dalam panduan ini, Anda menggunakan zona us-east4-c untuk membuat Hyperdisk Balanced Storage Pool dan resource lainnya.

Pertimbangan perencanaan

Pertimbangkan persyaratan dan batasan berikut sebelum menyediakan dan menggunakan Kumpulan Penyimpanan Hyperdisk Anda.

Membuat dan mengelola Kumpulan Penyimpanan

Persyaratan dan batasan berikut berlaku:

Menyediakan boot disk di Kumpulan Penyimpanan

Persyaratan dan batasan berikut berlaku:

  • Penyediaan boot disk di Storage Pool tidak didukung pada node pool dengan node auto-provisioning diaktifkan.
  • Pastikan lokasi node cluster dan lokasi node pool sama persis dengan zona pool penyimpanan.
  • Pastikan jenis mesin yang menjalankan Pod Anda mendukung pemasangan jenis disk Hyperdisk Balanced. Hyperdisk Throughput tidak didukung sebagai disk boot. Lihat Dokumentasi dukungan Jenis mesin Hyperdisk.
  • Anda dapat menyediakan boot disk di Kumpulan Penyimpanan hanya pada node pool yang dibuat atau diupdate secara manual.

Menyediakan disk terlampir di Kumpulan Penyimpanan

Persyaratan dan batasan berikut berlaku:

  • Versi GKE minimum yang diperlukan untuk penyediaan disk terlampir di Kumpulan Penyimpanan adalah 1.29.2-gke.1035000 dan yang lebih baru.
  • Pastikan driver CSI Persistent Disk Compute Engine diaktifkan. Driver Persistent Disk Compute Engine diaktifkan secara default di cluster Autopilot dan Standard baru dan tidak dapat dinonaktifkan atau diedit di cluster Autopilot. Untuk mengaktifkan driver, lihat artikel Mengaktifkan Driver CSI Persistent Disk Compute Engine pada cluster yang ada.
  • Pastikan bahwa kumpulan penyimpanan berada di setidaknya salah satu lokasi node cluster dan lokasi node kumpulan node.
  • Anda hanya dapat menyediakan disk terpasang Hyperdisk Throughput dan Hyperdisk Balanced di Storage Pool. Jenis disk terlampir harus cocok dengan jenis Storage Pool. Untuk mengetahui informasi selengkapnya, lihat Jenis Gabungan Penyimpanan Hyperdisk.
  • Dalam StorageClass, hanya 1 Storage Pool per zona yang diizinkan.
  • Dalam StorageClass, semua Storage Pool harus memiliki jenis Storage Pool.
  • Pastikan jenis mesin yang menjalankan pod Anda mendukung pemasangan jenis disk yang Anda gunakan dari Storage Pool. Untuk mengetahui informasi selengkapnya, lihat Dukungan jenis mesin Hyperdisk.

Kuota

Saat membuat Hyperdisk Storage Pool, Anda dapat mengonfigurasinya dengan penyediaan standar atau lanjutan untuk kapasitas dan performa. Jika Anda ingin meningkatkan kuota untuk kapasitas, throughput, atau IOPS, minta kuota yang lebih tinggi untuk filter kuota yang relevan.

Untuk mengetahui informasi selengkapnya, lihat Melihat kuota untuk project Anda dan Meminta penyesuaian kuota.

Gunakan filter kuota berikut untuk Hyperdisk Balanced Storage Pool:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: untuk meningkatkan kapasitas dengan Penyediaan kapasitas lanjutan.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region: untuk meningkatkan IOPS dengan penyediaan performa Lanjutan.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: untuk meningkatkan throughput dengan penyediaan performa Lanjutan.
  • HDB-TOTAL-GB-per-project-region: untuk meningkatkan kapasitas dengan penyediaan kapasitas Standar.
  • HDB-TOTAL-IOPS-per-project-region: untuk meningkatkan IOPS dengan penyediaan performa Standar.
  • HDB-TOTAL-THROUGHPUT-per-project-region: untuk meningkatkan throughput dengan penyediaan performa Standar.

Gunakan filter kuota berikut untuk Hyperdisk Throughput Storage Pool:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: untuk meningkatkan kapasitas dengan Penyediaan kapasitas lanjutan.
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: untuk meningkatkan throughput dengan penyediaan performa Lanjutan.
  • HDT-TOTAL-GB-per-project-region: untuk meningkatkan kapasitas dengan penyediaan kapasitas Standar.
  • HDT-TOTAL-THROUGHPUT-per-project-region: untuk meningkatkan throughput dengan penyediaan performa Standar.

Misalnya, jika Anda ingin meningkatkan total kapasitas untuk Hyperdisk Balanced Storage Pools dengan penyediaan kapasitas Tingkat lanjut, per project dan per region, minta kuota yang lebih tinggi untuk filter berikut:

hdb-storage-pool-total-advanced-capacity-per-project-region.

Harga

Lihat harga Gabungan Penyimpanan Hyperdisk untuk mengetahui detail harga.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Membuat Hyperdisk Storage Pool

Buat Hyperdisk Storage Pool sebelum Anda menyediakan boot disk atau disk yang terpasang di Storage Pool tersebut. Untuk mengetahui informasi selengkapnya, lihat Membuat Penyimpanan Gabungan Hyperdisk.

Pastikan Anda membuat Kumpulan Penyimpanan di salah satu zona yang didukung.

Misalnya, gunakan perintah berikut untuk membuat Hyperdisk Balanced Storage Pool dengan Kapasitas lanjutan dan Performa lanjutan, serta menyediakan kapasitas 10 TB, IOPS/s 10000 dan throughput 1024 MBps di zona us-east4-c:

export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
  --provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
  --zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
  --performance-provisioning-type=advanced --provisioned-iops=10000 \
  --provisioned-throughput=1024

Ganti PROJECT_ID dengan project ID Google Cloud akun Anda.

Memeriksa zona Storage Pool

  • Untuk cluster Autopilot dan cluster Standard dengan node auto-provisioning diaktifkan, Anda dapat membuat Storage Pool di zona mana pun dalam region cluster. Jika tidak ada node pool di zona tempat Anda membuat Storage Pool, Pod akan tetap dalam status Pending hingga GKE Cluster Autoscaler dapat menyediakan node pool baru di zona tersebut.

  • Untuk cluster Standard tanpa node auto-provisioning, buat Storage Pool di zona node default cluster Anda karena Storage Pool adalah resource zona. Anda dapat menetapkan zona node cluster menggunakan flag --node-locations.

    • Untuk cluster zonal, jika Anda tidak menentukan --node-locations, semua node akan dibuat di zona utama cluster.
    • Untuk cluster regional, jika Anda tidak menentukan --node-locations, GKE akan mendistribusikan node pekerja Anda di tiga zona yang dipilih secara acak dalam region.

Untuk memeriksa zona node default cluster, jalankan perintah berikut:

gcloud container clusters describe CLUSTER_NAME | yq '.locations'

Ganti CLUSTER_NAME dengan nama cluster yang akan Anda buat saat menyediakan boot disk atau disk terlampir.

Menyediakan boot disk GKE di Hyperdisk Storage Pool

Anda dapat menyediakan disk booting GKE di Kumpulan Penyimpanan Hyperdisk saat melakukan salah satu tindakan berikut:

  • Saat membuat cluster GKE baru
  • Saat membuat node pool baru
  • Saat memperbarui node pool yang ada

Saat membuat cluster

Untuk membuat cluster GKE dengan boot disk yang disediakan di Storage Pool, gunakan perintah berikut:

gcloud container clusters create CLUSTER_NAME \
  --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
  --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
  --location=CONTROL_PLANE_LOCATION

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • DISK_TYPE: Tetapkan ini ke hyperdisk-balanced. Jika dibiarkan kosong, jenis disk akan ditetapkan secara default ke Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Daftar yang dipisahkan koma dari jalur resource Storage Pool (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) tempat disk booting cluster akan disediakan. Pastikan zona di jalur resource Storage Pool cocok dengan zona di --node-locations.
  • ZONE,[...]: Daftar zona yang dipisahkan koma tempat jejak node Anda harus direplikasi. Untuk cluster regional, Anda dapat menentukan wilayah. Semua zona harus berada di region yang sama dengan cluster, yang ditentukan oleh flag --location.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin Anda gunakan untuk node.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.

Saat membuat node pool

Untuk membuat node pool GKE dengan disk boot yang disediakan di Storage Pool, gunakan perintah berikut:

gcloud container node-pools create NODE_POOL_NAME \
  --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
  --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
  --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME

Ganti kode berikut:

  • NODE_POOL_NAME: Berikan nama unik untuk node pool yang Anda buat.
  • DISK_TYPE: Tetapkan ini ke hyperdisk-balanced. Jika dibiarkan kosong, jenis disk akan ditetapkan secara default ke Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Daftar yang dipisahkan koma dari jalur resource Storage Pool (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) tempat disk booting cluster akan disediakan. Pastikan zona di jalur resource Storage Pool cocok dengan nilai di --node-locations.
  • ZONE,[...]: Daftar zona yang dipisahkan koma tempat jejak node Anda harus direplikasi. Semua zona harus berada di region yang sama dengan cluster, yang ditentukan oleh flag -location.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin Anda gunakan untuk node.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  • CLUSTER_NAME: Cluster yang ada tempat Anda membuat node pool.

Saat memperbarui node pool

Anda dapat menggunakan perintah update untuk menambahkan atau mengganti Storage Pool di node pool. Perintah ini tidak dapat digunakan untuk menghapus Kumpulan Penyimpanan dari node pool.

Untuk mengupdate node pool GKE sehingga boot disk-nya disediakan di Storage Pool, gunakan perintah berikut.

gcloud container node-pools update NODE_POOL_NAME \
 --storage-pools=STORAGE_POOL,[...] \
 --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
  • NODE_POOL_NAME: Nama node pool yang ada yang ingin Anda update untuk menggunakan Storage Pool.
  • STORAGE_POOL,[...]: Daftar jalur resource Storage Pool yang ada yang dipisahkan koma (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c). Pastikan zona di jalur resource Storage Pool cocok dengan zona kumpulan node yang Anda perbarui.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  • CLUSTER_NAME: Nama cluster GKE tempat node pool ini berada.

Perubahan ini memerlukan pembuatan ulang node, yang dapat menyebabkan gangguan pada workload yang sedang berjalan. Untuk mengetahui detail tentang perubahan khusus ini, temukan baris yang sesuai dalam tabel perubahan manual yang membuat ulang node menggunakan strategi upgrade node tanpa mematuhi kebijakan pemeliharaan. Untuk mempelajari lebih lanjut update node, lihat Merencanakan gangguan update node.

Menyediakan disk terpasang GKE di Hyperdisk Storage Pool

Di bagian ini:

  • Anda membuat cluster GKE baru dengan disk terpasang yang disediakan di Storage Pool.
  • Buat StorageClass untuk menyediakan PersistentVolume (PV) secara dinamis saat Pod memintanya melalui PersistentVolumeClaim (PVC). Agar PV dapat menggunakan resource bersama Storage Pool, Anda menentukan Storage Pool menggunakan parameter storage-pools di StorageClass. StorageClass kemudian digunakan dalam PVC untuk menyediakan volume Hyperdisk Seimbang yang akan digunakan oleh Pod.
  • Buat PVC untuk meminta PV--sepotong penyimpanan Hyperdisk--untuk Pod dari cluster GKE Anda. Dengan begitu, Anda dapat memanfaatkan resource bersama Storage Pool.
  • Buat Deployment yang menggunakan PVC untuk memastikan aplikasi Anda memiliki akses ke penyimpanan persisten meskipun setelah Pod dimulai ulang dan dijadwalkan ulang.

Membuat cluster GKE

Sebelum memulai, tinjau pertimbangan untuk menyediakan disk terlampir.

Autopilot

Untuk membuat cluster Autopilot menggunakan gcloud CLI, lihat Membuat cluster Autopilot.

Contoh:

gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • CONTROL_PLANE_LOCATION: region Compute Engine dari bidang kontrol cluster Anda.

Untuk memilih jenis mesin yang didukung, Anda menentukan cloud.google.com/compute-class: PerformancenodeSelector saat membuat Deployment. Untuk mengetahui daftar seri mesin Compute Engine yang tersedia dengan class komputasi Performa, lihat Seri mesin yang didukung.

Standar

Untuk membuat cluster Zonal Standard menggunakan gcloud CLI, lihat Membuat cluster zona.

Untuk membuat cluster Regional Standard menggunakan gcloud CLI, lihat Membuat cluster regional.

Contoh:

gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
  • PROJECT_ID: Project ID Google Cloud akun Anda.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin Anda gunakan untuk node.
  • DISK_TYPE: Tetapkan ini ke hyperdisk-balanced. Jika dibiarkan kosong, jenis disk akan ditetapkan secara default ke Hyperdisk Balanced.

Membuat StorageClass

Di Kubernetes, untuk menunjukkan bahwa Anda ingin PV dibuat di dalam Storage Pool, gunakan StorageClass. Untuk mempelajari lebih lanjut, lihat StorageClasses.

Untuk membuat StorageClass baru dengan level throughput atau IOPS yang Anda inginkan:

  • Gunakan pd.csi.storage.gke.io di kolom penyedia.
  • Tentukan jenis penyimpanan Hyperdisk Balanced.
  • Tentukan parameter storage-pools dengan nilai sebagai daftar Storage Pool tertentu yang ingin Anda gunakan. Setiap Storage Pool dalam daftar harus ditentukan dalam format: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • Secara opsional, tentukan parameter performa provisioned-throughput-on-create dan provisioned-iops-on-create.

Setiap jenis Hyperdisk memiliki nilai default untuk performa yang ditentukan oleh ukuran disk awal yang disediakan. Saat membuat StorageClass, Anda dapat secara opsional menentukan parameter berikut bergantung pada jenis Hyperdisk Anda. Jika Anda menghapus parameter ini, GKE akan menggunakan default jenis disk berbasis kapasitas.

Parameter Jenis Hyperdisk Penggunaan
provisioned-throughput-on-create Hyperdisk Balanced, Hyperdisk Throughput Nyatakan nilai throughput dalam MiB/s menggunakan penentu "Mi"; misalnya, jika throughput yang diperlukan adalah 250 MiB/s, tentukan "250Mi" saat membuat StorageClass.
provisioned-iops-on-create Hyperdisk Balanced, Hyperdisk IOPS Nilai IOPS harus dinyatakan tanpa penentu apa pun; misalnya, jika Anda memerlukan 7.000 IOPS, tentukan "7000" saat membuat StorageClass.

Untuk mendapatkan panduan tentang nilai yang diizinkan untuk throughput atau IOPS, lihat Merencanakan tingkat performa untuk volume Hyperdisk.

Gunakan manifes berikut untuk membuat dan menerapkan StorageClass bernama storage-pools-sc untuk menyediakan PV secara dinamis di Storage Pool projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
 name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
 type: hyperdisk-balanced
 provisioned-throughput-on-create: "140Mi"
 provisioned-iops-on-create: "3000"
 storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF

Dengan memanfaatkan volumeBindingMode: WaitForFirstConsumer di StorageClass ini, binding dan penyediaan PVC ditunda hingga Pod yang menggunakan PVC dibuat. Pendekatan ini membantu memastikan bahwa PV tidak disediakan sebelum waktunya, dan ada pencocokan zona antara PV dan Pod yang menggunakannya. Jika zonanya tidak cocok, Pod akan tetap dalam status Pending.

Buat PersistentVolumeClaim (PVC)

Buat PVC yang merujuk ke StorageClass storage-pools-sc yang Anda buat.

Gunakan manifes berikut untuk membuat PVC bernama my-pvc, dengan 2048 GiB sebagai kapasitas penyimpanan target untuk volume Hyperdisk Seimbang:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: my-pvc
spec:
 storageClassName: storage-pools-sc
 accessModes:
 - ReadWriteOnce
 resources:
  requests:
   storage: 2048Gi
EOF

Membuat Deployment yang menggunakan PVC

Praktik terbaik:

Saat menggunakan Pod dengan PersistentVolume, gunakan pengontrol workload seperti Deployment atau StatefulSet.

Untuk memastikan Pod dapat dijadwalkan di node pool dengan seri mesin yang mendukung Hyperdisk Seimbang, konfigurasi Deployment dengan pemilih node cloud.google.com/machine-family. Untuk mengetahui informasi selengkapnya, lihat dukungan jenis mesin untuk Hyperdisk. Anda menggunakan seri mesin c3 dalam Deployment contoh berikut.

Buat dan terapkan manifes berikut untuk mengonfigurasi Pod untuk men-deploy server web Postgres menggunakan PVC yang dibuat di bagian sebelumnya:

Autopilot

Di cluster Autopilot, tentukan cloud.google.com/compute-class: Performance nodeSelector untuk menyediakan volume Hyperdisk Seimbang. Untuk mengetahui informasi selengkapnya, lihat Meminta node khusus untuk Pod.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres
spec:
 selector:
  matchLabels:
   app: postgres
 template:
  metadata:
   labels:
    app: postgres
  spec:
   nodeSelector:
    cloud.google.com/machine-family: c3
    cloud.google.com/compute-class: Performance
   containers:
   - name: postgres
    image: postgres:14-alpine
    args: [ "sleep", "3600" ]
    volumeMounts:
    - name: sdk-volume
     mountPath: /usr/share/data/
   volumes:
   - name: sdk-volume
    persistentVolumeClaim:
     claimName: my-pvc
EOF

Standar

Pada cluster Standard tanpa mengaktifkan node auto-provisioning, pastikan node pool dengan seri mesin yang ditentukan sudah aktif dan berjalan sebelum membuat Deployment. Jika tidak, penjadwalan Pod akan gagal.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres
spec:
 selector:
  matchLabels:
   app: postgres
 template:
  metadata:
   labels:
    app: postgres
  spec:
   nodeSelector:
    cloud.google.com/machine-family: c3
   containers:
   - name: postgres
    image: postgres:14-alpine
    args: [ "sleep", "3600" ]
    volumeMounts:
    - name: sdk-volume
     mountPath: /usr/share/data/
   volumes:
   - name: sdk-volume
    persistentVolumeClaim:
     claimName: my-pvc
EOF

Konfirmasi bahwa Deployment berhasil dibuat:

 kubectl get deployment

Perlu waktu beberapa menit bagi instance Hyperdisk untuk menyelesaikan penyediaan dan menampilkan status READY.

Konfirmasi apakah disk terlampir telah disediakan

  1. Periksa apakah PVC Anda yang bernama my-pvc telah berhasil diikat ke PV:

    kubectl get pvc my-pvc
    

    Outputnya mirip dengan hal berikut ini:

    
    NAME     STATUS  VOLUME                   CAPACITY  ACCESS MODES  STORAGECLASS    AGE
    my-pvc    Bound  pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  2Ti    RWO      storage-pools-sc  2m24s
    
  2. Periksa apakah volume telah disediakan seperti yang ditentukan dalam StorageClass dan PVC Anda:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    Outputnya mirip dengan hal berikut ini:

    NAME                   STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY  3000       140           2048
    

Membuat snapshot dan memulihkan disk terlampir di Kumpulan Penyimpanan

Memindahkan disk ke dalam atau ke luar pool penyimpanan tidak diizinkan. Untuk memindahkan disk ke dalam atau keluar dari kumpulan penyimpanan, buat ulang disk dari snapshot. Untuk mengetahui informasi selengkapnya, lihat Mengubah jenis disk.

Di bagian ini:

Membuat file pengujian

Untuk membuat dan memverifikasi file pengujian:

  1. Dapatkan nama Pod Deployment Postgres:

    kubectl get pods -l app=postgres
    

    Outputnya mirip dengan hal berikut ini:

    NAME             READY  STATUS  RESTARTS  AGE
    postgres-78fc84c9ff-77vx6  1/1   Running  0     44s
    
  2. Buat file pengujian hello.txt di Pod:

    kubectl exec postgres-78fc84c9ff-77vx6 \
     -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. Pastikan file pengujian dibuat:

    kubectl exec postgres-78fc84c9ff-77vx6 \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

Membuat snapshot volume dan menghapus file pengujian

Untuk membuat dan memverifikasi snapshot:

  1. Buat VolumeSnapshotClass yang menentukan cara snapshot volume Anda harus diambil dan dikelola:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
     name: my-snapshotclass
    driver: pd.csi.storage.gke.io
    deletionPolicy: Delete
    EOF
    
  2. Buat VolumeSnapshot dan ambil snapshot dari volume yang terikat ke my-pvc PersistentVolumeClaim:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
     name: my-snapshot
    spec:
     volumeSnapshotClassName: my-snapshotclass
     source:
      persistentVolumeClaimName: my-pvc
    EOF
    
  3. Pastikan konten snapshot volume dibuat:

    kubectl get volumesnapshotcontents
    

    Outputnya mirip dengan hal berikut ini:

    NAME                        READYTOUSE  RESTORESIZE   DELETIONPOLICY  DRIVER         VOLUMESNAPSHOTCLASS  VOLUMESNAPSHOT  VOLUMESNAPSHOTNAMESPACE  AGE
    snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da  false    2199023255552  Delete      pd.csi.storage.gke.io  my-snapshotclass   my-snapshot   default          33s
    
  4. Pastikan snapshot siap digunakan:

    kubectl get volumesnapshot \
     -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    Outputnya mirip dengan hal berikut ini:

    NAME     READY
    my-snapshot  true
    
  5. Hapus file pengujian asli hello.txt yang dibuat di Pod postgres-78fc84c9ff-77vx6:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'rm /usr/share/data/hello.txt'
    

Memulihkan snapshot volume

Untuk memulihkan snapshot volume dan data, ikuti langkah-langkah berikut:

  1. Buat PVC baru yang memulihkan data dari snapshot, dan pastikan volume baru disediakan dalam Storage Pool (storage-pools-sc) yang sama dengan volume aslinya. Terapkan manifes berikut:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: pvc-restore
    spec:
     dataSource:
      name: my-snapshot
      kind: VolumeSnapshot
      apiGroup: snapshot.storage.k8s.io
     storageClassName: storage-pools-sc
     accessModes:
      - ReadWriteOnce
     resources:
      requests:
       storage: 2048Gi
    EOF
    
  2. Perbarui Deployment yang ada bernama postgres agar menggunakan PVC yang baru dipulihkan yang baru saja Anda buat. Terapkan manifes berikut:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: postgres
    spec:
     selector:
      matchLabels:
       app: postgres
     template:
      metadata:
       labels:
        app: postgres
      spec:
       nodeSelector:
        cloud.google.com/machine-family: c3
       containers:
       - name: postgres
        image: google/cloud-sdk:slim
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
         mountPath: /usr/share/data/
       volumes:
       - name: sdk-volume
        persistentVolumeClaim:
         claimName: pvc-restore
    EOF
    
  3. Dapatkan nama Pod yang baru dibuat dan merupakan bagian dari Deployment postgres:

    kubectl get pods -l app=postgres
    

    Outputnya mirip dengan hal berikut ini:

    NAME             READY  STATUS    RESTARTS  AGE
    postgres-59f89cfd8c-42qtj  1/1   Running    0     40s
    
  4. Verifikasi bahwa file hello.txt, yang sebelumnya dihapus, kini ada di Pod baru (postgres-59f89cfd8c-42qtj) setelah memulihkan volume dari snapshot:

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    Hal ini memvalidasi bahwa proses snapshot dan pemulihan telah berhasil diselesaikan dan data dari snapshot telah dipulihkan ke PV baru yang dapat diakses oleh Pod.

  5. Pastikan volume yang dibuat dari snapshot berada di dalam Storage Pool Anda:

    kubectl get pvc pvc-restore
    

    Outputnya mirip dengan hal berikut ini:

    NAME     STATUS  VOLUME                   CAPACITY  ACCESS MODES  STORAGECLASS    AGE
    pvc-restore  Bound  pvc-b287c387-bc51-4100-a00e-b5241d411c82  2Ti    RWO      storage-pools-sc  2m24s
    
  6. Periksa apakah volume baru disediakan seperti yang ditentukan dalam StorageClass dan PVC Anda:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    Outputnya mirip dengan berikut ini, tempat Anda dapat melihat volume baru pvc-b287c387-bc51-4100-a00e-b5241d411c82 yang disediakan di pool penyimpanan yang sama.

    
    NAME                   STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY  3000       140           2048
    pvc-b287c387-bc51-4100-a00e-b5241d411c82 READY  3000       140           2048
    

Konfigurasi ini membantu memastikan bahwa volume yang dipulihkan mendapatkan manfaat dari resource dan kemampuan bersama dari pool.

Memigrasikan volume yang ada ke dalam Storage Pool

Gunakan snapshot dan pemulihan untuk memigrasikan volume yang ada di luar Storage Pool, ke dalam Storage Pool.

Pastikan kondisi berikut terpenuhi:

  • PVC pvc-restore baru Anda mereferensikan StorageClass yang menentukan parameter storage-pools, yang mengarah ke Storage Pool yang ingin Anda gunakan untuk memindahkan volume.
  • PV sumber yang di-snapshot harus dikaitkan dengan PVC dengan StorageClass yang tidak menentukan parameter storage-pools.

Setelah memulihkan dari snapshot ke volume baru, Anda dapat menghapus PVC dan PV sumber.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya, hapus resource penyimpanan yang Anda buat dalam panduan ini. Hapus semua disk dalam Storage Pool terlebih dahulu, lalu hapus Storage Pool.

Menghapus boot disk

Saat Anda menghapus node (dengan menskalakan node pool) atau seluruh node pool, boot disk terkait akan otomatis dihapus. Anda juga dapat menghapus cluster untuk menghapus disk booting semua node pool di dalamnya secara otomatis.

Untuk informasi selengkapnya, lihat:

Menghapus disk yang terpasang

Untuk menghapus disk terpasang yang disediakan di Hyperdisk Storage Pool:

  1. Hapus Pod yang menggunakan PVC:

    kubectl delete deployments postgres
    
  2. Hapus PVC yang menggunakan StorageClass Penyimpanan Gabungan Hyperdisk.

    kubectl delete pvc my-pvc
    

    Konfirmasi bahwa pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 PVC telah dihapus:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

Menghapus Kumpulan Penyimpanan Hyperdisk

Hapus Kumpulan Penyimpanan Hyperdisk dengan perintah berikut:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

Langkah berikutnya