Optimalkan performa dan biaya penyimpanan dengan Kumpulan Penyimpanan Hyperdisk


Halaman ini menjelaskan bagaimana cluster Google Kubernetes Engine (GKE) dapat menampung dan membagikan kapasitas penyimpanan, throughput, dan IOPS di seluruh disk dengan menggunakan Kumpulan Penyimpanan GKE Hyperdisk.

Ringkasan

Kumpulan penyimpanan mengelompokkan perangkat penyimpanan fisik secara logis, sehingga Anda dapat mengelompokkan sumber daya Anda. Anda dapat menyediakan Google Cloud Hyperdisk di dalam kumpulan penyimpanan ini yang pada dasarnya membuat {i>Hyperdisk Storage Pools<i}. Kumpulan Penyimpanan Hyperdisk menawarkan kapasitas, throughput, dan IOPS yang telah disediakan yang dapat dibagikan oleh disk cluster GKE Anda.

Anda dapat menggunakan {i>Hyperdisk Storage Pools<i} untuk mengelola sumber daya penyimpanan Anda secara lebih efisien dan secara hemat biaya. Hal ini memungkinkan Anda untuk 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 penyediaan dan pemakaian {i>Hyperdisk Storage Pool<i} Anda.

Membuat dan mengelola kumpulan penyimpanan

Persyaratan dan batasan berikut berlaku:

Menyediakan boot disk di kumpulan penyimpanan

Persyaratan dan batasan berikut berlaku:

  • Pastikan lokasi node cluster dan lokasi node kumpulan node sama persis dengan zona penyimpanan gabungan. Batasan ini tidak berlaku jika Anda memiliki Penyediaan otomatis Node mengaktifkan pembuatan versi. Penyediaan otomatis node dapat membuat kumpulan node secara otomatis di zona yang benar jika diperlukan.
  • Pastikan jenis mesin yang menjalankan Pod Anda mendukung pemasangan Hyperdisk Jenis disk seimbang. Throughput Hyperdisk tidak didukung sebagai boot disk. Lihat dokumentasi dukungan jenis Mesin Hyperdisk.
  • Anda dapat menyediakan {i>boot disk<i} di kumpulan penyimpanan hanya pada saat {i>boot disk<i} yang atau kumpulan node yang diperbarui.
  • Saat node dibuat secara otomatis menggunakan penyediaan otomatis node, boot disk untuk node tersebut tidak dapat ditempatkan dalam gabungan penyimpanan.

Menyediakan disk yang terpasang di kumpulan penyimpanan

Persyaratan dan batasan berikut berlaku:

  • Versi GKE minimum yang diperlukan untuk menyediakan disk yang terpasang di kolam penyimpanan adalah 1.29.2-gke.1035000 dan yang lebih baru.
  • Pastikan driver Compute Engine Persistent Disk CSI diaktifkan. Driver Persistent Disk Compute Engine adalah diaktifkan secara default pada cluster Autopilot dan Standar baru serta tidak dapat dinonaktifkan atau diedit di cluster Autopilot. Untuk mengaktifkan driver, lihat Mengaktifkan Compute Engine Persistent Disk CSI Driver di cluster yang ada.
  • Pastikan kumpulan penyimpanan berada setidaknya di salah satu lokasi node lokasi cluster dan node dari kumpulan node.
  • Anda hanya dapat menyediakan {i> Hyperdisk Throughput<i} dan {i>Hyperdisk<i} Disk terpasang yang seimbang di kumpulan penyimpanan. Jenis {i>disk<i} yang terpasang harus sesuai dengan jenis penyimpanan gabungan. Untuk mengetahui informasi selengkapnya, lihat Jenis Kumpulan Penyimpanan Hyperdisk.
  • Pastikan jenis mesin yang menjalankan Pod Anda mendukung pemasangan jenis {i>disk<i} yang Anda gunakan dari penyimpanan gabungan. Untuk mengetahui informasi selengkapnya, lihat Dukungan jenis Mesin Hyperdisk.

Kuota

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

Untuk informasi selengkapnya, baca Melihat kuota project dan Minta kuota yang lebih tinggi.

Gunakan filter kuota berikut untuk Hyperdisk Balanced Storage Pools:

  • 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 Kumpulan Penyimpanan Throughput Hyperdisk:

  • 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 Advanced kapasitas penyediaan resource, per project dan per region, meminta kuota yang lebih tinggi untuk filter berikut:

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

Harga

Lihat harga Hyperdisk Storage Pools untuk mengetahui detail harga.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan Google Kubernetes Engine API
  • Jika ingin 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 gcloud components update.

Membuat Kumpulan Penyimpanan Hyperdisk

Buat Kumpulan Penyimpanan Hyperdisk sebelum Anda menyediakan boot disk atau memasang yang ada di kumpulan penyimpanan tersebut. Untuk mengetahui informasi selengkapnya, lihat Membuat Kumpulan Penyimpanan Hyperdisk.

Pastikan Anda membuat gabungan penyimpanan di salah satu zona yang didukung.

Misalnya, gunakan perintah berikut untuk membuat Kumpulan Penyimpanan Seimbang Hyperdisk dengan Kapasitas Advanced dan performa Advanced, serta penyediaan kapasitas 10 TB, 10.000 IOPS/dtk 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 akun Google Cloud Anda project ID Anda.

Memeriksa zona penyimpanan gabungan

  • Untuk cluster Autopilot dan cluster Standar dengan penyediaan otomatis node aktif, Anda dapat membuat penyimpanan gabungan di zona mana pun dalam region cluster. Jika tidak ada kumpulan node berada di zona tempat Anda membuat penyimpanan gabungan, Pod tetap berada di Pending hingga Autoscaler Cluster GKE dapat menyediakan kumpulan node baru di zona tersebut.

  • Untuk cluster Standar tanpa penyediaan otomatis node, buat kumpulan penyimpanan di cluster Anda zona node default karena gabungan penyimpanan merupakan resource zona. Anda dapat menyetel node zona cluster Anda menggunakan flag --node-locations.

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

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 {i> boot disk<i} atau {i>disk<i} yang terpasang.

Menyediakan boot disk GKE dalam Kumpulan Penyimpanan Hyperdisk

Anda dapat menyediakan boot disk GKE di Kumpulan Penyimpanan Hyperdisk saat melakukan hal berikut:

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

Saat membuat cluster

Untuk membuat cluster GKE dengan {i>boot disk<i} yang disediakan di penyimpanan gabungan, gunakan perintah berikut:

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

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • DISK_TYPE: Setel ini ke hyperdisk-balanced. Jika dibiarkan kosong, jenis disk akan ditetapkan secara default ke Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Daftar yang dipisahkan koma jalur resource gabungan penyimpanan (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) tempat boot disk cluster akan disediakan. Pastikan zona di jalur resource gabungan penyimpanan cocok dengan zona di --node-locations.
  • ZONE,[...]: Daftar yang dipisahkan koma dari zona di mana jejak {i>node<i} Anda akan direplikasi. Untuk cluster regional, Anda dapat menentukan di region Anda. Semua zona harus berada di region yang sama dengan cluster, yang ditentukan oleh tanda -location atau --zone atau --region.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin digunakan untuk node Anda.
  • ZONE: Zona tempat Anda ingin membuat cluster Anda. Gunakan tanda —region untuk membuat cluster regional.

Saat membuat kumpulan node

Untuk membuat kumpulan node GKE dengan disk booting yang disediakan di penyimpanan gabungan, 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 \
    --zone=ZONE --cluster=CLUSTER_NAME

Ganti kode berikut:

  • NODE_POOL_NAME: Berikan nama unik untuk kumpulan node yang Anda buat.
  • DISK_TYPE: Setel ini ke hyperdisk-balanced. Jika dibiarkan kosong, jenis disk akan ditetapkan secara default ke Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Daftar yang dipisahkan koma jalur resource gabungan penyimpanan (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) tempat boot disk cluster akan disediakan. Memastikan zona dalam gabungan penyimpanan jalur resource cocok dengan nilai di --node-locations.
  • ZONE,[...]: Daftar yang dipisahkan koma dari zona di mana jejak {i>node<i} Anda akan direplikasi. Semua zona harus berada di region yang sama dengan cluster, yang ditentukan oleh tanda -location atau --zone atau --region.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin digunakan untuk node Anda.
  • ZONE: Zona tempat Anda ingin membuat kumpulan node.
  • CLUSTER_NAME: Cluster yang sudah ada dengan Anda membuat kumpulan node.

Saat memperbarui kumpulan node

Anda dapat menggunakan perintah update untuk menambahkan atau mengganti kumpulan penyimpanan di kumpulan node. Perintah ini tidak dapat digunakan untuk menghapus kumpulan penyimpanan dari kumpulan node.

Untuk mengupdate node pool GKE agar boot disk-nya disediakan di penyimpanan gabungan, gunakan perintah berikut.

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --zone=ZONE --cluster=CLUSTER_NAME
  • NODE_POOL_NAME: Nama properti yang sudah ada yang ingin Anda perbarui untuk menggunakan gabungan penyimpanan.
  • STORAGE_POOL,[...]: Daftar yang dipisahkan koma dari jalur resource gabungan penyimpanan yang ada (contoh, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c). Pastikan zona di jalur resource kumpulan penyimpanan sesuai dengan zona kumpulan node yang Anda update.
  • ZONE: Zona tempat kumpulan node berada.
  • CLUSTER_NAME: Nama cluster GKE kumpulan node ini.

GKE mengupdate node pool sesuai dengan strategi upgrade kumpulan node.

Menyediakan disk yang terpasang GKE dalam Kumpulan Penyimpanan Hyperdisk

Di bagian ini:

  • Anda membuat cluster GKE baru dengan disk terpasang yang disediakan di penyimpanan gabungan.
  • Membuat StorageClass untuk menyediakan secara dinamis PersistentVolume (PV) saat Pod memintanya melalui PersistentVolumeClaim (PVC). Agar PV dapat menggunakan bersama resource bersama milik gabungan penyimpanan, Anda menentukan gabungan penyimpanan bersama storage-pools di StorageClass Anda. StorageClass kemudian digunakan dalam PVC untuk menyediakan {i>Hyperdisk Balanced Volume<i} yang akan digunakan oleh Pod.
  • Buat PVC untuk meminta PV - bagian dari Hyperdisk untuk Pod dari cluster GKE Anda. Dengan demikian, Anda dapat memanfaatkan berbagi referensi.
  • Buat Deployment yang menggunakan PVC untuk memastikan aplikasi Anda memiliki akses ke penyimpanan persisten bahkan setelah Pod dimulai ulang dan dijadwalkan ulang.

Membuat cluster GKE

Sebelum memulai, tinjau pertimbangan untuk penyediaan disk yang terpasang.

Autopilot

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

Contoh:

gcloud container clusters create-auto CLUSTER_NAME --region=REGION

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • REGION: Region tempat Anda membuat cluster.

Untuk memilih perangkat yang didukung jenis mesin, tentukan cloud.google.com/compute-class: Performance nodeSelector saat membuat Deployment. Untuk daftar Seri mesin Compute Engine yang tersedia dengan class komputasi Performa, lihat Seri mesin yang didukung.

Standard

Untuk membuat cluster Zona Standar menggunakan gcloud CLI, lihat Membuat cluster zona.

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

Contoh:

gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

Ganti kode berikut:

  • CLUSTER_NAME: Berikan nama unik untuk cluster yang Anda buat.
  • ZONE: Zona tempat Anda membuat gugus ini. Gunakan tanda —region untuk membuat cluster regional.
  • PROJECT_ID: Akun Google Cloud Anda project ID Anda.
  • MACHINE_TYPE: Jenis mesin yang didukung yang ingin digunakan untuk node Anda.
  • DISK_TYPE: Setel 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 membuat PV di dalam kumpulan penyimpanan, menggunakan StorageClass. Untuk mempelajari lebih lanjut, lihat StorageClasses.

Untuk membuat StorageClass baru dengan throughput atau tingkat 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 gabungan penyimpanan tertentu yang ingin Anda gunakan. Setiap penyimpanan gabungan dalam daftar harus ditentukan dalam format: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • (Opsional) Tentukan parameter performa provisioned-throughput-on-create dan provisioned-iops-on-create.

Setiap jenis Hyperdisk memiliki nilai default 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 Seimbang, Throughput Hyperdisk Nyatakan nilai throughput dalam MiBps menggunakan "Mi" penentu; misalnya, jika throughput yang diperlukan adalah 250 MiBps, tentukan "250Mi" saat membuat StorageClass.
provisioned-iops-on-create Hyperdisk Seimbang, IOPS Hyperdisk Nilai IOPS harus dinyatakan tanpa penentu apa pun; misalnya, jika Anda memerlukan 7.000 IOPS, tentukan "7000" saat membuat StorageClass.

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

Gunakan manifes berikut untuk membuat dan menerapkan StorageClass bernama storage-pools-sc untuk menyediakan PV secara dinamis dalam penyimpanan gabungan 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, pengikatan dan penyediaan PVC ditunda sampai Pod yang menggunakan PVC telah dibuat. Pendekatan ini memastikan bahwa PV tidak disediakan sebelum waktunya, dan terdapat kecocokan zona antara PV, dan Pod yang menggunakannya. Jika zonanya tidak cocok, Pod akan tetap dalam status Pending.

Membuat PersistentVolumeKlaim (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 target kapasitas penyimpanan untuk volume Hyperdisk Balanced:

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 PersistentVolumes, gunakan pengontrol workload seperti Deployment atau StatefulSet.

Untuk memastikan bahwa Pod dapat dijadwalkan pada kumpulan node dengan rangkaian mesin yang mendukung Hyperdisk Balanced, mengonfigurasi Deployment dengan cloud.google.com/machine-family pemilih node. Untuk mengetahui informasi selengkapnya, lihat dukungan jenis mesin untuk Hyperdisk. Anda menggunakan rangkaian mesin c3 di contoh Deployment.

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

Autopilot

Di cluster Autopilot, tentukan cloud.google.com/compute-class: Performance nodeSelector untuk menyediakan volume Hyperdisk Balanced. Untuk 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

Standard

Pada cluster Standar tanpa penyediaan otomatis node yang diaktifkan, pastikan kumpulan node dengan seri mesin yang ditentukan aktif dan berjalan sebelum membuat Deployment. Jika tidak, Pod akan gagal dijadwalkan.

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

Diperlukan waktu beberapa menit untuk menyelesaikan instance Hyperdisk dan menampilkan status READY.

Pastikan apakah disk yang terpasang 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
    

Mengambil snapshot dan memulihkan disk yang terpasang di kumpulan penyimpanan

Dilarang memindahkan disk ke dalam atau ke luar kumpulan penyimpanan. Untuk memindahkan {i>disk<i} atau dari kumpulan penyimpanan, buat ulang disk dari snapshot. Untuk 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 telah 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. Membuat VolumeSnapshotClass yang menentukan cara snapshot volume Anda yang 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 dengan PersistentVolumeKlaim my-pvc:

    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 ringkasan volume telah 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 memastikan bahwa volume baru disediakan dalam gabungan penyimpanan yang sama (storage-pools-sc) dengan penyimpanan aslinya volume. 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. Update Deployment yang sudah ada bernama postgres agar menggunakan Deployment yang baru dipulihkan PVC 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 yang 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. Pastikan bahwa file hello.txt, yang sebelumnya dihapus, sekarang 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!
    

    Tindakan 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 dalam penyimpanan gabungan 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 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 serupa dengan berikut ini, tempat Anda dapat melihat volume baru pvc-b287c387-bc51-4100-a00e-b5241d411c82 yang disediakan dalam kumpulan 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
    

    Hal ini memastikan bahwa volume yang dipulihkan mendapatkan manfaat dari resource dan kemampuan bersama dari kumpulan.

Memigrasikan volume yang ada ke penyimpanan gabungan

Gunakan snapshot dan pulihkan untuk memigrasikan volume yang ada di luar penyimpanan gabungan, ke dalam penyimpanan gabungan.

Pastikan kondisi berikut terpenuhi:

  • pvc-restore PVC Anda yang baru mereferensikan StorageClass yang memang menentukan parameter storage-pools, yang mengarah ke penyimpanan gabungan tempat Anda ingin memindahkan volume ke dalamnya.
  • PV sumber yang diambil snapshot-nya harus dikaitkan dengan PVC dengan StorageClass yang tidak menentukan parameter storage-pools.

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

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda, hapus resource penyimpanan yang telah Anda buat dalam panduan ini. Pertama, hapus semua disk dalam kumpulan penyimpanan dan kemudian menghapus penyimpanan gabungan.

Hapus boot disk

Saat Anda menghapus sebuah node (dengan memperkecil skala node pool) atau seluruh node pool, {i>boot disk<i} yang terkait akan otomatis dihapus. Anda juga dapat menghapus cluster secara otomatis untuk menghapus {i>boot disk<i} dari semua kumpulan node di dalamnya.

Untuk informasi selengkapnya, lihat:

Hapus disk yang terpasang

Untuk menghapus disk terpasang yang disediakan di Kumpulan Penyimpanan Hyperdisk:

  1. Hapus Pod yang menggunakan PVC:

    kubectl delete deployments postgres
    
  2. Menghapus PVC yang menggunakan Hyperdisk Storage Pool StorageClass.

    kubectl delete pvc my-pvc
    

    Pastikan 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 selanjutnya