Sobes.tech
Middle
144

Қандай қолданба үшін StatefulSet қолдану керек және неге?

AI-дан жауап

sobes.tech AI

StatefulSet қолдану керек қосымшалар үшін:

  1. Тұрақты желілік идентификация. Pod-тар <statefulset-name>-<pod-index> форматында бірегей, тұрақты hostname алады.
  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 # Сұралған сақтау көлемі