Sobes.tech
Middle

Кайсы колдонмо үчүн Deployment ордуна StatefulSet колдонуш керек жана эмнеге?

sobes.tech AI

AIден жооп

StatefulSet колдонуу керек тиркемелер үчүн, алардын керек болот:

  1. Туруктуу тармактык идентификация. Pod'дор уникалдуу, туруктуу hostname алат форматта <statefulset-name>-<pod-index>.
  2. Туруктуу, туруктуу сактагыч. Ар бир Pod'дун репликасына өз PersistentVolume берилет. Эгер Pod кайра иштетилсе да, анын маалыматтары ага байланыштуу калат.
  3. Тартиптүү жайгаштыруу жана масштабдоо. Pod'дор белгиленген тартипте түзүлөт жана жоголот (көбөйтүүдө өсүүчү тартипте, жоготууда азайган тартипте).
  4. Тартиптүү же параллелдүү жаңыртуу. Асыңкы (rolling update) жана параллелдүү (in-place же parallel) жаңыртууларды колдойт, бирок тартипти көзөмөлдөө мүмкүнчүлүгү менен.

Мындай тиркемелердин мисалдары:

  • Маалымат базалары (MySQL, PostgreSQL, MongoDB)
  • Хабарламалар брокерлери (Kafka, RabbitMQ)
  • Кэш системалары (Redis, Memcached)
  • Тарапташтырылган файл системалары (мисалы, Ceph, эгер Kubernetesте иштетилсе)
  • Ар кандай тиркемелер, алар кайра иштетилгенде абалын сактап калуу жана туруктуу идентификацияга муктаж.

Deployment'тен айырмаланып, Pod'дор бири-бирине алмаштырмалуу жана stateless болсо, StatefulSet ар бир реплика үчүн уникалдуулук жана абалын сактоо кепилдигин берет, бул маалыматтарды туруктуу сактоо жана туруктуу тармактык идентификация үчүн маанилүү.

Жөнөкөй StatefulSet мисалы базанын үчүн:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql" # Туруктуу тармактык идентификация үчүн керек Pod'дор
  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" # Өндүрүштө Secrets колдонуу
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Туруктуу сактагычтын жолу
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage # PVC шаблондун аты
    spec:
      accessModes: [ "ReadWriteOnce" ] # Кирүү режими
      resources:
        requests:
          storage: 10Gi # Талап кылынган сактагыч көлөмү