Создать новый том при перезапуске модуля в наборе состояний

Я использую azure aks для создания набора состояний с томом с помощью Azure Disk Provisioner. Я пытаюсь найти способ записать свой YAML-файл с полным набором состояния таким образом, чтобы при перезапуске модуля он получал новый том, а старый том был удален. .

Я знаю, что могу удалить тома вручную, но есть ли способы сказать Kubernetes сделать это с помощью statefulset yaml?

Вот мой Ямл:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: janusgraph
  labels:
    app: janusgraph
spec:
...
...
  template:
    metadata:
      labels:
        app: janusgraph
    spec:
      containers:
        - name: janusgraph
...
...
          volumeMounts:
            - name: data
              mountPath: /var/lib/janusgraph
          livenessProbe:
            httpGet:
              port: 8182
              path: ?gremlin=g.V(123).count()
            initialDelaySeconds: 120
            periodSeconds: 10
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: "default"
        resources:
          requests:
            storage: 7Gi

person toto    schedule 10.08.2020    source источник
comment
kubernetes.io/docs/concepts/storage/persistent-volumes/#delete это должно помочь вам удалить том после использования. Он также удаляет диск.   -  person Tarun Khosla    schedule 10.08.2020
comment
Что вы имеете в виду под restart?   -  person Matt    schedule 11.08.2020
comment
@HelloWorld одна из задач Kubernetes - запускать модуль, если он по какой-то причине не работает. это все основано на стоимости ответа   -  person toto    schedule 11.08.2020
comment
Извините, мне следовало быть более конкретным. Считается ли в вашем случае удаление модуля перезапуском? Или вы имеете в виду перезапуск только при сбое контейнера (без удаления модуля). @toto   -  person Matt    schedule 11.08.2020


Ответы (1)


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

Когда Pod удаляется / перезапускается по какой-либо причине, данные в emptyDir удаляются навсегда.

Образец:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        emptyDir: {}

Примечание. По умолчанию emptyDir тома хранятся на любом носителе, поддерживающем узел - это может быть диск, твердотельный накопитель или сетевое хранилище, в зависимости от вашей среды. Однако вы можете установить в поле emptyDir.medium значение Память, чтобы Kubernetes смонтировал вместо вас tmpfs (файловую систему с ОЗУ).

person Kamol Hasan    schedule 10.08.2020
comment
Я не могу использовать emptyDir, потому что мое storageClassName: default - это фактически диск Azure, который предоставляет мне 7Gi, указанное выше. Кроме того, похоже, что statefulset имеет следующие ограничения: kubernetes.io/docs/concepts / workloads / controllers / statefulset /, что означает, что я не могу удалить этот том, только вручную. или просто используйте Deployment вместо statefulset - person toto; 10.08.2020