我在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的多个副本示例应该可以访问同一个卷,或者我错了?
1条答案
按热度按时间xpcnnkqh1#
你正在做它完全读
accessModes
你使用只允许一个pod被附加。你不能附加不超过一个pod。正确的accessModes
你应该使用的是ReadWriteMany
-卷可以被挂载为读写由许多节点。创建一个新的
PersistentVolumeClaim
,将ReadWriteMany
作为accessModes
。此外,由于您正在部署的服务是
sftp
。从本质上讲,如果您想要运行更多副本,并且应该附加相同的存储,这意味着您需要有一个可以在多个部署中共享的底层NAS
存储。storageclass
。ReadWriteMany
创建pvc