Halaman ini menjelaskan cara membuat dan mengelola workload stateful dalam cluster Kubernetes air-gapped Google Distributed Cloud (GDC). Workload stateful memungkinkan Anda menskalakan deployment aplikasi dengan penyimpanan persisten. Penyimpanan persisten memberikan identitas yang konsisten dan nama host yang stabil untuk aplikasi Anda, terlepas dari tempat beban kerjanya dijadwalkan.
Halaman ini ditujukan bagi developer dalam grup operator aplikasi, yang bertanggung jawab membuat workload aplikasi untuk organisasi mereka. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Audiens untuk GDC yang terisolasi dari internet.
Sebelum memulai
Untuk menjalankan perintah terhadap cluster Kubernetes, pastikan Anda memiliki resource berikut:
Temukan nama cluster Kubernetes, atau tanyakan kepada Administrator Platform Anda nama cluster tersebut.
Login dan buat file kubeconfig untuk cluster Kubernetes jika Anda belum memilikinya.
Gunakan jalur kubeconfig cluster Kubernetes untuk mengganti
KUBERNETES_CLUSTER_KUBECONFIG
dalam petunjuk ini.
Untuk mendapatkan izin yang diperlukan guna membuat workload stateful, minta Admin IAM Organisasi Anda untuk memberi Anda peran Admin Namespace (namespace-admin
) di namespace project Anda.
Buat 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 project tempat men-deploy workload penampung.SERVICE_NAME
: nama objekService
. Pastikan objekStatefulSet
menetapkan objekService
diserviceName
-nya juga.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 objekPod
replika yang dikelola deployment.CONTAINER_NAME
: nama container.CONTAINER_IMAGE
: nama image container. Anda harus menyertakan jalur registry container dan versi image, sepertiREGISTRY_PATH/nginx:1.23
.CONTAINER_STORAGE_VOLUME_PATH
: jalur dalam container tempat volume penyimpanan dipasang.
Sebagai contoh, objek StatefulSet
berikut dan objek Service
yang sesuai
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
Service
bernamanginx
dibuat, yang ditunjukkan oleh kolommetadata: name
. ObjekService
menargetkan aplikasi bernamanginx
, yang ditunjukkan olehlabels.app: nginx
danselector.app: nginx
. ObjekService
mengekspos port 80 dan menamainyaweb
. ObjekService
ini mengontrol domain jaringan dan merutekan traffic internet ke aplikasi dalam container yang di-deploy oleh objekStatefulSet
. StatefulSet
bernamaweb
dibuat dengan tiga objekPod
yang direplikasi, seperti yang ditetapkan oleh kolomreplicas: 3
.- Template
Pod
, yang ditetapkan oleh bagian.spec.template
, menunjukkan bahwa objekPod
diberi labelapp: nginx
. - Spesifikasi
Pod
, yang ditetapkan oleh bagian.template.spec
, menunjukkan bahwa PodStatefulSet
menjalankan satu container,nginx
, yang menjalankan imagenginx
pada versi1.23
. - Spesifikasi
Pod
menggunakan port web yang dibuka oleh objekService
. - Bagian
.template.spec.volumeMounts
menentukan kolommountPath
, yang diberi namawww
.mountPath
adalah jalur dalam container tempat volume penyimpanan dipasang. StatefulSet
menyediakan tiga objekPersistentVolumeClaim
, yang diberi namaweb-www-0
,web-www-1
, danweb-www-2
, dengan masing-masing penyimpanan yang disediakan sebesar 1 GB.
Setelah dibuat, StatefulSet
akan memastikan bahwa jumlah objek Pod
yang diinginkan berjalan dan tersedia setiap saat. StatefulSet
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.