Kubernetes Stateful Set:无法为多个副本附加或装载卷

u91tlkcl  于 5个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(45)

我在K8S上部署了一个简单的StatefulSet:

kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: sftp
  labels:
    app: sftp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sftp
  template:
    metadata:
      labels:
        app: sftp
    spec:
      volumes:
        - name: sftp-storage
          persistentVolumeClaim:
            claimName: sftp-pvc
      containers:
        - name: sftp
          image: atmoz/sftp
          ports:
            - containerPort: 22
              protocol: TCP
          envFrom:
            - secretRef:
                name: secret
          env:
            - name: SFTP_USERS
              value: >-
                $(SFTP_USERNAME):$SFTP_PASSWORD)::$(SFTP_GID):$(SFTP_ROOT_DIRECTORY)
          resources:
            limits:
              cpu: 500m
              memory: 128Mi
            requests:
              cpu: 250m
              memory: 64Mi
          volumeMounts:
            - name: sftp-storage
              mountPath: /home/user1
          imagePullPolicy: IfNotPresent
      securityContext:
        fsGroup: 10001

字符串
我的存储卷声明使用PVC,如下所示:

kind: PersistentVolumeClaim
metadata:
  name: sftp-pvc
  labels:
    app: sftp
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  volumeName: pv-shoot--kyma--c-5f908c9-5ae6d56b-6560-4b00-9018-b17582336930
  storageClassName: files
  volumeMode: Filesystem


我认为这样的设置应该没有任何问题,这样就不会有任何错误,有状态集上的2个副本访问持久卷上的一个源,但我在一个副本示例上收到以下消息:

MountVolume.WaitForAttach failed for volume "pv-shoot--kyma--c-5f908c9-5ae6d56b-6560-4b00-9018-b17582336930" : volume attachment is being deleted


这是因为另一个示例已经连接到该卷。
我做错了什么,有人能帮忙吗?
我认为同一Deployment或Stateful Set的多个副本示例应该可以访问同一个卷,或者我错了?

xpcnnkqh

xpcnnkqh1#

你正在做它完全读accessModes你使用只允许一个pod被附加。你不能附加不超过一个pod。正确的accessModes你应该使用的是ReadWriteMany-卷可以被挂载为读写由许多节点。
创建一个新的PersistentVolumeClaim,将ReadWriteMany作为accessModes
此外,由于您正在部署的服务是sftp。从本质上讲,如果您想要运行更多副本,并且应该附加相同的存储,这意味着您需要有一个可以在多个部署中共享的底层NAS存储。

  • 您需要将NAS/EFS之类的存储连接到节点。
  • 创建一个适当的storageclass
  • 使用ReadWriteMany创建pvc
  • 把它连到你的分离舱上

相关问题