Том уже привязан исключительно к одному узлу и не может быть присоединен к другому

У меня есть довольно простой модуль Kubernetes. Я хочу набор с отслеживанием состояния и хочу следующий процесс:

  1. Я хочу загрузить initcontainer и распаковать архив из s3 в том, подключенный к initcontainer.
  2. Я хочу подключить этот том к моему основному контейнеру для использования

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: app
  namespace: test
  labels:
    name: app
spec:
  serviceName: app
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      initContainers:
      - name: preparing
        image: alpine:3.8
        imagePullPolicy: IfNotPresent
        command:
          - "sh"
          - "-c"
          - |
            echo "Downloading data"
            wget https://s3.amazonaws.com/.........
            tar -xvzf xxxx-........ -C /root/
        volumeMounts:
        - name: node-volume
          mountPath: /root/data/

      containers:
      - name: main-container
        image: ecr.us-west-2.amazonaws.com/image/:latest
        imagePullPolicy: Always

        volumeMounts:
        - name: node-volume
          mountPath: /root/data/

  volumeClaimTemplates:
  - metadata:
      name: node-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: gp2-b
      resources:
        requests:
          storage: 80Gi

I continue to get the following error:

Сначала я запускаю это и вижу, как поток логов моего архива загружается initcontainer. Примерно на полпути он завершается и дает мне следующую ошибку:

Multi-Attach error for volume "pvc-faedc8" Volume is 
already exclusively attached to one node and can't be 
attached to another

person LoganHenderson    schedule 25.02.2019    source источник
comment
Есть ли причина, по которой вы не используете том типа emptyDir?   -  person Lev Kuznetsov    schedule 26.02.2019


Ответы (1)


Похоже, у вас есть оборванный PVC и/или PV, который подключен к одному из ваших узлов. Вы можете подключиться к узлу по ssh и запустить df или mount для проверки.

Если вы посмотрите на это, PVC в StatefulSet всегда сопоставляются с их имена стручков, так что вполне возможно, что у вас все еще есть висящий стручок (?)

Если у вас болтается стручок:

$ kubectl -n test delete pod <pod-name>

Возможно, вам придется заставить его:

$ kubectl -n test delete pod <pod-name> --grace-period=0 --force

Затем вы можете попробовать удалить PVC и соответствующий PV:

$ kubectl delete pvc pvc-faedc8
$ kubectl delete pv <pv-name>
person Rico    schedule 26.02.2019
comment
Я бы посоветовал убрать оборванный стручок, прежде чем удалять PV и PVC. - person skipper21; 21.06.2021
comment
Спасибо за предложение. Я добавил обновленный ответ - person Rico; 21.06.2021