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 melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika Anda ingin menggunakan Google Cloud CLI untuk tugas ini, instal, kemudian lakukan inisialisasi gcloud CLI. Jika Anda sebelumnya 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:
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, klik nama StatefulSet yang ingin Anda periksa.
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:
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, klik nama Penerapan yang ingin Anda ubah.
Klik edit Edit.
Ubah YAML konfigurasi sesuai yang diinginkan.
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:
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, klik nama StatefulSet yang ingin Anda periksa.
Klik tab Revision History.
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:
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, klik nama Penerapan yang ingin Anda ubah.
Klik list Actions > Scale > Edit replications.
Masukkan jumlah baru Replicas untuk StatefulSet.
Klik Scale.
Menghapus StatefulSet
kubectl
Untuk menghapus StatefulSet, jalankan perintah berikut:
kubectl delete statefulset STATEFULSET_NAME
Konsol
Untuk menghapus StatefulSet, lakukan langkah-langkah berikut:
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, pilih satu atau beberapa StatefulSets yang ingin Anda hapus.
Klik delete Delete.
Saat diminta untuk mengonfirmasi, klik Delete.
Langkah berikutnya
- Pelajari cara men-deploy cluster MySQL di GKE untuk ketersediaan tinggi
- Pelajari cara men-deploy aplikasi stateless.
- Ikuti tutorial tentang cara mengupgrade cluster yang menjalankan workload stateful.