Statefulset не может выполнить откат, если модули не находятся в рабочем состоянии - PullRequest
5 голосов
/ 17 июня 2020

Я развернул модули mon go с отслеживанием состояния со стратегией автоматического прокрутки, и ниже представлен шаблон для этого. Развертывание прошло успешно, и модули находятся в состоянии выполнения.

- apiVersion: apps/v1beta1
  kind: StatefulSet
  metadata:
    name: mongo
  spec:
    serviceName: "mongo"
    podManagementPolicy: Parallel
    replicas: 3
    strategy:
      type: Rolling
    template:
      metadata:
        labels:
          role: mongo
          environment: test
      spec:
        terminationGracePeriodSeconds: 10
        containers:
          - name: mongo
            image: mongo:4.0
            imagePullPolicy: Always
            command:
              - mongod
              - "--replSet"
              - rs0
              - "--bind_ip"
              - 0.0.0.0
              - "--smallfiles"
              - "--noprealloc"
            ports:
              - containerPort: 27017
            volumeMounts:
              - name: mongo-persistent-storage
                mountPath: /data/db
          - name: mongo-sidecar
            image: cvallance/mongo-k8s-sidecar
            env:
              - name: MONGO_SIDECAR_POD_LABELS
                value: "role=mongo,environment=test"
    updateStrategy:
      type: RollingUpdate

Я пытаюсь обновить образ mon go с помощью следующей команды set:

oc set image statefulset/mongo mongo=mongo:4.2 -n mongo-replica

Пока пытаясь обновить изображение, поды получают ошибку «CrashLoopBackOff». Я ожидаю, что модули автоматически откатятся к предыдущей запущенной версии.

Но модули попадают в состояние ошибки «CrashLoopBackOff». Я хочу, чтобы поды были возвращены к предыдущей работающей версии. Будем признательны за любые предложения.

1 Ответ

0 голосов
/ 31 августа 2020

Statefulset, к сожалению, не имеет отката, но вы можете гарантировать свои услуги, используя зонды, имея хорошо настроенные зонды Liveness и Readiness, измененная версия будет заменять только работающую версию с зондами, отвечающими за статус ОК.

Таким образом, только одна из 3 ваших реплик вызовет ошибку sh, и вы сможете поработать над ней, чтобы решить проблему или вручную откатить свои изменения, но без потери доставки службы.

Подробнее об этом вы можете узнать в документации k8s: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#forced -rollback

Что касается датчиков, вы можете получить хорошее объяснение здесь: https://www.openshift.com/blog/liveness-and-readiness-probes

...