Dokumen ini menjelaskan cara membuat dan mengelola workload stateful dalam cluster Kubernetes Google Distributed Cloud (GDC) dengan air gap. Workload stateful memungkinkan Anda menskalakan deployment aplikasi dengan penyimpanan persisten. Penyimpanan persisten memberikan identitas yang konsisten dan nama host yang stabil pada aplikasi Anda, terlepas dari tempat workload-nya dijadwalkan.
Dokumen ini ditujukan bagi developer dalam grup operator aplikasi, yang bertanggung jawab membuat workload aplikasi untuk organisasi mereka. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.
Sebelum memulai
Untuk menyelesaikan tugas dalam dokumen ini, Anda harus meminta izin yang diperlukan dan menyiapkan lingkungan Anda.
Meminta peran IAM
Anda harus memiliki peran tertentu untuk mendapatkan izin yang diperlukan guna membuat workload stateful. Peran yang Anda perlukan bergantung pada apakah Anda bekerja dalam cluster bersama yang tercakup dalam organisasi atau cluster standar yang tercakup dalam project. Untuk mengetahui informasi selengkapnya, lihat Konfigurasi cluster Kubernetes.
Peran cluster bersama
Untuk membuat, menghapus, mengedit, atau melihat workload stateful di cluster bersama, minta Admin Project IAM Anda untuk memberi Anda peran Namespace Admin (namespace-admin). Peran ini terikat ke namespace project Anda.
Peran cluster standar
Untuk membuat, menghapus, mengedit, atau melihat workload stateful di cluster standar, minta
Admin Project IAM Anda untuk memberi Anda peran Cluster Developer
(cluster-developer). Peran ini terikat ke namespace project Anda.
Menyiapkan lingkungan Anda
Untuk menjalankan perintah terhadap cluster Kubernetes menggunakan API, pastikan Anda memiliki resource berikut:
Temukan nama cluster Kubernetes, atau tanyakan kepada anggota grup administrator platform apa nama clusternya.
Login dan buat file kubeconfig untuk cluster Kubernetes.
Gunakan jalur kubeconfig cluster Kubernetes untuk mengganti
KUBERNETES_CLUSTER_KUBECONFIGdalam petunjuk ini.
Membuat resource StatefulSet
Buat objek StatefulSet dengan menulis manifes StatefulSet dan menjalankan kubectl apply untuk membuat resource. Untuk menyediakan cara yang stabil bagi
klien untuk mengirim permintaan ke pod resource StatefulSet, Anda juga harus
membuat objek Service.
Perintah kubectl apply menggunakan file manifes untuk membuat, memperbarui, dan menghapus
resource di cluster Kubernetes 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.
Untuk membuat resource StatefulSet dan Service, jalankan:
kubectl --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG -n NAMESPACE \
apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
name: SERVICE_NAME
labels:
app: APP_NAME
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: APP_NAME
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: STATEFULSET_NAME
spec:
selector:
matchLabels:
app: APP_LABEL_NAME
serviceName: "SERVICE_NAME"
replicas: NUMBER_OF_REPLICAS
template:
metadata:
labels:
app: APP_LABEL_NAME
spec:
terminationGracePeriodSeconds: 10
containers:
- name: CONTAINER_NAME
image: CONTAINER_IMAGE
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: CONTAINER_STORAGE_VOLUME_PATH
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
EOF
Ganti kode berikut:
KUBERNETES_CLUSTER_KUBECONFIG: file kubeconfig untuk cluster tempat Anda men-deploy workload container.NAMESPACE: namespace tempat men-deploy workload container. Untuk cluster bersama, ini harus berupa namespace project. Untuk cluster standar, namespace-nya dapat berupa namespace apa pun.SERVICE_NAME: nama objekService. Pastikan objekStatefulSetjuga menetapkan objekServicediserviceName-nya.APP_NAME: nama aplikasi yang akan dijalankan dalam deployment.APP_LABEL_NAME: pemilih label yang menentukan pod mana yang termasuk dalam objekStatefulSet.STATEFULSET_NAME: nama objekStatefulSet.NUMBER_OF_REPLICAS: jumlah objekPodyang direplikasi yang dikelola deployment.CONTAINER_NAME: nama container.CONTAINER_IMAGE: nama image container. Anda harus menyertakan jalur container registry dan versi image, sepertiREGISTRY_PATH/nginx:1.23. Untuk mengetahui informasi selengkapnya tentang cara menetapkan jalur container registry, lihat Ringkasan Managed Harbor Service.CONTAINER_STORAGE_VOLUME_PATH: jalur dalam container tempat volume penyimpanan dipasang.
Sebagai contoh, objek StatefulSet dan objek Service yang sesuai berikut membuat workload container stateful:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: REGISTRY_PATH/nginx:1.23
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Dalam contoh ini:
- Objek
Servicebernamanginxdibuat, yang ditunjukkan oleh kolommetadata: name. ObjekServicemenargetkan aplikasi bernamanginx, yang ditunjukkan olehlabels.app: nginxdanselector.app: nginx. ObjekServicemengekspos port 80 dan menamainyaweb. ObjekServiceini mengontrol domain jaringan dan merutekan traffic internet ke aplikasi dalam container yang di-deploy oleh objekStatefulSet. StatefulSetbernamawebdibuat dengan tiga objekPodyang direplikasi, seperti yang ditetapkan oleh kolomreplicas: 3.- Template
Pod, yang ditetapkan oleh bagian.spec.template, menunjukkan bahwa objekPod-nya diberi labelapp: nginx. - Spesifikasi
Pod, yang ditetapkan oleh bagian.template.spec, menunjukkan bahwa podStatefulSetmenjalankan satu container,nginx, yang menjalankan imagenginxpada versi1.23. - Spesifikasi
Podmenggunakan port web yang dibuka oleh objekService. - Bagian
.template.spec.volumeMountsmenentukan kolommountPath, yang diberi namawww.mountPathadalah jalur dalam container tempat volume penyimpanan dipasang. StatefulSetmenyediakan tiga objekPersistentVolumeClaim, bernamaweb-www-0,web-www-1, danweb-www-2, dengan penyimpanan yang disediakan masing-masing sebesar 1 GB.
Setelah dibuat, StatefulSet akan memastikan bahwa jumlah target objek Pod
berjalan dan tersedia setiap saat. StatefulSet akan otomatis
mengganti objek Pod yang gagal atau dikeluarkan dari node-nya, dan mengaitkan
objek Pod baru dengan resource penyimpanan, permintaan dan batas resource, serta
konfigurasi lain yang ditentukan dalam spesifikasi Pod dari objek
StatefulSet.
Meminta penyimpanan persisten di resource StatefulSet
Penyimpanan persisten dapat disediakan secara dinamis sehingga volume yang mendasarinya dibuat sesuai permintaan. Aplikasi dapat meminta penyimpanan persisten dengan objek PersistentVolumeClaim.
Biasanya, Anda harus membuat objek PersistentVolumeClaim selain membuat objek Pod. Namun, objek StatefulSet menyertakan array volumeClaimTemplates yang menghasilkan objek PersistentVolumeClaim. Setiap replika StatefulSet mendapatkan objek PersistentVolumeClaim-nya sendiri.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi penyimpanan container.