Sobes.tech
Middle

Kurai lietojumprogrammai būtu jāizmanto StatefulSet vietā Deployment un kāpēc?

sobes.tech AI

Atbilde no AI

StatefulSet ir jāizmanto lietojumprogrammām, kurām nepieciešama:

  1. Stabila tīkla identifikācija. Pod'iem tiek piešķirts unikāls, pastāvīgs hostname formātā <statefulset-name>-<pod-index>.
  2. Stabila, pastāvīga glabāšana. Katram Pod'am ir piešķirts savs PersistentVolume. Pat pārstartējot Pod'u, tā dati paliek piesaistīti pie tā.
  3. Sakārtots izvietojums un mērogošana. Pod'i tiek izveidoti un dzēsti stingri noteiktā secībā (augšanas secībā izveidojot, dilstošā - dzēšot).
  4. Sakārtots vai paralēls atjauninājums. Atbalstīts gan pakāpenisks (rolling update), gan paralēls (in-place vai parallel) atjauninājums, bet ar iespēju kontrolēt secību.

Piemēri šādām lietojumprogrammām:

  • Datu bāzes (MySQL, PostgreSQL, MongoDB)
  • Ziņojumu starpnieki (Kafka, RabbitMQ)
  • Kešatmiņas sistēmas (Redis, Memcached)
  • Izplatītas failu sistēmas (piemēram, Ceph, ja darbojas Kubernetes)
  • Jebkura lietojumprogramma, kurai nepieciešams saglabāt stāvokli starp pārstartiem un nodrošināt pastāvīgu identifikāciju.

Atšķirībā no Deployment, kur Pod'iem ir aizvietojamība un stateless, StatefulSet garantē unikālu identitāti un stāvokļa saglabāšanu katrai replikai, kas ir kritiski svarīgi lietojumprogrammām, kas balstās uz pastāvīgu datu glabāšanu un stabilu tīkla identifikāciju.

Vienkāršs StatefulSet piemērs datu bāzei:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql" # Nepieciešams stabilai tīkla identifikācijai Pod'iem
  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" # Gada laikā izmantot Secrets
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Ceļš, kur montējas pastāvīgais glabāšanas vieta
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage # PVC šablona nosaukums
    spec:
      accessModes: [ "ReadWriteOnce" ] # Pieejas režīms
      resources:
        requests:
          storage: 10Gi # Pieprasītais glabāšanas apjoms