我创建了一个 StatefulSet,用于运行具有 3 个副本的 NodeJS,并希望附加到一个 gce 磁盘,该磁盘可以成为用户上传文件的数据存储。
我的项目命名:carx;服务器名称:car-server
但是,我在创建第二个 Pod 时遇到错误。
kubectl describe pod car-server-statefulset-1
AttachVolume.Attach failed for volume "my-app-data" : googleapi: Error 400: RESOURCE_IN_USE_BY_ANOTHER_RESOURCE - The disk resource 'projects/.../disks/carx-disk' is already being used by 'projects/.../instances/gke-cluster-...-2dw1'
car-server-statefulset.yml
apiVersion: v1
kind: Service
metadata:
name: car-server-service
labels:
app: car-server
spec:
ports:
- port: 8080
name: car-server
clusterIP: None
selector:
app: car-server
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: car-server-statefulset
spec:
serviceName: "car-server-service"
replicas: 3
template:
metadata:
labels:
app: car-server
spec:
containers:
- name: car-server
image: myimage:latest
ports:
- containerPort: 8080
name: nodejs-port
volumeMounts:
- name: my-app-data
mountPath: /usr/src/app/mydata
volumes:
- name: my-app-data
persistentVolumeClaim:
claimName: example-local-claim
selector:
matchLabels:
app: car-server
pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: example-local-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: standard
pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-app-data
labels:
app: my-app
spec:
capacity:
storage: 60Gi
storageClassName: standard
accessModes:
- ReadWriteMany
gcePersistentDisk:
pdName: carx-disk
fsType: ext4
最佳答案
Access Mode字段被视为请求,但不确定您是否得到了您所请求的内容。在你的情况下,GCEPersistentDisk仅支持 ReadWriteOnce
或 ReadOnlyMany
。
您的 PV 现已挂载为 ReadWriteOnce
,但只能同时挂载在一个节点上。因此其他副本将无法挂载该卷。
当使用StatefulSet时,每个副本使用自己的卷是很常见的,为此使用 StatefulSet
list 的 volumeClaimTemplate:
部分。
示例:
volumeClaimTemplates:
- metadata:
name: example-claim
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 5Gi
如果您只能使用单个卷,您可以考虑仅使用一个副本运行 StatefulSet
,例如副本:1
。
如果您想要磁盘复制,您可以对复制到另一个可用区的区域磁盘使用StorageClass。请参阅Regional Persistent Disk ,但它仍然具有相同的访问模式。
关于kubernetes - Kubernetes 中的 StatefulSet 中的 3 个副本可以使用相同的 PersistentVolume 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032305/