Men-deploy aplikasi stateful


Halaman ini menjelaskan cara men-deploy aplikasi stateful menggunakan Google Kubernetes Engine (GKE).

Ringkasan

Aplikasi stateful menyimpan data ke penyimpanan persistent disk untuk digunakan oleh server, klien, dan aplikasi lainnya. Contoh aplikasi stateful adalah database atau penyimpanan nilai kunci tempat data disimpan dan diambil oleh aplikasi lain.

Penyimpanan persisten dapat disediakan secara dinamis, sehingga volume yang mendasarinya dibuat on-demand. Di Kubernetes, Anda mengonfigurasi penyediaan dinamis dengan membuat StorageClass. Di GKE, StorageClass default memungkinkan Anda menyediakan persistent disk Compute Engine secara dinamis.

Kubernetes menggunakan pengontrol StatefulSet untuk men-deploy aplikasi stateful sebagai objek StatefulSet. Pod di StatefulSets tidak dapat dipertukarkan: setiap Pod memiliki ID unik yang dipertahankan di mana pun jadwalnya.

Aplikasi stateful berbeda dengan aplikasi stateless, di mana data klien tidak disimpan ke server di antara sesi.

Anda dapat mempelajari lebih lanjut tentang penyimpanan persisten di cluster multi-zona dan regional.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan 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.
  • Pastikan aplikasi Anda dalam container disimpan di registry image, seperti Artifact Registry.

Anda dapat mengikuti panduan memulai untuk mengaktifkan GKE API, membuat cluster, dan mempelajari GKE lebih lanjut.

Meminta penyimpanan persisten di StatefulSet

Aplikasi dapat meminta penyimpanan persisten dengan PersistentVolumeClaim.

Biasanya, Anda harus membuat objek PersistentVolumeClaim selain membuat Pod. Namun, objek StatefulSet menyertakan array volumeClaimTemplates, yang secara otomatis menghasilkan objek PersistentVolumeClaim. Setiap replika StatefulSet mendapatkan objek PersistentVolumeClaim-nya sendiri.

Anda juga dapat menggunakan disk yang sudah ada sebelumnya di StatefulSet.

Membuat StatefulSet

Untuk membuat resource StatefulSet, gunakan perintah kubectl apply.

Perintah kubectl apply menggunakan file manifes untuk membuat, memperbarui, dan menghapus resource di cluster Anda. Ini adalah metode deklaratif konfigurasi objek. Metode ini mempertahankan penulisan yang dilakukan pada objek aktif tanpa menggabungkan kembali perubahan ke dalam file konfigurasi objek.

Linux

File manifes berikut adalah contoh sederhana dari StatefulSet yang diatur oleh Service yang telah dibuat secara terpisah:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: STATEFULSET_NAME
spec:
  selector:
    matchLabels:
      app: APP_NAME
  serviceName: "SERVICE_NAME"
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: APP_NAME
    spec:
      containers:
      - name: CONTAINER_NAME
        image: ...
        ports:
        - containerPort: 80
          name: PORT_NAME
        volumeMounts:
        - name: PVC_NAME
          mountPath: ...
  volumeClaimTemplates:
  - metadata:
      name: PVC_NAME
      annotations:
        ...
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Ganti kode berikut:

  • STATEFULSET_NAME: nama StatefulSet.
  • SERVICE_NAME: nama Layanan.
  • APP_NAME: nama aplikasi yang dijalankan di Pod.
  • CONTAINER_NAME: nama container dalam Pod.
  • PORT_NAME: nama port yang dibuka oleh StatefulSet.
  • PVC_NAME: nama PersistentVolumeClaim.

Dalam file ini, kolom kind menentukan bahwa objek StatefulSet harus dibuat dengan spesifikasi yang ditentukan dalam file. Contoh StatefulSet ini menghasilkan tiga Pod yang direplikasi, dan membuka port 80 untuk mengekspos StatefulSet ke internet.

Windows

Saat menggunakan cluster dengan kumpulan node Windows Server, Anda harus membuat StorageClass karena StorageClass default menggunakan ext4 sebagai jenis sistem file, yang hanya berfungsi untuk container Linux. Jika Anda menggunakan persistent disk Compute Engine, Anda harus menggunakan NTFS sebagai jenis penyimpanan file seperti ditunjukkan pada contoh berikut:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: STORAGECLASS_NAME
parameters:
  type: pd-standard
  fstype: NTFS
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

Manifes StatefulSet berikut menggunakan StorageClass yang didefinisikan di atas. Proses ini membuat empat pasangan PersistentVolume dan PersistentVolumeClaim untuk mewakili empat persistent disk Compute Engine. Setiap Pod di StatefulSet menggunakan satu persistent disk.

Untuk memastikan Pod Anda dijadwalkan dengan benar ke node Windows Server, Anda harus menambahkan pemilih node ke spesifikasi Pod.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: STATEFULSET_NAME
spec:
  replicas: 4
  selector:
    matchLabels:
      app: APP_NAME
  template:
    metadata:
      labels:
        app: APP_NAME
      name: CONTAINER_NAME
    spec:
      nodeSelector:
        kubernetes.io/os: windows
      containers:
      - name: CONTAINER_NAME
        image: ...
        ports:
        - containerPort: 80
          name: PORT_NAME
        volumeMounts:
        - name: PVC_NAME
          mountPath: C:\mnt\state
  volumeClaimTemplates:
  - metadata:
      name: PVC_NAME
    spec:
      storageClassName: STORAGECLASS_NAME
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Ganti kode berikut:

  • APP_NAME: nama aplikasi yang dijalankan di Pod.
  • STATEFULSET_NAME: nama StatefulSet.
  • CONTAINER_NAME: nama container dalam Pod.
  • PORT_NAME: nama port yang dibuka oleh StatefulSet.
  • PVC_NAME: nama PersistentVolumeClaim.
  • STORAGECLASS_NAME: nama StorageClass.

Untuk membuat resource StatefulSet, jalankan perintah berikut dengan mengganti STATEFULSET_FILE dengan nama file manifes:

kubectl apply -f STATEFULSET_FILE

Anda juga dapat menggunakan kubectl apply -f DIRECTORY/ untuk membuat semua objek (kecuali yang sudah ada) yang ditentukan dalam file konfigurasi yang disimpan dalam direktori.

Memeriksa StatefulSet

kubectl

Untuk memeriksa StatefulSet, jalankan perintah berikut:

kubectl get statefulset STATEFULSET_NAME -o yaml

Perintah ini menampilkan konfigurasi langsung resource StatefulSet dalam format YAML.

Untuk menampilkan daftar Pod yang dibuat oleh StatefulSet, jalankan perintah berikut:

kubectl get pods -l app=APP_NAME

Dalam perintah ini, flag -l menginstruksikan kubectl untuk mendapatkan semua Pod yang diberi label untuk APP_NAME.

Output-nya mirip dengan berikut ini:

NAME                                READY     STATUS    RESTARTS   AGE
pod-name                            1/1       Running   0          1m
pod-name                            1/1       Running   0          1m

Untuk mendapatkan informasi mendetail tentang StatefulSet, jalankan perintah berikut:

kubectl describe statefulset STATEFULSET_NAME

Untuk mendapatkan informasi tentang Pod tertentu, jalankan perintah berikut:

kubectl describe pod POD_NAME

Untuk menampilkan daftar objek PersistentVolumeClaim yang telah dibuat, jalankan perintah berikut:

kubectl get pvc

Output-nya mirip dengan berikut ini:

NAME                            STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
STATEFULSET_NAME-PVC_NAME-0     Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800002   1G         RWO            standard        9s
STATEFULSET_NAME-PVC_NAME-1     Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800003   1G         RWO            standard        9s
STATEFULSET_NAME-PVC_NAME-2     Bound     pvc-bdff4e1e-183e-11e8-bf6d-42010a800004   1G         RWO            standard        9s

Untuk mendapatkan informasi tentang PersistentVolumeClaim tertentu, jalankan perintah berikut:

kubectl describe pvc STATEFULSET_NAME-PVC_NAME-0

Untuk mendapatkan informasi tentang PersistentVolume tertentu, jalankan perintah berikut:

kubectl describe pv PV_NAME

Konsol

Untuk memeriksa StatefulSet, lakukan langkah-langkah berikut:

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar workload, klik nama StatefulSet yang ingin Anda periksa.

  3. Di halaman Stateful Set details, lakukan salah satu tindakan berikut:

    • Klik tab Revision History untuk melihat histori revisi StatefulSet.
    • Klik tab Events untuk melihat semua peristiwa yang terkait dengan StatefulSet.
    • Klik tab Logs untuk melihat log container untuk StatefulSet.
    • Klik tab YAML untuk melihat, menyalin, atau mendownload YAML konfigurasi untuk StatefulSet.

Memperbarui StatefulSet

Ada beberapa cara untuk memperbarui StatefulSets. Metode deklaratif yang umum adalah kubectl apply. Untuk mengupdate StatefulSet langsung dari shell atau di editor tertentu, Anda dapat menggunakan kubectl edit. Anda juga dapat menggunakan editor YAML dari menu GKE Workloads di Google Cloud Console.

Anda dapat meluncurkan update ke spesifikasi Pod untuk resource StatefulSet, seperti gambar, penggunaan/permintaan resource, atau konfigurasinya.

kubectl apply

Anda dapat memperbarui StatefulSet dengan menerapkan file manifes baru atau yang diperbarui. Hal ini berguna untuk membuat berbagai perubahan pada StatefulSet Anda, seperti saat melakukan penskalaan atau untuk menentukan versi baru aplikasi Anda.

Untuk memperbarui StatefulSet, jalankan perintah berikut:

kubectl apply -f STATEFULSET_FILE

Ganti STATEFULSET_FILE dengan file manifes yang telah diperbarui.

Perintah kubectl apply menerapkan file manifes ke resource. Jika resource yang ditentukan tidak ada, resource tersebut akan dibuat oleh perintah.

Untuk mengetahui informasi lebih lanjut tentang kubectl apply, lihat dokumentasi referensi kubectl.

Konsol

Untuk mengedit konfigurasi live StatefulSet, lakukan langkah-langkah berikut:

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar workload, klik nama Penerapan yang ingin Anda ubah.

  3. Klik Edit.

  4. Ubah YAML konfigurasi sesuai yang diinginkan.

  5. Klik Save.

Memeriksa peluncuran update

kubectl

Untuk memeriksa peluncuran StatefulSet, jalankan perintah berikut:

kubectl rollout status statefulset STATEFULSET_NAME

Untuk melihat histori peluncuran StatefulSet, jalankan perintah berikut:

kubectl rollout history statefulset STATEFULSET_NAME

Untuk mengurungkan peluncuran, jalankan perintah berikut:

kubectl rollout undo statefulset STATEFULSET_NAME

Konsol

Untuk melihat histori revisi StatefulSet, lakukan langkah-langkah berikut:

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar workload, klik nama StatefulSet yang ingin Anda periksa.

  3. Klik tab Revision History.

  4. Pilih revisi yang diinginkan.

Strategi pembaruan

Kolom updateStrategy StatefulSet memungkinkan Anda mengonfigurasi dan menonaktifkan update berkelanjutan otomatis untuk container, label, permintaan resource, batas, dan anotasi untuk Pod di StatefulSet.

Anda dapat mempelajari lebih lanjut tentang Strategi Update untuk StatefulSets dalam dokumentasi Kubernetes.

Menskalakan StatefulSet

kubectl

Perintah kubectl scale dapat digunakan kapan saja untuk menskalakan StatefulSet Anda.

Untuk menskalakan StatefulSet secara manual, jalankan perintah berikut:

kubectl scale statefulset STATEFULSET_NAME --replicas NUMBER_OF_REPLICAS

Ganti NUMBER_OF_REPLICAS dengan jumlah Pod replika yang diinginkan.

Konsol

Untuk menskalakan StatefulSet, lakukan langkah-langkah berikut:

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar workload, klik nama Penerapan yang ingin Anda ubah.

  3. Klik Actions > Scale > Edit replications.

  4. Masukkan jumlah baru Replicas untuk StatefulSet.

  5. Klik Scale.

Menghapus StatefulSet

kubectl

Untuk menghapus StatefulSet, jalankan perintah berikut:

kubectl delete statefulset STATEFULSET_NAME

Konsol

Untuk menghapus StatefulSet, lakukan langkah-langkah berikut:

  1. Buka halaman Workloads di Konsol Google Cloud.

    Buka Workloads

  2. Dalam daftar workload, pilih satu atau beberapa StatefulSets yang ingin Anda hapus.

  3. Klik Delete.

  4. Saat diminta untuk mengonfirmasi, klik Delete.

Langkah berikutnya