Mempercepat performa baca workload stateful dengan GKE Data Cache


Panduan ini menjelaskan cara meningkatkan performa aplikasi stateful yang banyak melakukan operasi baca menggunakan GKE Data Cache di cluster Google Kubernetes Engine (GKE). GKE Data Cache adalah solusi penyimpanan blok terkelola yang mempercepat operasi baca untuk aplikasi stateful Anda, seperti database, yang berjalan di GKE.

Anda hanya dapat menggunakan Cache Data dengan cluster GKE Standard. Panduan ini akan memandu Anda mengaktifkan GKE Data Cache saat membuat cluster Standard GKE atau node pool baru, dan menyediakan disk terpasang GKE dengan akselerasi Data Cache.

Tentang GKE Data Cache

Dengan GKE Data Cache, Anda dapat menggunakan SSD Lokal di node GKE sebagai lapisan cache untuk penyimpanan persisten, seperti Persistent Disk atau Hyperdisk. Penggunaan SSD Lokal mengurangi latensi baca disk dan meningkatkan kueri per detik (QPS) untuk workload stateful Anda sekaligus meminimalkan persyaratan memori. GKE Data Cache mendukung semua jenis Persistent Disk atau Hyperdisk sebagai disk pendukung.

Untuk menggunakan GKE Data Cache bagi aplikasi Anda, konfigurasi node pool GKE dengan SSD Lokal terpasang. Anda dapat mengonfigurasi GKE Data Cache untuk menggunakan semua atau sebagian SSD Lokal yang terpasang. SSD lokal yang digunakan oleh solusi GKE Data Cache dienkripsi dalam penyimpanan menggunakan enkripsi Trusted Cloud by S3NS standar.

Manfaat

GKE Data Cache menawarkan manfaat berikut:

  • Peningkatan kecepatan kueri yang ditangani per detik untuk database konvensional, seperti MySQL atau Postgres, dan database vektor.
  • Peningkatan performa baca untuk aplikasi stateful dengan meminimalkan latensi disk.
  • Hydrasi dan rehidrasi data yang lebih cepat karena SSD bersifat lokal untuk node. Pengambilan data mengacu pada proses awal pemuatan data yang diperlukan dari penyimpanan persisten ke SSD Lokal. Rehidrasi data mengacu pada proses memulihkan data di SSD Lokal setelah node didaur ulang.

Arsitektur deployment

Diagram berikut menunjukkan contoh konfigurasi GKE Data Cache dengan dua Pod yang masing-masing menjalankan aplikasi. Pod berjalan di node GKE yang sama. Setiap Pod menggunakan SSD Lokal terpisah dan persistent disk pendukung.

Arsitektur deployment untuk GKE Data Cache
Gambar 1. Arsitektur deployment untuk GKE Data Cache.

Mode deployment

Anda dapat menyiapkan GKE Data Cache dalam salah satu dari dua mode:

  • Tulis langsung (Direkomendasikan): Saat aplikasi Anda menulis data, data akan ditulis secara sinkron ke cache dan persistent disk pokok. Mode writethrough mencegah kehilangan data, dan cocok untuk sebagian besar workload produksi.
  • Penulisan balik: Saat aplikasi Anda menulis data, data hanya ditulis ke cache. Kemudian, data ditulis ke persistent disk secara asinkron (di latar belakang). Mode writeback meningkatkan performa penulisan, dan cocok untuk workload yang mengandalkan kecepatan. Namun, mode ini memengaruhi keandalan. Jika node dimatikan secara tidak terduga, data cache yang belum di-flush akan hilang.

Tujuan

Dalam panduan ini, Anda akan mempelajari cara:

Persyaratan dan perencanaan

Pastikan Anda memenuhi persyaratan berikut untuk menggunakan GKE Data Cache:

  • Cluster GKE Anda harus menjalankan versi 1.32.3-gke.1440000 atau yang lebih baru.
  • Node pool Anda harus menggunakan jenis mesin yang mendukung SSD Lokal. Untuk mengetahui informasi selengkapnya, lihat Dukungan seri mesin.

Perencanaan

Pertimbangkan aspek-aspek berikut saat Anda merencanakan kapasitas penyimpanan untuk GKE Data Cache:

  • Jumlah maksimum Pod per node yang akan menggunakan GKE Data Cache secara bersamaan.
  • Persyaratan ukuran cache yang diharapkan dari Pod yang akan menggunakan GKE Data Cache.
  • Total kapasitas SSD Lokal yang tersedia di node GKE Anda. Untuk mengetahui informasi tentang jenis mesin yang memiliki SSD Lokal yang terpasang secara default dan jenis mesin yang mengharuskan Anda memasang SSD Lokal, lihat Memilih jumlah disk SSD Lokal yang valid.
  • Untuk jenis mesin generasi ketiga atau yang lebih baru (yang memiliki jumlah SSD Lokal default yang terpasang), perhatikan bahwa SSD Lokal untuk Cache Data dicadangkan dari total SSD Lokal yang tersedia di mesin tersebut.
  • Overhead sistem file yang dapat mengurangi ruang yang dapat digunakan di SSD Lokal. Misalnya, meskipun Anda memiliki node yang memiliki dua SSD Lokal dengan total kapasitas mentah 750 GiB, ruang yang tersedia untuk semua volume Cache Data mungkin lebih sedikit karena overhead sistem file. Beberapa kapasitas SSD Lokal dicadangkan untuk penggunaan sistem.

Harga

Anda akan ditagih untuk total kapasitas yang disediakan untuk SSD Lokal dan persistent disk yang terpasang. Anda dikenai biaya per GiB per bulan.

Untuk mengetahui informasi selengkapnya, lihat Harga disk di dokumentasi Compute Engine.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan 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.

Mengonfigurasi node GKE untuk menggunakan Cache Data

Untuk mulai menggunakan GKE Data Cache untuk penyimpanan yang dipercepat, node Anda harus memiliki resource SSD Lokal yang diperlukan. Bagian ini menunjukkan perintah untuk menyediakan SSD Lokal dan mengaktifkan GKE Data Cache saat Anda membuat cluster GKE baru atau menambahkan node pool baru ke cluster yang ada. Anda tidak dapat mengupdate node pool yang ada untuk menggunakan Cache Data. Jika Anda ingin menggunakan Cache Data di cluster yang ada, tambahkan kumpulan node baru ke cluster.

Di cluster baru

Untuk membuat cluster GKE dengan Data Cache yang dikonfigurasi, gunakan perintah berikut:

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster. Berikan nama unik untuk cluster GKE yang Anda buat.
  • LOCATION: Trusted Cloud by S3NS region atau zona untuk cluster baru.
  • MACHINE_TYPE: jenis mesin yang akan digunakan dari seri mesin generasi kedua, ketiga, atau yang lebih baru untuk cluster Anda, seperti n2-standard-2 atau c3-standard-4-lssd. Kolom ini wajib diisi karena SSD Lokal tidak dapat digunakan dengan jenis e2-medium default. Untuk mengetahui informasi selengkapnya, lihat seri mesin yang tersedia.
  • DATA_CACHE_COUNT: jumlah volume SSD Lokal yang akan dikhususkan secara eksklusif untuk Cache Data di setiap node dalam node pool default. Setiap SSD Lokal ini memiliki kapasitas 375 GiB. Jumlah maksimum volume bervariasi menurut jenis mesin dan region. Perlu diketahui bahwa beberapa kapasitas SSD Lokal dicadangkan untuk penggunaan sistem.
  • (Opsional) LOCAL_SSD_COUNT: jumlah volume SSD Lokal yang akan disediakan untuk kebutuhan penyimpanan efemeral lainnya. Gunakan flag --ephemeral-storage-local-ssd count jika Anda ingin menyediakan SSD Lokal tambahan yang tidak digunakan untuk Cache Data.

    Perhatikan hal berikut untuk jenis mesin generasi ketiga atau yang lebih baru:

    • Jenis mesin generasi ketiga atau yang lebih baru memiliki sejumlah SSD Lokal yang terpasang secara default. Jumlah SSD Lokal yang terpasang ke setiap node bergantung pada jenis mesin yang Anda tentukan.
    • Jika Anda berencana menggunakan flag --ephemeral-storage-local-ssd count untuk penyimpanan efemeral tambahan, pastikan untuk menyetel nilai DATA_CACHE_COUNT ke angka yang lebih kecil daripada disk SSD Lokal total yang tersedia di mesin. Jumlah SSD Lokal yang tersedia total mencakup disk yang terpasang secara default dan disk baru yang Anda tambahkan menggunakan tanda --ephemeral-storage-local-ssd count.

Perintah ini membuat cluster GKE yang berjalan di jenis mesin generasi kedua, ketiga, atau yang lebih baru untuk node pool default-nya, menyediakan SSD Lokal untuk Cache Data, dan secara opsional menyediakan SSD Lokal tambahan untuk kebutuhan penyimpanan sementara lainnya, jika ditentukan.

Setelan ini hanya berlaku untuk node pool default.

Di cluster yang sudah ada

Untuk menggunakan Cache Data di cluster yang ada, Anda harus membuat kumpulan node baru dengan Cache Data yang dikonfigurasi.

Untuk membuat node pool GKE dengan Konfigurasi Cache Data, gunakan perintah berikut:

gcloud container node-pool create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --data-cache-count=DATA_CACHE_COUNT \
    # Optionally specify additional Local SSDs, or skip this flag
    --ephemeral-storage-local-ssd count=LOCAL_SSD_COUNT

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool. Berikan nama unik untuk node pool yang Anda buat.
  • CLUSTER_NAME: nama cluster GKE yang ada tempat Anda ingin membuat node pool.
  • LOCATION: Trusted Cloud by S3NS region atau zona yang sama dengan cluster Anda.
  • MACHINE_TYPE: jenis mesin yang akan digunakan dari seri mesin generasi kedua, ketiga, atau yang lebih baru untuk cluster Anda, seperti n2-standard-2 atau c3-standard-4-lssd. Kolom ini wajib diisi, karena SSD Lokal tidak dapat digunakan dengan jenis e2-medium default. Untuk mengetahui informasi selengkapnya, lihat seri mesin yang tersedia.
  • DATA_CACHE_COUNT: jumlah volume SSD Lokal yang akan dikhususkan secara eksklusif untuk Cache Data di setiap node dalam node pool. Setiap SSD Lokal ini memiliki kapasitas 375 GiB. Jumlah maksimum volume bervariasi menurut jenis mesin dan region. Perlu diketahui bahwa beberapa kapasitas SSD Lokal dicadangkan untuk penggunaan sistem.
  • (Opsional) LOCAL_SSD_COUNT: jumlah volume SSD Lokal yang akan disediakan untuk kebutuhan penyimpanan efemeral lainnya. Gunakan flag --ephemeral-storage-local-ssd count jika Anda ingin menyediakan SSD Lokal tambahan yang tidak digunakan untuk Cache Data.

    Perhatikan hal berikut untuk jenis mesin generasi ketiga atau yang lebih baru:

    • Jenis mesin generasi ketiga atau yang lebih baru memiliki sejumlah SSD Lokal yang terpasang secara default. Jumlah SSD Lokal yang terpasang ke setiap node bergantung pada jenis mesin yang Anda tentukan.
    • Jika Anda berencana menggunakan tanda --ephemeral-storage-local-ssd count untuk penyimpanan efemeral tambahan, pastikan untuk menyetel DATA_CACHE_COUNT ke kurang dari total disk SSD Lokal yang tersedia di mesin. Jumlah SSD Lokal yang tersedia total mencakup disk yang terpasang secara default dan disk baru yang Anda tambahkan menggunakan tanda --ephemeral-storage-local-ssd count.

Perintah ini membuat node pool GKE yang berjalan pada jenis mesin generasi kedua, ketiga, atau yang lebih baru, menyediakan SSD Lokal untuk Cache Data, dan secara opsional menyediakan SSD Lokal tambahan untuk kebutuhan penyimpanan efemeral lainnya, jika ditentukan.

Menyediakan Cache Data untuk penyimpanan persisten di GKE

Bagian ini memberikan contoh cara mengaktifkan manfaat performa GKE Data Cache untuk aplikasi stateful Anda.

Membuat node pool dengan SSD Lokal untuk Cache Data

Mulailah dengan membuat node pool baru dengan SSD Lokal terpasang di cluster GKE Anda. Cache Data GKE menggunakan SSD Lokal untuk mempercepat performa persistent disk yang terpasang.

Perintah berikut akan membuat node pool yang menggunakan mesin generasi kedua, n2-standard-2:

gcloud container node-pools create datacache-node-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --num-nodes=2 \
    --data-cache-count=1 \
    --machine-type=n2-standard-2

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster. Tentukan cluster GKE tempat Anda membuat node pool baru.
  • LOCATION: region atau zona Trusted Cloud by S3NS yang sama dengan cluster Anda.

Perintah ini membuat node pool dengan spesifikasi berikut:

  • --num-nodes=2: menetapkan jumlah awal node dalam pool ini menjadi dua.
  • --data-cache-count=1: menentukan satu SSD Lokal per node yang dikhususkan untuk GKE Data Cache.

Total jumlah SSD Lokal yang disediakan untuk node pool ini adalah dua karena setiap node disediakan dengan satu SSD Lokal.

Membuat StorageClass Cache Data

Buat StorageClass Kubernetes yang memberi tahu GKE cara menyediakan volume persisten secara dinamis yang menggunakan Cache Data.

Gunakan manifes berikut untuk membuat dan menerapkan StorageClass bernama pd-balanced-data-cache-sc:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-balanced-data-cache-sc
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  data-cache-mode: writethrough
  data-cache-size: "100Gi"
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
EOF

Parameter StorageClass untuk Cache Data mencakup hal berikut:

  • type: menentukan jenis disk pokok untuk volume persisten. Untuk mengetahui opsi lainnya, lihat jenis Persistent Disk yang didukung atau jenis Hyperdisk.
  • data-cache-mode: menggunakan mode writethrough yang direkomendasikan. Untuk mengetahui informasi selengkapnya, lihat Mode deployment.
  • data-cache-size: menetapkan kapasitas SSD Lokal ke 100 GiB, yang digunakan sebagai cache baca untuk setiap PVC.

Meminta penyimpanan dengan PersistentVolumeClaim (PVC)

Buat PVC yang merujuk ke StorageClass pd-balanced-data-cache-sc yang Anda buat. PVC meminta volume persisten dengan Data Cache diaktifkan.

Gunakan manifes berikut untuk membuat PVC bernama pvc-data-cache yang meminta volume persisten minimal 300 GiB dengan akses ReadWriteOnce.

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-data-cache
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 300Gi
  storageClassName: pd-balanced-data-cache-sc
EOF

Membuat Deployment yang menggunakan PVC

Buat Deployment bernama postgres-data-cache yang menjalankan Pod yang menggunakan PVC pvc-data-cache yang Anda buat sebelumnya. Pemilih node cloud.google.com/gke-data-cache-count memastikan bahwa Pod dijadwalkan ke node yang memiliki resource SSD Lokal yang diperlukan untuk menggunakan GKE Data Cache.

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

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres-data-cache
 labels:
   name: database
   app: data-cache
spec:
 replicas: 1
 selector:
   matchLabels:
     service: postgres
     app: data-cache
 template:
   metadata:
     labels:
       service: postgres
       app: data-cache
   spec:
     nodeSelector:
       cloud.google.com/gke-data-cache-disk: "1"
     containers:
     - name: postgres
       image: postgres:14-alpine
       volumeMounts:
       - name: pvc-data-cache-vol
         mountPath: /var/lib/postgresql/data2
         subPath: postgres
       env:
       - name: POSTGRES_USER
         value: admin
       - name: POSTGRES_PASSWORD
         value: password
     restartPolicy: Always
     volumes:
     - name: pvc-data-cache-vol
       persistentVolumeClaim:
         claimName: pvc-data-cache
EOF

Konfirmasi bahwa Deployment berhasil dibuat:

kubectl get deployment

Mungkin perlu waktu beberapa menit agar penyiapan penampung Postgres selesai dan menampilkan status READY.

Memverifikasi penyediaan Cache Data

Setelah Anda membuat Deployment, pastikan penyimpanan persisten dengan Cache Data disediakan dengan benar.

  1. Untuk memverifikasi bahwa pvc-data-cache Anda berhasil diikat ke volume persisten, jalankan perintah berikut:

    kubectl get pvc pvc-data-cache
    

    Outputnya mirip dengan hal berikut ini:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                VOLUMEATTRIBUTESCLASS   AGE
    pvc-data-cache   Bound    pvc-e9238a16-437e-45d7-ad41-410c400ae018   300Gi      RWO            pd-balanced-data-cache-sc   <unset>                 10m
    
  2. Untuk mengonfirmasi bahwa Grup Logical Volume Manager (LVM) untuk Cache Data telah dibuat di node, ikuti langkah-langkah berikut:

    1. Dapatkan nama Pod driver PDCSI di node tersebut:

      NODE_NAME=$(kubectl get pod --output json |  jq '.items[0].spec.nodeName' | sed 's/\"//g')
      kubectl get po -n kube-system -o wide | grep ^pdcsi-node | grep $NODE_NAME
      

      Dari output, salin nama Pod pdcsi-node.

    2. Melihat log driver PDCSI untuk pembuatan Grup LVM:

      PDCSI_POD_NAME="PDCSI-NODE_POD_NAME"
      kubectl logs -n kube-system $PDCSI_POD_NAME gce-pd-driver | grep "Volume group creation"
      

      Ganti PDCSI-NODE_POD_NAME dengan nama Pod sebenarnya yang Anda salin di langkah sebelumnya.

      Outputnya mirip dengan hal berikut ini:

      Volume group creation succeeded for LVM_GROUP_NAME
      

Pesan ini mengonfirmasi bahwa konfigurasi LVM untuk Cache Data telah disiapkan dengan benar di node.

Pembersihan

Agar tidak menimbulkan biaya pada akun Trusted Cloud by S3NS Anda, hapus resource penyimpanan yang Anda buat dalam panduan ini.

  1. Hapus Deployment.

    kubectl delete deployment postgres-data-cache
    
  2. Hapus PersistentVolumeClaim.

    kubectl delete pvc pvc-data-cache
    
  3. Hapus node pool.

    gcloud container node-pools delete datacache-node-pool \
        --cluster CLUSTER_NAME
    

    Ganti CLUSTER_NAME dengan nama cluster tempat Anda membuat node pool yang menggunakan Cache Data.

Langkah berikutnya