GKE Kubernetes 持久卷
GKE Kubernetes Persistent Volume
我尝试为我的 rethinkdb 服务器使用持久卷。但是我得到了这个错误:
Unable to mount volumes for pod "rethinkdb-server-deployment-6866f5b459-25fjb_default(efd90244-7d02-11e8-bffa-42010a8400b9)": timeout expired waiting for volumes to attach/mount for pod "default"/"rethinkdb-server-deployment-
Multi-Attach error for volume "pvc-f115c85e-7c42-11e8-bffa-42010a8400b9" Volume is already used by pod(s) rethinkdb-server-deployment-58f68c8464-4hn9x
我认为 Kubernetes 部署了一个新节点而没有删除旧节点,因此它不能在两者之间共享文件卷,因为我的 pvc 是 ReadWriteOnce。这个永久卷必须以自动方式创建,所以我不能使用永久磁盘,格式化它...
我的配置:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: default
name: rethinkdb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
apiVersion: apps/v1beta1
kind: Deployment
metadata:
namespace: default
labels:
db: rethinkdb
role: admin
name: rethinkdb-server-deployment
spec:
replicas: 1
selector:
matchLabels:
app: rethinkdb-server
template:
metadata:
name: rethinkdb-server-pod
labels:
app: rethinkdb-server
spec:
containers:
- name: rethinkdb-server
image: gcr.io/$PROJECT_ID/rethinkdb-server:$LAST_VERSION
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 8080
name: admin-port
- containerPort: 28015
name: driver-port
- containerPort: 29015
name: cluster-port
volumeMounts:
- mountPath: /data/rethinkdb_data
name: rethinkdb-storage
volumes:
- name: rethinkdb-storage
persistentVolumeClaim:
claimName: rethinkdb-pvc
你是如何处理的?
我看到您在 deployment
中添加了 PersistentVolumeClaim
。我还看到您正在尝试扩展节点池。
A PersistentVolumeClaim
将在部署中工作,但前提是您不扩展 deployment
。这就是出现该错误消息的原因。您看到的错误表明在复制新 pod 时该卷已被现有 pod 使用。
因为您正在尝试扩展 deployment
,其他副本将尝试装载并使用相同的卷。
解决方案:将 PersistentVolumeClaim 部署在 statefulset
对象中,而不是 deployment
。有关如何部署 statefulset
的说明,请参见 in this article. With a statefulset,您将能够将 PersistentVolumeClaim 附加到 pod,然后扩展节点池。
我尝试为我的 rethinkdb 服务器使用持久卷。但是我得到了这个错误:
Unable to mount volumes for pod "rethinkdb-server-deployment-6866f5b459-25fjb_default(efd90244-7d02-11e8-bffa-42010a8400b9)": timeout expired waiting for volumes to attach/mount for pod "default"/"rethinkdb-server-deployment-
Multi-Attach error for volume "pvc-f115c85e-7c42-11e8-bffa-42010a8400b9" Volume is already used by pod(s) rethinkdb-server-deployment-58f68c8464-4hn9x
我认为 Kubernetes 部署了一个新节点而没有删除旧节点,因此它不能在两者之间共享文件卷,因为我的 pvc 是 ReadWriteOnce。这个永久卷必须以自动方式创建,所以我不能使用永久磁盘,格式化它...
我的配置:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: default
name: rethinkdb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
apiVersion: apps/v1beta1
kind: Deployment
metadata:
namespace: default
labels:
db: rethinkdb
role: admin
name: rethinkdb-server-deployment
spec:
replicas: 1
selector:
matchLabels:
app: rethinkdb-server
template:
metadata:
name: rethinkdb-server-pod
labels:
app: rethinkdb-server
spec:
containers:
- name: rethinkdb-server
image: gcr.io/$PROJECT_ID/rethinkdb-server:$LAST_VERSION
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 8080
name: admin-port
- containerPort: 28015
name: driver-port
- containerPort: 29015
name: cluster-port
volumeMounts:
- mountPath: /data/rethinkdb_data
name: rethinkdb-storage
volumes:
- name: rethinkdb-storage
persistentVolumeClaim:
claimName: rethinkdb-pvc
你是如何处理的?
我看到您在 deployment
中添加了 PersistentVolumeClaim
。我还看到您正在尝试扩展节点池。
A PersistentVolumeClaim
将在部署中工作,但前提是您不扩展 deployment
。这就是出现该错误消息的原因。您看到的错误表明在复制新 pod 时该卷已被现有 pod 使用。
因为您正在尝试扩展 deployment
,其他副本将尝试装载并使用相同的卷。
解决方案:将 PersistentVolumeClaim 部署在 statefulset
对象中,而不是 deployment
。有关如何部署 statefulset
的说明,请参见 in this article. With a statefulset,您将能够将 PersistentVolumeClaim 附加到 pod,然后扩展节点池。