Membuat beban kerja stateful

Dokumen 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 menyediakan identitas yang konsisten dan nama host yang stabil untuk aplikasi Anda, terlepas dari tempat workload-nya dijadwalkan.

Dokumen ini ditujukan untuk 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.

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 memiliki cakupan organisasi atau cluster standar yang memiliki cakupan 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 IAM Project Anda untuk memberi Anda peran Admin Namespace (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 IAM Project Anda untuk memberi Anda peran Developer Cluster (cluster-developer). Peran ini terikat ke namespace project Anda.

Menyiapkan lingkungan Anda

Untuk menjalankan perintah terhadap a cluster Kubernetes menggunakan API, pastikan Anda memiliki resource berikut:

  • Temukan nama cluster Kubernetes, atau tanyakan kepada anggota grup administrator platform nama cluster.

  • Login dan buat file kubeconfig untuk cluster Kubernetes.

  • Gunakan jalur kubeconfig cluster Kubernetes untuk mengganti KUBERNETES_CLUSTER_KUBECONFIG dalam 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, dapat berupa namespace apa pun.

  • SERVICE_NAME: nama objek Service. Pastikan objek StatefulSet juga menetapkan objek Service di serviceName.

  • APP_NAME: nama aplikasi yang akan dijalankan dalam deployment.

  • APP_LABEL_NAME: pemilih label yang menentukan pod mana yang termasuk dalam objek StatefulSet.

  • STATEFULSET_NAME: nama objek StatefulSet.

  • NUMBER_OF_REPLICAS: jumlah objek Pod yang direplikasi yang dikelola oleh deployment.

  • CONTAINER_NAME: nama container.

  • CONTAINER_IMAGE: nama image container. Anda harus menyertakan jalur registry container dan versi image, seperti REGISTRY_PATH/nginx:1.23. Untuk mengetahui informasi selengkapnya tentang cara menetapkan jalur registry container, 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 Service bernama nginx dibuat, yang ditunjukkan oleh kolom metadata: name. Objek Service menargetkan aplikasi bernama nginx, yang ditunjukkan oleh labels.app: nginx dan selector.app: nginx. Objek Service mengekspos port 80 dan menamainya web. Objek Service ini mengontrol domain jaringan dan merutekan traffic internet ke aplikasi dalam container yang di-deploy oleh objek StatefulSet.
  • StatefulSet bernama web dibuat dengan tiga objek Pod yang direplikasi, seperti yang ditetapkan oleh kolom replicas: 3.
  • Template Pod, yang ditetapkan oleh bagian .spec.template, menunjukkan bahwa objek Pod-nya diberi label app: nginx.
  • Spesifikasi Pod, yang ditetapkan oleh bagian .template.spec, menunjukkan bahwa pod StatefulSet menjalankan satu container, nginx, yang menjalankan image nginx pada versi 1.23.
  • Spesifikasi Pod menggunakan port web yang dibuka oleh objek Service.
  • Bagian .template.spec.volumeMounts menentukan kolom mountPath, yang diberi nama www. mountPath adalah jalur dalam container tempat volume penyimpanan dipasang.
  • StatefulSet menyediakan tiga objek PersistentVolumeClaim, yang diberi nama web-www-0, web-www-1, dan web-www-2, dengan penyimpanan yang disediakan 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 ditetapkan dalam spesifikasi Pod 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 sendiri.

Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi penyimpanan container.

Langkah berikutnya