Sobes.tech
Middle

Millisele rakendusele peaks kasutama StatefulSet asemel Deployment ja miks?

sobes.tech AI

Vastus AI-lt

StatefulSet on vaja kasutada rakenduste jaoks, millele on vajalik:

  1. Stabiilne võrgutuvastamine. Podid saavad unikaalse, püsiva hostname formaadis <statefulset-name>-<pod-index>.
  2. Stabiilne, püsiv salvestus. Iga Pod'i replikale määratakse oma PersistentVolume. Isegi Pod'i taaskäivitamisel jäävad andmed selle külge seotud.
  3. Korraldatud juurutamine ja skaleerimine. Podid luuakse ja kustutatakse rangelt määratletud järjekorras (kasvavas järjekorras loomisel, kahanevas - kustutamisel).
  4. Korraldatud või paralleelne uuendus. Toetab nii järkjärgulist (rolling update), kui ka paralleelset (in-place või parallel) uuendust, kuid kontrolli võimalusega.

Näited sellistest rakendustest:

  • Andmebaasid (MySQL, PostgreSQL, MongoDB)
  • Sõnumivahetajad (Kafka, RabbitMQ)
  • Vahemälusüsteemid (Redis, Memcached)
  • Jaotatud failisüsteemid (näiteks Ceph, kui töötab Kubernetesis)
  • Iga rakendus, millel on vaja säilitada olek taaskäivituste vahel ja omada püsivat identifitseerimist.

Erinevalt Deploymentist, kus Podid on vahetatavad ja stateless, tagab StatefulSet unikaalsuse ja oleku säilitamise iga repliigi jaoks, mis on kriitiline rakendustele, mis sõltuvad püsivast andmete salvestamisest ja stabiilsest võrgutuvastamisest.

Lihtne StatefulSet näide andmebaasile:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql" # Vajalik stabiilseks võrgutuvastamiseks Podide jaoks
  replicas: 3
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "password" # Kasutada Secrets tootmises
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Tee, kuhu paigaldatakse püsiv salvestus
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage # PVC mallinimi
    spec:
      accessModes: [ "ReadWriteOnce" ] # Juurdepääsirežiim
      resources:
        requests:
          storage: 10Gi # Nõutav salvestusmaht